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