来自不同JRE和Server版本的远程EJB调用

时间:2014-11-10 10:48:28

标签: java-ee jboss ejb compatibility wildfly

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

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

问题是关于

的兼容性
  • 应用程序服务器
  • 运行时
  • 规格和标准

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

3 个答案:

答案 0 :(得分:3)

不幸的是,在应用程序服务器之间调用EJB的能力非常严格(读取,根本没有)。

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

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

所以一般来说你要做的事情已经不起作用了,但是因为你使用JBoss它绝对不起作用。 JBoss因能够从其他版本的JBoss调用EJB而臭名昭着。关于这一点已经写了很多,并且已经做了很多尝试来解决它,但据我所知它从未真正起作用。

理论上,这可能已经在很久以前的EJB规范中得到修复,但是EJB或多或少已经退役(其功能使用其他规范重新实现),所以很难理解在这里修复任何东西的动力很小。

答案 1 :(得分:0)

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

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

因此,只要您在最多JDK1.6中编译代码就没有问题

答案 2 :(得分:0)

This Stackoverflow answer声称Wildfly可以在JBoss 5中调用EJB,所以希望这对JBoss 4也有用。祝你好运!