【问题标题】:EJB 2.1 and EJB 3.1 components in the same application同一应用程序中的 EJB 2.1 和 EJB 3.1 组件
【发布时间】:2014-06-27 09:18:28
【问题描述】:

因此,我们正在将用 EJB 2.1 编写的项目部分迁移到 EJB 3.1。首先,我们选择了 1 个 ejb 并在其中合并了 3.1 的更改,而没有触及其他现有的 2.1 bean。除了其他 EJB 3.1 更改之外,我们还将现有 ejb-jar.xml 的版本更改为 version="3.1",因为没有更改它,EJB 3.1 bean 没有绑定。

但是,版本改到3.1后,2.1写的EJB bean就无法查到了,异常是:

"javax.naming.NameNotFoundException: 
Name "ejb/ejb/gov/michigan/access/business/services/ABTransactionManagedEJBLocalHome"
not found in context "local:"".

是否可以在一个应用程序中同时拥有 2.1 和 3.1 组件?如果是,我必须进行哪些配置才能支持它?在网上看了很多资料,也尝试了很多东西,但似乎没有任何效果。

【问题讨论】:

    标签: jakarta-ee migration ejb-3.1 backwards-compatibility ejb-2.x


    【解决方案1】:

    第一个问题的答案很明确:是的,您可以在一个应用程序中使用它们。我们自己有一个应用程序,现在已经有好几年的历史了,仍然有一些部分是用 J2EE 编写的,而更新的部分是用 Java EE 编写的,都在一个 EAR 文件中。

    关于你的异常,我不能说它到底是什么,但它看起来像是使用错误的上下文进行查找。可悲的是,这是特定于容器的,因此查找有关如何进行查找的特定于容器的文档可能会有所帮助。对于 JBOss,您会找到一个示例 here。

    【讨论】:

      【解决方案2】:

      “2.1 组件”是指 EJB 公开一个主/组件接口,“3.1 组件”是指 EJB 公开一个业务接口。 (请注意,EJB 模块是版本化的,但 EJB 组件不是。EJB 可以公开 home/component 接口和业务接口,它们可以通过注解或 XML 公开。)

      在 WebSphere Application Server 中,“local:”上下文是 EJB 2.x 模块的内部细节,并且 EJB 容器在 EJB 3.0(及更高版本)模块中不绑定到此上下文。但是,从 v7.0 开始,EJB 容器确实绑定到所有模块版本的“ejblocal:”上下文。请参阅 SystemOut.log 中的 CNTR0167I 消息以确定正确的(非内部)JNDI 查找名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-10
        • 1970-01-01
        • 2012-03-06
        • 2011-05-07
        • 2011-02-21
        相关资源
        最近更新 更多