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