我们正在将我们的 Web 应用程序从 GF 2.1.1 (Java 6) 迁移到 JBoss EAP 6.3.0 (Java 7),并且需要使用 GF 的一个 EJB 一段时间,直到它也迁移到 JBoss。
1 - 以前我们只是使用 GF 的 External JNDI 资源来连接这个 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 - 我试图通过代码使用 GF 的实现来访问这个 EJB:
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");
但是我无法摆脱所有异常,当我尝试添加使用这种方法所需的 GF 库(appserv-rt.jar ...)时,JB 开始抛出异常。
3 - 我还尝试通过使用 JB 实现的代码来访问这个 EJB:
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 秒后超时。
可以在 JBoss 中完成 (1) 之类的操作吗?那将是最好的选择。
JBoss 甚至可以使用 GF 方法 (2) 吗?
如果我需要使用JB方法(3),那我做错了什么?