|
Прохожу курс "Построение распределенных систем на Java" в третьей лекции где описывается TCPServer вылетает эта ошибка
"Connection cannot be resolved to a type" Java version 1.7.0_05 |
CORBA. Второй пример
Рабочий каталог расположен в Practice.
Следующий пример будет отличаться от предыдущего тем, что в нем будут реализованы методы, оперирующие объектными ссылками. В отличие от предыдущего примера, определим Card как интерфейс, обладающий методами изменения баланса. Объекты типа Card будут создаваться в процессе работы системы, и ссылки на них будут возвращаться клиенту соответствующими методами.
Таким образом, доступ к объектам этого типа будет осуществляться не посредством обращения к сервису имен, а посредством получения объектной ссылки.
Файл BillingService.idl
Файл BillingService.idl содержит описание двух интерфейсов: Card и BillingService.Интерфейс Card содержит три метода: addMoney (добавляет денежные средства на карту), subMoney (снимает денежные средства с карты), getCardBalance (показывает текущий баланс карты). Интерфейс BillingService включает два метода: addNewCard (добавляет новую карту) и getCard (возвращает объектную ссылку на карту с указанным номером).
В примере 8.1 приведено IDL -описание сервера BillingService.
1 // BillingService.idl
2 // IDL-описание BillingService
3 module BillingServiceModule
4 {
5 interface Card
6 {
7 void addMoney(in double money);
8 void subMoney(in double money);
9 double getBalance();
10 };
11 interface BillingService
12 {
13 Card getCard(in string card);
14 Card addNewCard(in string personName, in string card);
15 };
16 };
Листинг
8.1.
IDL-описание сервера BillingService
Следующим шагом в реализации нашего приложения будет генерация из IDL -определения вспомогательных классов.
После компиляции файла BillingService.idl компилятор Java-IDL создает следующие файлы на стороне сервера в вновь созданной директории BillingServiceModule:
BillingService.java, BillingServiceHelper.java, BillingServiceHolder.java, BillingServiceOperations.java, BillingServicePOA.java, _BillingServiceStub.java, Card.java, CardHelper.java, CardHolder.java, CardOperations.java, CardPOA.java, _CardStub.java.
Рассмотрим подробнее эти файлы (в этих файлах определены классы и интерфейсы языка java ) и то, как мы можем их использовать при создании нашего приложения.
BillingService.java и BillingServiceOperations.java - интерфейсы. BillingService.java (пример 8.2) представляет собой интерфейс BillingService.
1 package com.asw.corba.ex2.BillingServiceModule;
2
3
4 /**
5 * com/asw/corba/ex2/BillingServiceModule/BillingService.java .
6 * Generated by the IDL-to-Java compiler (portable), version "3.1"
7 * from com/asw/corba/ex2/BillingService.idl
8 * 16 Июль 2006 г. 15:01:11 MSD
9 */
10
11 public interface BillingService extends BillingServiceOperations,
12 org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity
13 {
14 } // interface BillingService
Листинг
8.2.
Интерфейс BillingService, созданный idlj
В строках 11 и 12 объявлены интерфейс BillingService и три интерфейса, от которых наследует BillingService.Как уже говорилось, два из этих трех интерфейсов являются определенными в CORBA типами, от которых должны наследовать все CORBA -совместимые объекты, org.omg.CORBA.Object и org.omg.CORBA.portable.IDLEntity.Третий интерфейс - BillingServiceOperations (пример 8.3) - создается на основе IDL -описания и объявляет открытые операции данного сервера. BillingService определяет базовый класс, который наследует от BillingServiceOperations и от CORBA -интерфейсов, упомянутых ранее. BillingServiceOperations объявляет два метода, изначально определенные в IDL.
1 package com.asw.corba.ex2.BillingServiceModule;
2
3
4 /**
5 * com/asw/corba/ex2/BillingServiceModule/BillingServiceOperations.java .
6 * Generated by the IDL-to-Java compiler (portable), version "3.1"
7 * from com/asw/corba/ex2/BillingService.idl
8 * 16 Июль 2006 г. 15:01:11 MSD
9 */
10
11 // определение CORBA-совместимого сервиса
12 public interface BillingServiceOperations
13 {
14 com.asw.corba.ex2.BillingServiceModule.Card getCard (String card);
15 com.asw.corba.ex2.BillingServiceModule.Card addNewCard
(String personName, String card);
16 } // interface BillingServiceOperations
Листинг
8.3.
Интерфейс BillingServiceOperations, созданный idlj
Файлы BillingServiceHelper.java (пример 8.4) и BillingServiceHolder.java (пример 8.5) содержат методы приведения типов и методы маршаллинга/демаршаллинга сообщений.
1 package com.asw.corba.ex2.BillingServiceModule;
2
3
4 /**
5 * com/asw/corba/ex2/BillingServiceModule/BillingServiceHelper.java
6 * Generated by the IDL-to-Java compiler (portable), version "3.1"
7 * from com/asw/corba/ex2/BillingService.idl
8 * 16 Июля 2006 г. 15:01:11 MSD
9 */
10
11 // определение класса BillingServiceHelper
12 abstract public class BillingServiceHelper
13 {
14 private static String _id =
"IDL:BillingServiceModule/BillingService:1.0";
15
16 public static void insert (org.omg.CORBA.Any a,
com.asw.corba.ex2.BillingServiceModule.BillingService that)
17 {
18 org.omg.CORBA.portable.OutputStream out = a.create_output_stream ();
19 a.type (type ());
20 write (out, that);
21 a.read_value (out.create_input_stream (), type ());
22 }
23
24 public static com.asw.corba.ex2.BillingServiceModule.BillingService
extract (org.omg.CORBA.Any a)
25 {
26 return read (a.create_input_stream ());
27 }
28
29 private static org.omg.CORBA.TypeCode__typeCode = null;
30
31 synchronized public static org.omg.CORBA.TypeCode type ()
32 {
33 if (__typeCode == null)
34 {
35 __typeCode = org.omg.CORBA.ORB.init ().create_interface_tc
(com.asw.corba.ex2.BillingServiceModule.BillingServiceHelper.id (),
"BillingService");
36 }
37 return __typeCode;
38 }
39
40 public static String id ()
41 {
42 return _id;
43 }
44
45 public static com.asw.corba.ex2.BillingServiceModule.BillingService
read (org.omg.CORBA.portable.InputStream istream)
46 {
47 return narrow (istream.read_Object (_BillingServiceStub.class));
48 }
49
50 public static void write (org.omg.CORBA.portable.OutputStream ostream,
com.asw.corba.ex2.BillingServiceModule.BillingService value)
51 {
52 ostream.write_Object ((org.omg.CORBA.Object) value);
53 }
54
55 public static com.asw.corba.ex2.BillingServiceModule.BillingService
narrow (org.omg.CORBA.Object obj)
56 {
57 if (obj == null)
58 return null;
59 else if (obj instanceof
com.asw.corba.ex2.BillingServiceModule.BillingService)
60 return (com.asw.corba.ex2.BillingServiceModule.BillingService)obj;
61 else if (!obj._is_a (id ()))
62 throw new org.omg.CORBA.BAD_PARAM ();
63 else
64 {
65 org.omg.CORBA.portable.Delegate delegate =
((org.omg.CORBA.portable.ObjectImpl)obj)._get_delegate ();
66 com.asw.corba.ex2.BillingServiceModule._BillingServiceStub stub =
new com.asw.corba.ex2.BillingServiceModule._BillingServiceStub ();
67 stub._set_delegate(delegate);
68 return stub;
69 }
70 }
71 }
Листинг
8.4.
Класс BillingServiceHelper, созданный idlj
1 package com.asw.corba.ex2.BillingServiceModule;
2
3 /**
4 * com/asw/corba/ex2/BillingServiceModule/BillingServiceHolder.java .
5 * Generated by the IDL-to-Java compiler (portable), version "3.1"
6 * from com/asw/corba/ex2/BillingService.idl
7 * 16 Июль 2006 г. 15:01:11 MSD
8 */
9
10 // определение класса BillingServiceHolder
11 public final class BillingServiceHolder implements
org.omg.CORBA.portable.Streamable
12 {
13 public com.asw.corba.ex2.BillingServiceModule.BillingService value
= null;
14
15 public BillingServiceHolder ()
16 {
17 }
18
19 public BillingServiceHolder
(com.asw.corba.ex2.BillingServiceModule.BillingService initialValue)
20 {
21 value = initialValue;
22 }
23
24 public void _read (org.omg.CORBA.portable.InputStream i)
25 {
26 value =
com.asw.corba.ex2.BillingServiceModule.BillingServiceHelper.read (i);
27 }
28
29 public void _write (org.omg.CORBA.portable.OutputStream o)
30 {
31 com.asw.corba.ex2.BillingServiceModule.BillingServiceHelper.write
(o, value);
32 }
33
34 public org.omg.CORBA.TypeCode _type ()
35 {
36 return
com.asw.corba.ex2.BillingServiceModule.BillingServiceHelper.type ();
37 }
38 }
Листинг
8.5.
Класс BillingServiceHolder, созданный idlj