【问题标题】:How to access EJB deployed to GlassFish 2 server from web app deployed to JBoss EAP 6?如何从部署到 JBoss EAP 6 的 Web 应用程序访问部署到 GlassFish 2 服务器的 EJB?
【发布时间】:2014-10-21 12:57:52
【问题描述】:

我们正在将我们的 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),那我做错了什么?

【问题讨论】:

    标签: java jboss ejb jboss-eap-6 glassfish-2.x


    【解决方案1】:

    您的前两种方法是错误的,因为它们依赖于 Glassfish,并且您希望从 JBoss 连接到 Glassfish。

    根据the documentation.,最后一种方法似乎有些正确

    我会首先检查主机/端口是否可访问,并打开所有可能的日志记录以查看发生了什么。

    【讨论】:

    • 主机/端口是可访问的,我可以从同一台机器上的 GF 服务器访问这个 EJB。我也试过this approach,但看起来我的 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
    • 我做了一些调试,发现 jboss-client 仅将查找名称与 JBoss 上其他(本地)部署的应用程序进行比较。它似乎甚至没有尝试连接到远程服务器。这就是为什么我认为它没有读取提供的 jboss-ejb-client.properties 或者至少没有使用它的属性。如果有人会说如何正确使用 jboss-ejb-client.properties 的方法,那也会很有帮助。
    猜你喜欢
    • 2018-09-08
    • 2019-01-31
    • 2012-09-10
    • 2018-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多