我有一个已定义的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,我只是在帮助一个朋友,我想寻求一些解决方案/示例/教程,它们可能会帮助我破解一个简单但有效的类布局来处理这种情况。
提前谢谢你。
发布于 2010-12-02 07:13:58
这实际上取决于您对POA (可移植对象适配器)使用的策略。假设您在服务器中使用RootPOA,则必须:
AccountImpl或AccountServant,正如我在银行服务人员的名字中看到的那样。AccountServant as = new AccountServant(accNr);
使用IDL编译器生成的AccountHelperAccount acc = AccountHelper.narrow(o);
org.omg.CORBA.Object o = rootPOA.servant_to_reference( as );
Account类型。return acc;
这段代码假设您已经为AccountServant java对象编写了一个构造函数,该构造函数接受帐号作为其第一个参数。您还必须向BankServant提供您希望在其中注册新创建的Account对象的POA的引用。
有很多教程。例如,参见this one,因为POA的选项集太多了,需要一本书来解释它们:)。
https://stackoverflow.com/questions/4329952
复制相似问题