Опубликован: 10.10.2010 | Уровень: специалист | Доступ: платный
Лекция 6:

Использование CORBA

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >

Файл _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
< Лекция 5 || Лекция 6: 123456 || Лекция 7 >
Алмаз Мурзабеков
Алмаз Мурзабеков
Прохожу курс "Построение распределенных систем на Java" в третьей лекции где описывается TCPServer вылетает эта ошибка
"Connection cannot be resolved to a type"


Java version 1.7.0_05
Александр Хвостов
Александр Хвостов
Россия
Максим Лютов
Максим Лютов
Россия, СПб, Политех, 2012