Прохожу курс "Построение распределенных систем на Java" в третьей лекции где описывается TCPServer вылетает эта ошибка
"Connection cannot be resolved to a type" Java version 1.7.0_05 |
Использование CORBA
Файл _BillingServiceStub.java (пример 6.6) содержит клиентскую заглушку, с которой будет иметь дело клиент. Класс _BillingServiceStub наследует от org.omg.CORBA.portable.ObjectImpl и реализует интерфейс BillingService.При вызове клиентом методов этого класса происходят упаковка вызова (и параметров) и их передача по сети серверному классу. Поскольку этот метод реализует интерфейс BillingService,клиент будет пребывать в полной уверенности, что вызывает непосредственно методы серверного класса.
1 package com.asw.corba.ex1.BillingServiceModule; 2 3 /** 4 * com/asw/corba/ex1/BillingServiceModule/_BillingServiceStub.java . 5 * Generated by the IDL-to-Java compiler (portable), version "3.1" 6 * from com/asw/corba/ex1/BillingService.idl 7 * 16 Июль 2006 г. 14:12:21 MSD 8 */ 9 10 // определение класса _BillingServiceStub 11 public class _BillingServiceStub extends org.omg.CORBA.portable.ObjectImpl implements com.asw.corba.ex1.BillingServiceModule.BillingService 12 { 13 public void addNewCard (String personName, String card) 14 { 15 org.omg.CORBA.portable.InputStream $in = null; 16 try { 17 org.omg.CORBA.portable.OutputStream $out = _request ("addNewCard", true); 18 $out.write_string (personName); 19 $out.write_string (card); 20 $in = _invoke ($out); 21 return; 22 } catch (org.omg.CORBA.portable.ApplicationException $ex) { 23 $in = $ex.getInputStream (); 24 String _id = $ex.getId (); 25 throw new org.omg.CORBA.MARSHAL (_id); 26 } catch (org.omg.CORBA.portable.RemarshalException $rm) { 27 addNewCard (personName, card ); 28 } finally { 29 _releaseReply ($in); 30 } 31 } // addNewCard 32 33 public void addMoney (String card, double money) 34 { 35 org.omg.CORBA.portable.InputStream $in = null; 36 try { 37 org.omg.CORBA.portable.OutputStream $out = _request ("addMoney", true); 38 $out.write_string (card); 39 $out.write_double (money); 40 $in = _invoke ($out); 41 return; 42 } catch (org.omg.CORBA.portable.ApplicationException $ex) { 43 $in = $ex.getInputStream (); 44 String _id = $ex.getId (); 45 throw new org.omg.CORBA.MARSHAL (_id); 46 } catch (org.omg.CORBA.portable.RemarshalException $rm) { 47 addMoney (card, money ); 48 } finally { 49 _releaseReply ($in); 50 } 51 } // addMoney 52 53 public void subMoney (String card, double money) 54 { 55 org.omg.CORBA.portable.InputStream $in = null; 56 try { 57 org.omg.CORBA.portable.OutputStream $out = _request ("subMoney", true); 58 $out.write_string (card); 59 $out.write_double (money); 60 $in = _invoke ($out); 61 return; 62 } catch (org.omg.CORBA.portable.ApplicationException $ex) { 63 $in = $ex.getInputStream (); 64 String _id = $ex.getId (); 65 throw new org.omg.CORBA.MARSHAL (_id); 66 } catch (org.omg.CORBA.portable.RemarshalException $rm) { 67 subMoney (card, money ); 68 } finally { 69 _releaseReply ($in); 70 } 71 } // subMoney 72 73 public double getCardBalance (String card) 74 { 75 org.omg.CORBA.portable.InputStream $in = null; 76 try { 77 org.omg.CORBA.portable.OutputStream $out = _request ("getCardBalance", true); 78 $out.write_string (card); 79 $in = _invoke ($out); 80 double $result = $in.read_double (); 81 return $result; 82 } catch (org.omg.CORBA.portable.ApplicationException $ex) { 83 $in = $ex.getInputStream (); 84 String _id = $ex.getId (); 85 throw new org.omg.CORBA.MARSHAL (_id); 86 } catch (org.omg.CORBA.portable.RemarshalException $rm) { 87 return getCardBalance (card ); 88 } finally { 89 _releaseReply ($in); 90 } 91 } // getCardBalance 92 93 // Type-specific CORBA::Object operations 94 private static String[]__ids = { 95 "IDL:BillingServiceModule/BillingService:1.0"}; 96 97 public String[] _ids () 98 { 99 return (String[])__ids.clone (); 100 } 101 102 private void readObject (java.io.ObjectInputStream s) throws java.io.IOException 103 { 104 String str = s.readUTF (); 105 String[] args = null; 106 java.util.Properties props = null; 107 org.omg.CORBA.Object obj = org.omg.CORBA.ORB.init (args, props).string_to_object (str); 108 org.omg.CORBA.portable.Delegate delegate = ((org.omg.CORBA.portable.ObjectImpl) obj)._get_delegate (); 109 _set_delegate (delegate); 110 } 111 112 private void writeObject (java.io.ObjectOutputStream s) throws java.io.IOException 113 { 114 String[] args = null; 115 java.util.Properties props = null; 116 String str = org.omg.CORBA.ORB.init (args, props).object_to_string (this); 117 s.writeUTF (str); 118 } 119 } // class _BillingServiceStubЛистинг 6.6. Класс BillingServiceStub, созданный idlj
И, наконец, последний файл BillingServicePOA.java (пример 6.7) содержит класс, выполняющий всю техническую работу по диспетчеризации сообщений клиента, - этот класс будет являться предком для нашего серверного класса, в котором мы переопределим методы, выполняющие содержательные операции. Класс BillingServicePOA наследует от org.omg.PortableServer.Servant и реализует CORBA -интерфейс (InvokeHandler) и интерфейс BillingServiceOperations.Интерфейс InvokeHandler объявляет метод _invoke,который является реализацией BillingServicePOA. ORB использует метод _invoke для вызова различных методов BillingService в обобщенном виде. Метод _invoke создается IDL -компилятором на основе IDL -интерфейса, объявленного в IDL -файле BillingService.idl.
1 package com.asw.corba.ex1.BillingServiceModule; 2 3 /** 4 * com/asw/corba/ex1/BillingServiceModule/BillingServicePOA.java . 5 * Generated by the IDL-to-Java compiler (portable), version "3.1" 6 * from com/asw/corba/ex1/BillingService.idl 7 * 16 Июль 2006 г. 14:12:21 MSD 8 */ 9 10 // определение класса BillingServicePOA 11 public abstract class BillingServicePOA extends org.omg.PortableServer.Servant 12 implements com.asw.corba.ex1.BillingServiceModule.BillingServiceOperations, org.omg.CORBA.portable.InvokeHandler 13 { 14 15 // Constructors 16 17 private static java.util.Hashtable _methods = new java.util.Hashtable (); 18 static 19 { 20 _methods.put ("addNewCard", new java.lang.Integer (0)); 21 _methods.put ("addMoney", new java.lang.Integer (1)); 22 _methods.put ("subMoney", new java.lang.Integer (2)); 23 _methods.put ("getCardBalance", new java.lang.Integer (3)); 24 } 25 26 public org.omg.CORBA.portable.OutputStream _invoke (String $method, 27 org.omg.CORBA.portable.InputStream in, 28 org.omg.CORBA.portable.ResponseHandler $rh) 29 { 30 org.omg.CORBA.portable.OutputStream out = null; 31 java.lang.Integer __method = (java.lang.Integer)_methods.get ($method); 32 if (__method == null) 33 throw new org.omg.CORBA.BAD_OPERATION (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE); 34 35 switch __method.intValue ()) 36 { 37 case 0: // BillingServiceModule/BillingService/addNewCard 38 { 39 String personName = in.read_string (); 40 String card = in.read_string (); 41 this.addNewCard (personName, card); 42 out = $rh.createReply(); 43 break; 44 } 45 46 case 1: // BillingServiceModule/BillingService/addMoney 47 { 48 String card = in.read_string (); 49 double money = in.read_double (); 50 this.addMoney (card, money); 51 out = $rh.createReply(); 52 break; 53 } 54 55 case 2: // BillingServiceModule/BillingService/subMoney 56 { 57 String card = in.read_string (); 58 double money = in.read_double (); 59 this.subMoney (card, money); 60 out = $rh.createReply(); 61 break; 62 } 63 64 case 3: // BillingServiceModule/BillingService/getCardBalance 65 { 66 String card = in.read_string (); 67 double $result = (double)0; 68 $result = this.getCardBalance (card); 69 out = $rh.createReply(); 70 out.write_double ($result); 71 break; 72 } 73 74 default: 75 throw new org.omg.CORBA.BAD_OPERATION (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE); 76 } 77 return out; 78 } // _invoke 79 80 // Type-specific CORBA::Object operations 81 private static String[] __ids = { 82 "IDL:BillingServiceModule/BillingService:1.0"}; 83 84 public String[] _all_interfaces (org.omg.PortableServer.POA poa, byte[] objectId) 85 { 86 return (String[])__ids.clone (); 87 } 88 89 public BillingService _this() 90 { 91 return BillingServiceHelper.narrow(super._this_object()); 92 } 93 94 public BillingService _this(org.omg.CORBA.ORB orb) 95 { 96 return BillingServiceHelper.narrow(super._this_object(orb)); 97 } 98 } // class BillingServicePOAЛистинг 6.7. Класс BillingServicePOA, созданный idlj