Реализация интерфейса CORBA в JBoss - PullRequest
3 голосов
/ 23 февраля 2011

Я ищу учебник или любую дополнительную информацию о том, как сделать EJB (или базовый MBean) доступным через CORBA.

Это все, что я нашел: http://www.jboss.org/jbossiiop

У меня есть сервер CORBA (основанный на Java, но нестандартный), и я хочу разрешить ему вызывать мой JBoss MBean. Этот MBean уже предоставляется через RMI с использованием EJB (v2.1).

Текущая целевая версия AppServer - jboss-eap-4.3.


Редактировать: Я надеюсь, что мой вопрос слишком неопределенный, чтобы на него можно было ответить, поэтому вот обновление:

Я хочу, чтобы мой EJB, работающий в JBoss, регистрировался в Corba ORB, работающем на удаленном отдельном сервере. По крайней мере, я так думаю. Существующий клиент CORBA подключается к сервисам через определенный IDL / интерфейс, который я пытаюсь реализовать через EJB JBoss. На этом этапе указанный клиент подключается к нескольким экземплярам одного и того же интерфейса для извлечения информации и управления локальными (одинаковыми процессами) службами через этот интерфейс. Я хочу, чтобы JBoss EJB был добавлен как еще одна реализация этого CORBA IDL.

Мое понимание CORBA с самого начала было ржавым и слабым, поэтому я не слишком далеко ухожу. Я могу достаточно легко запустить ORB в JBoss, но мне не ясно, как настроить привязку, чтобы «устаревший» CORBA ORB мог ее найти. Я могу изменить любую часть реализации JBoss, чтобы заставить эту работу работать, но изменить другой сервер сложно.

Есть ли способ для EJB зарегистрироваться на удаленном сервере (ala jndi)? Сможет ли существующий клиент подключиться к Jacorb без добавления определенных классов jboss?

Ответы [ 2 ]

3 голосов
/ 27 февраля 2011

Короче говоря, вы должны реализовать адаптер, развернуть его в Jboss, зарегистрировать его в удаленном NamingService.В реализации вашего адаптера вы называете ваши MBeans.

Теперь более подробно У вас есть идентификатор CORBA, вы генерируете заглушки и скелеты.

interface Stock {
    int getQuote( in string company);
};

Вы предоставляете необходимую реализацию

public class StockImpl extends StockPOA {
  public int getQuote(String company) {
     //forward a call to MBean here
  }
}

Вы делаете обычные действия по регистрации в CORBA.что-то вроде:

org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(...);
org.omg.PortableServer.POA poa = org.omg.PortableServer.POAHelper.narrow(orb.resolve_initial_references("RootPOA"));

poa.the_POAManager().activate();

NamingContextExt nc = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));

NameComponent [] name = new NameComponent[1];

org.omg.CORBA.Object o = poa.servant_to_reference( new StockImpl(orb,poa));
name[0] = new NameComponent( "Stock", "server");
nc.bind(name, o);

orb.run();

Теперь ваш объект зарегистрирован в удаленном NamingService и доступен через CORBA.

Вы должны включить банки CORBA в путь к классам JBOSS.

1 голос
/ 18 марта 2011
  1. Сфера Corba - это слушатель сокетов, поэтому лучше использовать тот, что находится под контролем JBoss, то есть стандартный шар:

    ObjectName ORB_NAME = ObjectNameFactory.create ("jboss: service = CorbaORB"); ORB orb = (ORB) server.getAttribute (ORB_NAME, "ORB");

  2. чтобы автоматически запустить службу Corba, сделайте это в службе JBoss Service: http://community.jboss.org/wiki/examplehelloworldservice

  3. Чтобы избежать необходимости компилировать IDL, вы можете использовать интерфейс динамического вызова. Посмотрите, как модуль Axis2 CORBA делает это: http://wso2.org/library/2807

  4. Вам не нужен шар на пути к классам, если вы используете конфигурацию JBoss "all", включая Corba.

...