Прохожу курс "Построение распределенных систем на 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