Как получить доступ к EJB, развернутому на сервере GlassFish 2, из веб-приложения, развернутого на JBoss EAP 6?

Мы переносим наше веб-приложение с GF 2.1.1 (Java 6) на JBoss EAP 6.3.0 (Java 7), и нам нужно какое-то время использовать один EJB из GF, пока он также не будет перенесен на JBoss.

1 — Раньше мы просто использовали внешний JNDI-ресурс GF для подключения к этому EJB:

<external-jndi-resource enabled="true"
    factory-class="com.sun.enterprise.naming.SerialInitContextFactory"
    jndi-lookup-name="ejb/NameOfEJB" jndi-name="ejb/NameOfEJB"
    object-type="user" res-type="name.of.ejb.interfaces.NameOfEJB">
  <property name="org.omg.CORBA.ORBInitialPort" value="3700"/>
  <property name="org.omg.CORBA.ORBInitialHost" value="hostname.of.ejb"/>
</external-jndi-resource>

Я пока не нашел ничего похожего на JB.

2 - я пытался добраться до этого EJB через код, используя реализацию GF:

Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
props.setProperty("org.omg.CORBA.ORBInitialHost", zoneHost);
props.setProperty("org.omg.CORBA.ORBInitialPort", zonePort);
InitialContext ic = new InitialContext(props);
Object obj = ic.lookup("ejb/NameOfEJB");

Но я не мог избавиться от всех исключений, которые JB начал выдавать, когда я пытался добавить библиотеки GF (appserv-rt.jar...), необходимые для использования этого подхода.

3 - я также пытался добраться до этого EJB через код, используя реализацию JB:

Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jboss.naming.remote.client.InitialContextFactory");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.ejb.client.naming");
props.put("jboss.naming.client.ejb.context", true);
props.setProperty(Context.PROVIDER_URL, "remote://" + zoneHost+ ":" + zonePort);
// also tried to add Context.SECURITY_PRINCIPAL and CREDENTIALS properties, but they didn't change anything
InitialContext ic = new InitialContext(props);
Object obj = ic.lookup("ejb/NameOfEJB");

Что привело к тайм-ауту через 5 секунд.

Можно ли что-то вроде (1) сделать в JBoss? Это был бы лучший вариант.

Возможен ли подход GF (2) от JBoss?

Если мне нужно использовать подход JB (3), то что я делаю неправильно?


person RunninglVlan    schedule 21.10.2014    source источник


Ответы (1)


Ваши первые два подхода неверны, так как они зависят от Glassfish, и вы хотите подключиться от JBoss к Glassfish.

Последний подход кажется несколько правильным, согласно документацию.

Я бы сначала проверил, доступен ли хост / порт, а также включил все возможные журналы, чтобы увидеть, что происходит.

person Kayaman    schedule 21.10.2014
comment
хост/порт доступен, я могу получить доступ к этому EJB с сервера GF на той же машине. Я также попробовал этот подход, но похоже, что мой JB не хочет читать jboss-ejb-client.properties, которые я предоставил. Из этого исключения java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver available for handling [appName:NameOfEJB, moduleName:NameOfEJB, distinctName:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@1061db9 я предполагаю, что он проверял только локальные EJB. - person RunninglVlan; 21.10.2014
comment
Я провел небольшую отладку и обнаружил, что jboss-client сравнивает имя поиска только с другими (локальными) развернутыми приложениями на JBoss. Похоже, он даже не пытался подключиться к удаленному серверу. Вот почему я думаю, что он не прочитал предоставленный jboss-ejb-client.properties или, по крайней мере, не использовал его свойства. Если бы кто-нибудь сказал, как правильно использовать подход с jboss-ejb-client.properties, это тоже было бы полезно. - person RunninglVlan; 21.10.2014