【问题标题】:CORBA + IDL + Java: need help with writing servantCORBA + IDL + Java:在编写仆人方面需要帮助
【发布时间】:2010-12-02 07:13:57
【问题描述】:

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

提前谢谢你。

【问题讨论】:

    标签: java design-patterns corba idl


    【解决方案1】:

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

    1. 为 Account 对象创建一个实现对象。这通常称为AccountImplAccountServant,正如我在银行服务员的名字中看到的那样。

      AccountServant as = new AccountServant(accNr);

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

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

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

      Account acc = AccountHelper.narrow(o);

    4. 退货

      return acc;

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

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

    【讨论】:

    • 非常感谢 - 我不想了解所有关于 CORBA 的知识,因为这应该是一个 15 分钟的帮助任务,但我几乎没有遇到任何问题,即使在阅读了一些教程之后。
    猜你喜欢
    • 2011-10-04
    • 2021-10-19
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多