有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

设计模式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) 个答案

  1. # 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;

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

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