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

Jakarta ee 不同JavaEE实现(特别是Glassfish和JBoss)之间的交叉开发方面,jakarta-ee,jboss,glassfish,ejb,Jakarta Ee,Jboss,Glassfish,Ejb,我正在为部署在JBoss4 AS实例上的现有企业应用程序开发一个插件Web应用程序。为了方便起见,我正在使用Netbeans中提供的Glassfish应用服务器。对于prototype,我将使用的每个库打包到我想要部署的war文件中,还包括Hibernate和一些真正基本的库。但在将来,我还希望使用服务器提供的库和功能,如JNDI数据库连接查找、会话和实体bean等 我的问题是: 在Jboss上为glassfish打包的war文件中部署一个简单的web应用程序有哪些方面是一个很难解决的问题 在这

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

我的问题是:

  • 在Jboss上为glassfish打包的war文件中部署一个简单的web应用程序有哪些方面是一个很难解决的问题
  • 在这两种实现中,EJB接口的访问方式是否相似?也就是说,当我在Glassfish服务器上开发用于访问会话bean的代码时,我是否能够访问Jboss上的会话bean
  • 两种实现上执行的JNDI查询相似吗
  • 其他方面

  • 我不得不说,我只在开发简单的servlet方面有经验。我知道一些关于JavaEE和EJB的理论知识,我想更深入地了解这一点。我对具体实现的细节一无所知,所以这就是这个问题的重点。

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

    也就是说,JBoss4已经相当老了。它符合J2EE1.4,并实现EJB2.1规范。新的JBoss和GlassFish服务器兼容JavaEE6,并实现EJB3.1规范。EJB3使用起来容易得多,但是您不能将3.x EJB部署到2.x容器中(也可以采用其他方法)。因此,您必须小心地坚持EJB2容器中可能的内容。例如,如果您想在本地使用EJB(即,从部署在同一服务器上的另一个EJB),则必须在EJB2下定义并实现本地接口。在EJB3下,用
    @LocalBean
    注释EJB类就足够了。不要让我从EJB2所需的所有外部描述符开始

    一般的经验法则是在开发和生产中使用相同版本的。例如,在应用服务器Y版本Z中可能有一个具有特定功能的bug,但在应用服务器a版本B中没有出现。因此,应用程序将在a中工作,但当您将其部署到Y时,它将崩溃,并且您将很难调试它。如果您使用与相同的(版本相同)进行开发,则在开发过程中发现错误的可能性更大

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


    因此,如果您必须使用JBoss4作为目标,请在JBoss4下进行所有开发。这将为你以后省去很多麻烦。如果你可以使用最新的JBoss 7作为目标,你可以在最新的GlassFish 3.x下开发你的应用程序,它很可能会工作,但我看不出这样做的理由。

    应用程序最终会在JBoss或GF上运行吗?如果是JBoss,那么在GF上开发并在JBoss上部署并不是简单的。在后一种情况下,只需将所有内容移动到GF,然后忘记这个问题:)它肯定会在JBoss上运行。更重要的是,它是一个第三方企业应用程序产品,它将一个特定的JBoss版本、一些我也需要的特定库以及应用程序本身捆绑在一个单独的设置中。我希望我的web应用程序与该产品完全兼容。但是,由于我也无法在我的开发环境中的每个配置细节中使用这个特定的JBoss,我问自己,在开发过程中使用哪个应用服务器实现是否重要,以及为什么重要。非常感谢您的回答,特别是您描述的版本依赖性对我来说非常有用。我同意你的看法,当然最好在部署到的同一平台上开发。我只是想知道我是否可以节省一些时间,让原型快速启动并运行,而不用花太多时间在我的devbox上安装一个旧的jboss4testserver