设计模式CORBA+IDL+Java:需要帮助编写服务吗
我有一个已定义的idl文件,如下所示:
module Banking {
typedef string Transactions[5];
typedef long AccountId;
interface Account {
exception InsufficientFunds {};
readonly attribute double balance;
long lodge(in double amount);
long withdraw(in double amount) raises (InsufficientFunds);
readonly attribute Transactions transactions;
};
interface Bank {
long accountCount();
double totalMoney();
Account account(in AccountId accNr);
};
};
我用idlj编译的。我已经定义了一个BankServant,客户端使用它与服务器通信,我有一个工作程序,几乎实现了所有方法。我唯一的问题是,我不知道如何实现account(in AccountId accNr)
方法,该方法将返回正确的Account对象。由于我不了解CORBA,我只是在帮助一位朋友,我想寻求一些解决方案/示例/教程,它们可能会帮助我破解一个简单但工作阶级的布局来处理这种情况
先谢谢你
# 1 楼答案
这实际上取决于POA(可移植对象适配器)使用的策略。假设您在服务器中使用RootPOA,您必须:
为Account对象创建实现对象。这通常被称为
AccountImpl
或AccountServant
,正如我在银行服务人员的名字中看到的那样AccountServant as = new AccountServant(accNr);
您必须在POA中注册对象。这同样与您为POA选择的策略有关。使用默认根POA:
org.omg.CORBA.Object o = rootPOA.servant_to_reference( as );
使用生成的IDL编译器
AccountHelper
将其缩小为正确的Account
类型:Account acc = AccountHelper.narrow(o);
还它
return acc;
此代码假定您已经为
AccountServant
java对象编写了一个构造函数,该对象接受帐号作为其第一个参数。您还必须向BankServant
提供对POA的引用,您要在其中注册新创建的Account
对象有很多教程。例如,请参见this one,因为POA的选项集太多,需要一本书来解释它们:)