2013-11-22 33 views
1

我有一個企業應用程序在JBOSS 5.1上解密。它需要遠程訪問部署在另一個JBOSS AS 7.0+實例上的EJB。 現在由於AS 7.0+遠程訪問EJB協議發生了變化,並且依賴於jboss-client.jar文件內容進行遠程訪問。從JBOSS 5.1遠程訪問JBOSS AS7.1上的EJB

來自7.0+的jboss-client.jar中的一些類具有與5.1中可用的libaries相同的結構(例如:org.jboss.logging.Logger)。但是這兩個類都有不同的方法。

從5.1調用一個遠程EJB如下

final Hashtable jndiProperties = new Hashtable(); 
jndiProperties.put(Context.URL_PKG_PREFIXES,"org.jboss.ejb.client.naming"); 
context = new InitialContext(jndiProperties); 

final String appName = "my-ear"; 
final String moduleName = "my-ejb-1.0"; 
final String distinctName = ""; 
final String beanName = "ServiceBean";   
final String viewClassName = "org.test.Service"; 
// let's do the lookup 
Service service = (Service) context.lookup("ejb:" + appName + "/" 
       + moduleName + "/" + distinctName + "/" + beanName + "!" 
       + viewClassName + "?stateful"); 

導致NoSuchMethodException爲org.jboss.logging.Logger.getMessageLogger

這是因爲JBOSS 5.1有一個名爲「的jboss-測井庫spi.jar'包含與上面完全相同的類(Logger)。因此JVM嘗試調用'jboss-logging-spi.jar'中定義的Logger類中的getMessageLogger,而不是'jboss-client.jar'。

關於如何強制JVM尋找合適的類(jboss-client.jar中的記錄器)的任何想法?

到目前爲止,我試過這個選項:

上解決調用在JBoss 7.0+遠程託管的EJB應用程序從運行在JBoss 5.1的這個問題的任何想法?

回答

0

爲了解決類版本問題,第三個選項看起來是正確的方法。

我從已發佈的鏈接看到的是,可能you need添加到類加載元素的屬性:

parent-first="false" 

父一(真/假) - 類加載器應加載第一 一切從你的戰爭/耳/罐,然後從父(在 戰爭/耳內罐子就意味着耳朵的情況下,否則就JBossAS)

Additionaly,有在處理Classloder配置時可以使用的幾個工具,啓用jboss classloder logging並使用JMX Console

我希望這可以提供幫助。