我有一個企業應用程序在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-client.jar中)作爲5.1.This企業應用程序的一部分,沒有工作
- 刪除「的jboss-測井spi.jar」。這會停止JBOSS服務器的啓動,因爲這在服務器啓動時被引用
- 使用jboss-classloading.xml文件。這並沒有得到期望的resut以及鏈接:http://www.mastertheboss.com/jboss-configuration/solving-jboss-5-classloading-issues
上解決調用在JBoss 7.0+遠程託管的EJB應用程序從運行在JBoss 5.1的這個問題的任何想法?