Jakarta ee 从JBOSS 5.1远程访问JBOSS AS7.1上的EJB

Jakarta ee 从JBOSS 5.1远程访问JBOSS AS7.1上的EJB,jakarta-ee,jboss7.x,classloader,ejb-3.0,jboss5.x,Jakarta Ee,Jboss7.x,Classloader,Ejb 3.0,Jboss5.x,我在JBoss5.1上有一个企业应用程序。它需要作为7.0+远程访问部署在另一个JBOSS实例上的EJB。 现在,由于AS 7.0+对EJB协议的远程访问已经改变,远程访问依赖于jboss-client.jar文件内容 7.0+版本的jboss-client.jar中的一些类的结构与5.1Ex中的库相同:org.jboss.logging.Logger。但是,这两个类都有不同的方法集 从5.1调用远程EJB,如下所示 final Hashtable jndiProperties = new H

我在JBoss5.1上有一个企业应用程序。它需要作为7.0+远程访问部署在另一个JBOSS实例上的EJB。 现在,由于AS 7.0+对EJB协议的远程访问已经改变,远程访问依赖于jboss-client.jar文件内容

7.0+版本的jboss-client.jar中的一些类的结构与5.1Ex中的库相同: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");
导致org.jboss.logging.Logger.getMessageLogger出现NoSuchMethodException

这是因为JBOSS 5.1有一个名为“JBOSS logging spi.jar”的库,其中包含与上面完全相同的类记录器。因此,JVM尝试在“jboss logging spi.jar”中定义的记录器类上调用getMessageLogger,而不是在“jboss client.jar”中调用

关于如何强制JVM在jboss-client.jar中查找正确的类记录器,有什么想法吗

到目前为止,我尝试了这个选项:

将jarjboss-client.jar打包为5.1版企业应用程序的一部分。这不起作用 删除“jboss日志记录spi.jar”。这将停止JBOSS服务器的启动,因为这是在服务器启动中提到的 使用jboss-classloading.xml文件。这也没有产生所需的结果链接:
要解决从运行在JBOSS 5.1上的应用程序调用远程托管在JBOSS 7.0+上的EJB的问题,有什么想法吗?

为了解决类版本问题,第三个选项看起来是正确的方法

我从您发布的链接中看到,可能是要将以下属性添加到Classloading元素中:

parent-first="false"
parent first true/false-类加载器应首先加载 从您的war/ear/jar到父母的所有信息,以防 war/jar在ear中它意味着ear,否则它就是JBossAS

另外,在处理Classloder配置时,有两个工具非常有用,可以启用jboss Classloder并使用

我希望这能有所帮助