Jakarta ee 从JBOSS 5.1远程访问JBOSS AS7.1上的EJB
我在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,如下所示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
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并使用
我希望这能有所帮助