java - CORBA + IDL + Java : need help with writing servant

标签 java design-patterns corba idl

我有一个定义的 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 并且我只是在帮助 friend ,我想请求某种解决方案/示例/教程,这可能会帮助我破解一个简单但有效的类布局来处理这种情况。

提前谢谢您。

最佳答案

这实际上取决于您用于 POA(可移植对象适配器)的策略。假设您在服务器中使用 RootPOA,您必须:

  1. 为帐户对象创建一个实现对象。正如我在银行仆人的名称中看到的那样,这通常称为 AccountImplAccountServant

    AccountServant as = new AccountServant(accNr);

  2. 您必须在 POA 中注册该对象。这又与您为 POA 选择的政策有关。使用默认的根 POA:

    org.omg.CORBA.Object o = rootPOA.servant_to_reference( as );

  3. 使用 IDL 编译器生成的 AccountHelper 将其范围缩小到正确的 Account 类型:

    帐户 acc = AccountHelper.narrow(o);

  4. 归还

    返回 acc;

此代码假定您已为 AccountServant java 对象编写了一个构造函数,该对象接受帐号作为其第一个参数。您还必须向 BankServant 提供对要在其中注册新创建的 Account 对象的 POA 的引用。

有很多教程。请参阅this one例如,POA 的选项集太多,需要一本书来解释它们:)。

关于java - CORBA + IDL + Java : need help with writing servant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4329952/

相关文章:

java - 调用 ORB.string_to_object 时 ORB.getPresentationManager 中出现 NullPointerException

java - 如何使用嵌入式 id 编写 JPQL SELECT?

java - 我的 matches() 代码不起作用。为什么它不起作用?

java - Spring Integration 中调用服务激活器与 bean 方法

java - 策略模式或函数指针

java - Objective-C 中的策略设计模式

c++ - 虚拟表未定义

ruby - r2corba 在 OS X 上安装失败

java - 迭代和递归解决方案的时间复杂度

java - 如何使用 IDL 将对象作为参数传递