Jakarta ee 来自不同JRE和服务器版本的远程EJB调用

Jakarta ee 来自不同JRE和服务器版本的远程EJB调用,jakarta-ee,jboss,ejb,compatibility,wildfly,Jakarta Ee,Jboss,Ejb,Compatibility,Wildfly,在我的工作中,我遇到了这样一种情况:正确的理论架构解决方案是从运行在JRE 1.8上的Wildfly 8.1(Java EE 7)实例调用部署在JRE 1.6上的JBoss 4.3(Java EE 5)上的EJB 这可能吗?我会遇到什么问题 问题是关于 应用服务器 运行时 规范和标准 我知道使用Web服务有解决办法。如果可能,请附加一些到兼容性表或其他资源的链接。您提到了JRE版本,但没有提到用于编译服务和客户端代码的JDK版本 通常,较高的JRE版本可以使用较低或类似的JDK版本运行任何已

在我的工作中,我遇到了这样一种情况:正确的理论架构解决方案是从运行在JRE 1.8上的Wildfly 8.1(Java EE 7)实例调用部署在JRE 1.6上的JBoss 4.3(Java EE 5)上的EJB

这可能吗?我会遇到什么问题

问题是关于

  • 应用服务器
  • 运行时
  • 规范和标准

我知道使用Web服务有解决办法。如果可能,请附加一些到兼容性表或其他资源的链接。

您提到了JRE版本,但没有提到用于编译服务和客户端代码的JDK版本

通常,较高的JRE版本可以使用较低或类似的JDK版本运行任何已编译代码。使用客户机存根进行代码交互通信的相同规则。较高的版本可以调用较低的版本,而相反的版本是不可能的。因此,如果生成的客户端存根使用的是JDK1.7或1.8,那么它就赢了;无法使用JRE1.6调用,您将得到以下错误:java.lang.UnsupportedClassVersionError:Bad version


因此,只要您最多用JDK1.6编译代码,就没有问题。不幸的是,在应用程序服务器之间调用ejb的能力规定得非常糟糕(读,一点也不)

问题是,为了调用远程EJB,您需要一个客户端库。此客户端库包含许多类,这些类通常是应用程序服务器的一部分。当客户机是一个JavaSE应用程序时,这一点非常有效,但当客户机是另一个JavaEE应用程序服务器时,会导致重大问题(因为许多类会发生冲突)

唯一的例外是当两个应用服务器的品牌和版本完全相同时,因为那时根本不需要客户端库

所以,一般来说,您试图做的事情已经不起作用了,但由于您使用的是JBoss,它绝对不起作用。JBoss在能够从其他版本的JBoss调用EJB方面是出了名的糟糕。关于这一点,已经写了很多文章,也做了很多尝试来解决它,但据我所知,它从未真正起作用


从理论上讲,这在很久以前EJB规范中就已经被修复了,但是EJB或多或少已经退役了(它的特性使用其他规范重新实现),所以可以理解,在这里几乎没有动力修复任何东西

声称Wildfly可以在JBoss 5中调用EJB,所以希望这也适用于JBoss 4。祝你好运

我们试图从Weblogic(Java 1.6)上的客户端调用JBOSS EAP 7(Java 1.8)上的服务器。不幸的是,它不适用于EAP 7,但显然EAP 6.4可以做到这一点(但因为这已经脱离了主流支持,所以不是一个好的选择)。根据Arjan的回答,挑战在于客户端类。