簡體   English   中英

從Tomcat 6訪問JBoss AS 7.x中的EJB時出現問題

[英]Problems accessing EJB in JBoss AS 7.x from Tomcat 6

我試圖從運行在Tomcat 6下的Servlet對JBoss AS 7.1.1 final內部運行的某些EJB進行一些遠程調用。EJB是封閉源代碼,可以從某些給定的jar(封閉代碼)中訪問,這些jar使用Delegate-Pattern包裝對無狀態Bean的訪問。

在為jndi-lookup選擇正確的配置之后,我經過幾天的努力,發現了不同的配置,所有這些都帶來了不同的問題。

解決方案A:

由於Tomcat 6擁有自己的jndi,因此僅在類路徑中放置jndi.properties(如果從簡單的Java應用程序訪問EJB則可以正常工作)就不起作用。 相反,我將哈希表中的屬性傳遞給委托的構造函數,如下所示:

Hashtable<String, String> jndiProperties = new Hashtable<String, String>();
jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.as.naming.interfaces:org.jboss.ejb.client.naming");
jndiProperties.put(Context.PROVIDER_URL, "remote://10.10.10.10:4447");
jndiProperties.put(Context.SECURITY_PRINCIPAL, "user");
jndiProperties.put(Context.SECURITY_CREDENTIALS, "password");

Delegate someDelegate = new DelegateImpl(jndiProperties);

這導致以下異常(在簡單的Java應用程序中執行此操作不會發生):

java.lang.IllegalStateException: No EJB receiver available for handling [appName:eex,modulename:eex-ejb,distinctname:] combination for invocation context 

一些研究建議我嘗試...。

解決方案B:

我添加了以下行:

jndiProperties.put("jboss.naming.client.ejb.context", "true");

現在查找和遠程調用可以正常工作,但是在進行一些調用之后,我得到以下異常(在簡單的Java應用程序中執行此操作時也會發生此異常):

org.jboss.remoting3.ProtocolException: Too many channels open

據我了解,將jboss.naming.client.ejb.context設置為true,將為JBoss AS端的每次查找創建一個新的EJBClientContext,並且Delegate似乎無法正確關閉它。 https://docs.jboss.org/author/display/WFLY8/Scoped+EJB+client+contexts下,有關於如何正確關閉所有上下文的詳細說明。

由於我不擁有Delegate源代碼,因此無法正確關閉上下文。

所以我嘗試了...

解決方案C:

有一種完全不同的查找方法:通過提供jboss-ejb-client.xml而不是jndi.properties。 這可以與tomcat一起很好地工作,並且使用此配置可​​以很好地進行查找:

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.port=4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.default.host=10.10.10.10
remote.connection.default.username=user
remote.connection.default.password=password

但是,使用此配置,我會不時遇到以下異常(到目前為止,我無法重現它,有時會發生該異常):

ERROR: JBREM000200: Remote connection failed: the timeout for the connection expired
...and some lines later...
Caused by: java.io.IOException: Channel Channel ID 841ded9c (outbound) of Remoting connection 00dcc89a to null has been closed

任何幫助都受到高度贊賞...

好的,我終於可以解決我的問題了。

我仍然不知道解決方案A問題的答案。

我描述了解決方案B的可能問題。

解決方案C的例外是由我們的防火牆引起的,防火牆在不活動了幾分鍾后就刪除了會話表條目。 我通過添加解決了

remote.connection.default.connect.options.org.jboss.remoting3.RemotingOptions.HEARTBEAT_INTERVAL=60000

到jboss-ejb-client.properties。

這導致每分鍾從客戶端到JBoss AS的“ ping”,這可以防止防火牆刪除會話條目。

所以...我也遇到了這個問題(和其他問題),我將嘗試在這里解釋(我不知道是否用正確的術語)我打算做什么以及如何解決,這對我有用。 我們進行了幾次遠程ejb調用,最終遇到了以下問題:

Caused by: java.io.IOException: Channel Channel ID fa8f69c7 (outbound) of Remoting connection 0196f4b5 to null has been closedhttps://developer.jboss.org/thread/198390

這是由於沒有管理上下文的遠程調用而發生的,因此JBoss本身負責自動管理通信通道。 但是,隨着時間的流逝,由於已知或未知的原因(防火牆,連接限制,上載新版本時),此連接逐漸閑置並最終“失去”了該連接

因此,為了解決第一個問題,我查看了以下文檔:

https://docs.jboss.org/author/display/WFLY8/Scoped+EJB+client+contexts

放置以下屬性后:

props.put ("org.jboss.ejb.client.scoped.context", "true");

然后我們管理ejb范圍,因此我們可以打開和關閉通信通道。 所以我遇到了另一個問題:

無法識別的SSL消息,純文本連接

從理論上講,這是因為服務器默認不支持ssl通信。 要解決此問題,必須放置以下屬性:

props.put ("remote.connection." + ConnectionName "+ connect.options.org.xnio.Options.SSL_ENABLED", "false");

(您必須以相同的方式填寫主機和端口)

然后我們陷入另一個問題:

Invalid option 'org.xnio.Options.SSL_ENABLED' in property 'remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED': java.lang.IllegalArgumentException: Class 'org.xnio.Options' not found

這是由於缺乏對XNIO的依賴。 您可以將jboss-ejb-client的依賴項放在可以解決的pom上(在我的情況下,我使用jboss-as-ejb-client-bom),但這對我來說部分解決了。 當它出現在不同的耳朵時,我遇到了相同的問題,直到最后我將此配置放在jboss-deployment-structure.xml中以導出依賴項:

<jboss-deployment-structure>
  <deployment>
    <dependencies>
      <module name = "org.jboss.xnio" export = "true" />
    </dependencies>
  </deployment>
</jboss-deployment-structure>

終於看到了該類,它可以實例化並將SSL_ENABLED設置為false。 現在,我可以手動管理ejb范圍,並且可以打開和關閉通道,解決閉合的連接問題。

希望能幫助到你。

暫無
暫無

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

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