Реализация интерфейса CORBA в JBoss

Я ищу учебник или любую дополнительную информацию о том, как сделать 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/интерфейс, который я пытаюсь реализовать через JBoss EJB. В этот момент указанный клиент подключается к нескольким экземплярам одного и того же интерфейса, чтобы получать информацию и управлять локальными (одними и теми же процессами) службами через этот интерфейс. Я хочу, чтобы JBoss EJB был просто еще одной реализацией этого CORBA IDL.

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

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


person Steve Jackson    schedule 23.02.2011    source источник
comment
Это не слишком расплывчато, просто вы, вероятно, можете пересчитать количество разработчиков CORBA в stackoverflow на пальцах одной руки.   -  person skaffman    schedule 25.02.2011
comment
@skaffman Мне нужно будет найти вопрос Ады после того, как я освою CORBA.   -  person Steve Jackson    schedule 25.02.2011


Ответы (2)


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

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

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();

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

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

person Oleg Pavliv    schedule 27.02.2011
comment
Спасибо! Это работает. Я надеялся использовать механизм JBoss CORBA (на основе отражения) и избежать idlj, чтобы держать CORBA на расстоянии вытянутой руки. Я, вероятно, закончу тем, что переосуществлю что-то, используя отражение, чтобы избежать написания нового адаптера CORBA для каждого MBean. - person Steve Jackson; 03.03.2011

  1. Сфера Corba — это прослушиватель сокетов, поэтому лучше всего использовать ту, что находится под контролем JBoss, то есть стандартную сферу:

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

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

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

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

person weberjn    schedule 18.03.2011