不同Java EE实现之间的交叉开发方面(特别是Glassfish和JBoss)

时间:2013-02-09 11:33:13

标签: java-ee jboss glassfish ejb

我正在为部署在JBoss 4 AS实例上的现有企业应用程序开发AddOn Web应用程序。为了方便起见,我使用的是Netbeans中提供的Glassfish Application Server。对于原型,我将我使用的每个库打包到我要部署的war文件中,也包括Hibernate和一些非常基本的库。但是在将来我还想使用服务器提供的库和功能,如JNDI数据库连接查找,会话和实体bean等。

我的问题:

  1. 是否有任何方面在war文件中部署一个简单的Web应用程序,该文件是在Jboss上为glassfish打包的,这可能是一个难以解决的问题?
  2. 在两种实现上是否以类似的方式访问EJB接口?意思是,当我在Glassfish服务器上开发代码时,我能够在Jboss上访问会话bean吗?
  3. JNDI查询在两种实现上的执行情况类似吗?
  4. 其他方面?
  5. 我不得不说,我只是在开发简单的servlet方面经验丰富。我知道一些关于Java EE和EJB的理论知识,我想更深入地了解这一点。我对实现具体细节一无所知,所以这就是这个问题的重点。

1 个答案:

答案 0 :(得分:2)

如果您的应用程序相对简单并且您坚持使用核心Java EE标准,理论上您应该看不到任何重大问题。您可能在访问EJB时遇到一些问题,因为JNDI命名存在差异。

话虽如此,JBoss 4相当陈旧。它符合J2EE 1.4,并实现EJB 2.1规范。新的JBoss和GlassFish服务器符合Java EE 6并实现EJB 3.1规范。 EJB3更容易使用,但您无法将3.x EJB部署到2.x容器(另一种方法是可行的)。因此,您必须小心坚持EJB2容器中的可能性。例如,如果要在本地使用EJB(即从同一服务器上部署的另一个EJB),则在EJB2下,您必须定义并实现本地接口。在EJB3下,使用@LocalBean注释EJB类就足够了。并且不要让我开始使用EJB2所需的所有外部描述符。

一般的经验法则是在开发和生产中使用相同AS的相同VERSION。例如,应用程序服务器Y版本Z中可能存在某个功能的错误,该错误不会出现在应用程序服务器A版本B中。因此,您的应用程序将在A中运行,但是当您将其部署到Y时,它将崩溃,你将很难调试它。如果你使用相同的(同一版本的)AS,那么你在开发过程中发现bug的可能性就更大。

我曾经不得不将一个相当复杂的应用程序从GlassFish v2转移到GlassFish v3,而且这个过程并不简单。

因此,如果您必须使用JBoss 4作为目标,请在JBoss 4下进行所有开发。以后会为您节省很多麻烦。如果您可以使用最新的JBoss 7作为目标,您可以使用最新的GlassFish 3.x开发您的应用程序,它很可能会起作用,但我认为没有充分理由这样做。