CORBA + IDL + Java: нужна помощь с написанием слуги - PullRequest
0 голосов
/ 02 декабря 2010

У меня есть определенный файл 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 голос
/ 02 декабря 2010

Это действительно зависит от политик, которые вы используете для POA (Portable Object Adapter). Предполагая, что вы используете RootPOA на сервере, вам необходимо:

  1. Создание объекта реализации для объекта Account. Обычно это называется AccountImpl или AccountServant, как я вижу на имя банковского служащего.

    AccountServant as = new AccountServant(accNr);

  2. Вы должны зарегистрировать объект в АПО. Это опять-таки связано с политиками, выбранными для вашего POA. используя корневой POA по умолчанию:

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

  3. Сузьте его до правильного Account типа, используя сгенерированный компилятором IDL AccountHelper:

    Account acc = AccountHelper.narrow(o);

  4. Вернуть

    return acc;

В этом коде предполагается, что вы написали конструктор для java-объекта AccountServant, который принимает номер учетной записи в качестве первого аргумента. Вы должны предоставить BankServant также ссылку на POA, в котором вы хотите зарегистрировать вновь созданные Account объекты.

Есть много уроков. См. этот , например, так как набор параметров для POA настолько велик, что для их объяснения требуется книга:).

...