簡體   English   中英

TomEE:從不同的機器調用遠程EJB

[英]TomEE: calling a remote EJB from different machines

我有兩個TomEE實例(當前是不同的容器),並且我想讓它們之間運行Remote EJB。 但是,我在執行此操作時遇到了問題。

首先,我在TomEE實例上啟用了遠程EJB支持。 我將以下內容添加到system.properties文件中。 基於此線程, 在Tomee中使用OpenEJB進行遠程EJB查找

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

我的服務器TomEE Ear已成功部署,並且可以看到我的Remote 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應用程序從玻璃魚移到TomEE,因此我正在研究POC,以了解某些JavaEE功能在TomEE下如何工作。

任何幫助將不勝感激。 謝謝!

我實際上發現了我做錯了什么,現在我在不同的TomEE實例上相互進行了遠程EJB交談。 兩件事,一是我的JDNI名稱錯誤。 com.wk.Hello樣式的JDNI名稱查找似乎是Glassfish特定的方式,而不是真正的JavaEE標准方式。 因此,我將JDNI名稱更改為HelloImplRemote。 如果您對JNDI的catalina日志進行grep編譯,您將看到各種查找JNDI資源的方法。

另一個問題是我有兩個不同的Properties實例。

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

一個是props,它是空的,另一個是p,它設置了上下文工廠和提供者URL,但是,在初始化InitialContext對象而不是正確設置所有屬性的正確屬性實例時,我錯誤地使用了空props。

無論如何,修復了這兩件事之后,一切似乎都正常了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM