Прохожу курс "Построение распределенных систем на Java" в третьей лекции где описывается TCPServer вылетает эта ошибка
"Connection cannot be resolved to a type" Java version 1.7.0_05 |
CORBA. Второй пример
Теперь перейдем к рассмотрению интерфейса Card.В файле Card.java (пример 8.8) определен интерфейс Card, наследующий от созданного idlj интерфейса CardOperations (пример 8.9) и двух интерфейсов - они являются определенными в CORBA типами, от которых должны наследовать все CORBA -совместимые объекты, - org.omg.CORBA.Object и org.omg.CORBA.portable.IDLEntity.
1 package com.asw.corba.ex2.BillingServiceModule; 2 3 4 /** 5 * com/asw/corba/ex2/BillingServiceModule/Card.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 Card extends CardOperations, 12 org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity 13 { 14 } // interface CardЛистинг 8.8. Интерфейс Card, созданный idlj
CardOperations, ни от кого не наследуя, объявляет три метода, изначально определенные в IDL.
1 package com.asw.corba.ex2.BillingServiceModule; 2 3 4 /** 5 * com/asw/corba/ex2/BillingServiceModule/CardOperations.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 CardOperations 13 { 14 void addMoney (double money); 15 void subMoney (double money); 16 double getBalance (); 17 } // interface CardOperationsЛистинг 8.9. Интерфейс CardOperations, созданный idlj
Файлы CardHelper.java (пример 8.10) и CardHolder.java (пример 8.11) содержат вспомогательные классы.
1 package com.asw.corba.ex2.BillingServiceModule; 2 3 4 /** 5 * com/asw/corba/ex2/BillingServiceModule/CardHelper.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 // определение класса CardHelper 12 abstract public class CardHelper 13 { 14 private static String _id = "IDL:BillingServiceModule/Card:1.0"; 15 16 public static void insert (org.omg.CORBA.Any a, com.asw.corba.ex2.BillingServiceModule.Card 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.Card 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 synchronized public static org.omg.CORBA.TypeCode type () 31 { 32 if (__typeCode == null) 33 { 34 __typeCode = org.omg.CORBA.ORB.init ().create_interface_tc (com.asw.corba.ex2.BillingServiceModule.CardHelper.id (), "Card"); 35 } 36 return __typeCode; 37 } 38 39 public static String id () 40 { 41 return _id; 42 } 43 44 public static com.asw.corba.ex2.BillingServiceModule.Card read (org.omg.CORBA.portable.InputStream istream) 45 { 46 return narrow (istream.read_Object (_CardStub.class)); 47 } 48 49 public static void write (org.omg.CORBA.portable.OutputStream ostream, com.asw.corba.ex2.BillingServiceModule.Card value) 50 { 51 ostream.write_Object ((org.omg.CORBA.Object) value); 52 } 53 54 public static com.asw.corba.ex2.BillingServiceModule.Card narrow (org.omg.CORBA.Object obj) 55 { 56 if (obj == null) 57 return null; 58 else if (obj instanceof com.asw.corba.ex2.BillingServiceModule.Card) 59 return (com.asw.corba.ex2.BillingServiceModule.Card)obj; 60 else if (!obj._is_a (id ())) 61 throw new org.omg.CORBA.BAD_PARAM (); 62 else 63 { 64 org.omg.CORBA.portable.Delegate delegate = ((org.omg.CORBA.portable.ObjectImpl)obj)._get_delegate (); 65 com.asw.corba.ex2.BillingServiceModule._CardStub stub = new com.asw.corba.ex2.BillingServiceModule._CardStub (); 66 stub._set_delegate(delegate); 67 return stub; 68 } 69 } 70 }Листинг 8.10. Класс CardHelper, созданный idlj
1 package com.asw.corba.ex2.BillingServiceModule; 2 3 /** 4 * com/asw/corba/ex2/BillingServiceModule/CardHolder.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 // определение класса CardHolder 11 public final class CardHolder implements org.omg.CORBA. portable.Streamable 12 { 13 public com.asw.corba.ex2.BillingServiceModule.Card value = null; 14 15 public CardHolder () 16 { 17 } 18 19 public CardHolder (com.asw.corba.ex2.BillingServiceModule.Card 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.CardHelper.read (i); 27 } 28 29 public void _write (org.omg.CORBA.portable.OutputStream o) 30 { 31 com.asw.corba.ex2.BillingServiceModule.CardHelper.write (o, value); 32 } 33 34 public org.omg.CORBA.TypeCode _type () 35 { 36 return com.asw.corba.ex2.BillingServiceModule.CardHelper.type (); 37 } 38 }Листинг 8.11. Класс CardHolder, созданный idlj
Файл _CardStub.java (пример 8.12) содержит клиентскую заглушку. Класс CardStub наследует от org.omg.CORBA.portable.ObjectImpl и реализует интерфейс Card.При вызове клиентом методов этого класса происходит упаковка вызова (и параметров) и их передача по сети серверному классу.
1 package com.asw.corba.ex2.BillingServiceModule; 2 3 /** 4 * com/asw/corba/ex2/BillingServiceModule/_CardStub.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 // определение класса _CardStub 11 public class _CardStub extends org.omg.CORBA.portable.ObjectImpl implements com.asw.corba.ex2.BillingServiceModule.Card 12 { 13 public void addMoney (double money) 14 { 15 org.omg.CORBA.portable.InputStream $in = null; 16 try { 17 org.omg.CORBA.portable.OutputStream $out = _request ("addMoney", true); 18 $out.write_double (money); 19 $in = _invoke ($out); 20 return; 21 } catch (org.omg.CORBA.portable.ApplicationException $ex) { 22 $in = $ex.getInputStream (); 23 String _id = $ex.getId (); 24 throw new org.omg.CORBA.MARSHAL (_id); 25 } catch (org.omg.CORBA.portable.RemarshalException $rm) { 26 addMoney (money ); 27 } finally { 28 _releaseReply ($in); 29 } 30 } // addMoney 31 32 public void subMoney (double money) 33 { 34 org.omg.CORBA.portable.InputStream $in = null; 35 try { 36 org.omg.CORBA.portable.OutputStream $out = _request ("subMoney", true); 37 $out.write_double (money); 38 $in = _invoke ($out); 39 return; 40 } catch (org.omg.CORBA.portable.ApplicationException $ex) { 41 $in = $ex.getInputStream (); 42 String _id = $ex.getId (); 43 throw new org.omg.CORBA.MARSHAL (_id); 44 } catch (org.omg.CORBA.portable.RemarshalException $rm) { 45 subMoney (money ); 46 } finally { 47 _releaseReply ($in); 48 } 49 } // subMoney 50 51 public double getBalance () 52 { 53 org.omg.CORBA.portable.InputStream $in = null; 54 try { 55 org.omg.CORBA.portable.OutputStream $out = _request ("getBalance", true); 56 $in = _invoke ($out); 57 double $result = $in.read_double (); 58 return $result; 59 } catch (org.omg.CORBA.portable.ApplicationException $ex) { 60 $in = $ex.getInputStream (); 61 String _id = $ex.getId (); 62 throw new org.omg.CORBA.MARSHAL (_id); 63 } catch (org.omg.CORBA.portable.RemarshalException $rm) { 64 return getBalance ( ); 65 } finally { 66 _releaseReply ($in); 67 } 68 } // getBalance 69 70 // Type-specific CORBA::Object operations 71 private static String[] __ids = {"IDL:BillingServiceModule/Card:1.0"}; 72 73 public String[] __ids () 74 { 75 return (String[]) __ids.clone (); 76 } 77 78 private void readObject (java.io.ObjectInputStream s) throws java.io.IOException 79 { 80 String str = s.readUTF (); 81 String[] args = null; 82 java.util.Properties props = null; 83 org.omg.CORBA.Object obj = org.omg.CORBA.ORB.init (args, props).string_to_object (str); 84 org.omg.CORBA.portable.Delegate delegate = ((org.omg.CORBA.portable.ObjectImpl) obj)._get_delegate (); 85 _set_delegate (delegate); 86 } 87 88 private void writeObject (java.io.ObjectOutputStream s) throws java.io.IOException 89 { 90 String[] args = null; 91 java.util.Properties props = null; 92 String str = org.omg.CORBA.ORB.init (args, props).object_to_string (this); 93 s.writeUTF (str); 94 } 95 } // class _CardStubЛистинг 8.12. Класс CardStub, созданный idlj
И, наконец, файл CardPOA.java (пример 8.13) содержит класс, выполняющий всю рутинную работу по диспетчеризации сообщений клиента, - этот класс будет являться предком для нашего серверного класса, в котором мы переопределим нужные методы. Класс CardPOA наследует от org.omg.PortableServer.Servant и реализует CORBA -интерфейс InvokeHandler и интерфейс CardOperations.
1 package com.asw.corba.ex2.BillingServiceModule; 2 3 /** 4 * com/asw/corba/ex2/BillingServiceModule/CardPOA.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 // определение класса CardPOA 11 public abstract class CardPOA extends org.omg.PortableServer.Servant 12 implements com.asw.corba.ex2.BillingServiceModule.CardOperations, org.omg.CORBA.portable.InvokeHandler 13 { 14 // Constructors 15 private static java.util.Hashtable _methods = new java.util.Hashtable (); 16 static 17 { 18 _methods.put ("addMoney", new java.lang.Integer (0)); 19 _methods.put ("subMoney", new java.lang.Integer (1)); 20 _methods.put ("getBalance", new java.lang.Integer (2)); 21 } 22 23 public org.omg.CORBA.portable.OutputStream _invoke (String $method, 24 org.omg.CORBA.portable.InputStream in, 25 org.omg.CORBA.portable.ResponseHandler $rh) 26 { 27 org.omg.CORBA.portable.OutputStream out = null; 28 java.lang.Integer __method = (java.lang.Integer)_methods.get ($method); 29 if (__method == null) 30 throw new org.omg.CORBA.BAD_OPERATION (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE); 31 32 switch __method.intValue ()) 33 { 34 case 0: // BillingServiceModule/Card/addMoney 35 { 36 double money = in.read_double (); 37 this.addMoney (money); 38 out = $rh.createReply(); 39 break; 40 } 41 42 case 1: // BillingServiceModule/Card/subMoney 43 { 44 double money = in.read_double (); 45 this.subMoney (money); 46 out = $rh.createReply(); 47 break; 48 } 49 50 case 2: // BillingServiceModule/Card/getBalance 51 { 52 double $result = (double)0; 53 $result = this.getBalance (); 54 out = $rh.createReply(); 55 out.write_double ($result); 56 break; 57 } 58 59 default: 60 throw new org.omg.CORBA.BAD_OPERATION (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE); 61 } 62 return out; 63 } // _invoke 64 65 // Type-specific CORBA::Object operations 66 private static String[] __ids = {"IDL:BillingServiceModule/Card:1.0"}; 67 68 public String[] _all_interfaces (org.omg.PortableServer.POA poa, byte[] objectId) 69 { 70 return (String[])__ids.clone (); 71 } 72 73 public Card _this() 74 { 75 return CardHelper.narrow(super._this_object()); 76 } 77 78 public Card _this(org.omg.CORBA.ORB orb) 79 { 80 return CardHelper.narrow(super._this_object(orb)); 81 } 82 83 } // class CardPOAЛистинг 8.13. Класс CardPOA, созданный idlj