TomEE:从不同的机器调用远程EJB

问题描述 投票:0回答:1

我有两个TomEE实例(当前不同的容器),我想让它们之间的远程EJB工作。但是,我遇到了这样的问题。

首先,我在TomEE实例上启用了远程EJB支持。我将以下内容添加到system.properties文件中。基于这个线程Remote EJB lookup using OpenEJB in Tomee

tomee.remote.support = true
tomee.serialization.class.blacklist = -
tomee.serialization.class.whitelist = *
openejb.system.apps = true
openejb.servicemanager.enabled = true

我的服务器TomEE Ear已成功部署,我可以看到我的远程Ejbs的JNDI名称。

INFO: Extracting jar: /usr/local/tomee/apps/simpleEJB-ear-1.0.ear
INFO: Extracted path: /usr/local/tomee/apps/simpleEJB-ear-1.0
INFO: Found EjbModule in classpath: /usr/local/tomee/apps/simpleEJB-ear-1.0/simpleEJB-ejbs-1.0.jar
INFO: Configuring enterprise application: /usr/local/tomee/apps/simpleEJB-ear-1.0
INFO: Enterprise application "/usr/local/tomee/apps/simpleEJB-ear-1.0" loaded.
INFO: Creating dedicated application classloader for simpleEJB-ear-1.0
INFO: Assembling app: /usr/local/tomee/apps/simpleEJB-ear-1.0
INFO: Jndi(name=global/simpleEJB-ear-1.0/simpleEJB-ejbs-1.0/HelloImpl!com.wk.Hello) --> Ejb(deployment-id=HelloImpl)
INFO: Jndi(name=global/simpleEJB-ear-1.0/simpleEJB-ejbs-1.0/HelloImpl) --> Ejb(deployment-id=HelloImpl)
INFO: Deployed Application(path=/usr/local/tomee/apps/simpleEJB-ear-1.0)

现在当我从另一个TomEE实例进行查找时,我获得了RemoteEJBExceptions。下面是我在TomEE上部署的客户端代码,它查找了远程EJB:

@PostConstruct
public void init() {
Properties props = new Properties();
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
p.put(Context.PROVIDER_URL, "http://172.17.0.2:8080/tomee/ejb");

InitialContext ic = new InitialContext(props);
//hello = (com.wk.Hello) ic.lookup("com.wk.Hello");
hello = (com.wk.Hello) ic.lookup("com.wk.Hello");
}

但是,查找失败,并出现以下异常:

Caused by: javax.ejb.EJBException: javax.naming.NameNotFoundException: Name [com.wk.Hello] is not bound in this Context. Unable to find [com.wk.Hello].

我错过了什么让这个工作?我的目标是将一些JavaEE应用程序从glassfish移到TomEE上,因此我正在开发一个POC,以了解某些JavaEE功能在TomEE下的工作原理。

任何帮助将不胜感激。谢谢!

tomee openejb
1个回答
0
投票

我实际上弄清楚我做错了什么,现在我在不同的TomEE实例上让远程EJB互相交谈。两件事,一件我有错误的JDNI名称。 com.wk.Hello样式的JDNI名称查找似乎是Glassfish特定方式,而不是真正的JavaEE标准方式。所以我将JDNI名称更改为HelloImplRemote。如果您为JNDI greal catalina日志,您将看到可以查找JNDI资源的各种方法。

另一个问题是我有两个不同的属性实例。

Properties props = new Properties();
Properties p = new Properties();

一个是空的道具,另一个是设置上下文工厂和提供者URL的p,但是,我在初始化InitialContext对象时错误地使用空道具而不是正确设置所有内容的正确属性实例。

无论如何在修好这两件事后,一切似乎都在起作用!

© www.soinside.com 2019 - 2024. All rights reserved.