EJB2和EJB3可以在一个应用程序中共存吗?

时间:2011-05-18 21:36:27

标签: java-ee ejb-3.0 ejb-2.x

有人知道是否可以在Java EE应用程序中用EJB3 bean迭代替换EJB2.1 bean?

即:一次从代码中删除一个2.1 bean并添加相应的EJB3 bean,它实现相同的行为而不触及其余的代码(+能够通过新EJB3中的注释注入遗留EJB)。

我不是EJB规范的专家(我只有EJB3的经验),但对我来说,EJB是一个简单的组件,具有由appserver管理的给定业务接口。 AFAIK EJB3带来了很大的简化,如何编写组件(没有人工界面),大多数时候由于注释可以省略xml描述符,但基础是相同的。所以看起来似乎有道理,它可以发挥作用。

EJB2.1& amp;之间是否存在任何不兼容性EJB3?

问题的核心是迁移EJB2.1 - > EJB3需要停止世界/完全重写操作,或者可以在添加新功能和修复遗留应用程序的错误时执行此操作(因此在运行的应用程序中会有一段时间混合使用EJB2.1和EJB3)

编辑:

  • 我只对会话bean感兴趣。
  • 我很好奇查找是否有效(以及如何)。 AFAIK EJB2.1需要一个称为home接口的东西来获取对不同EJB的引用,但是EJB3没有home接口......

3 个答案:

答案 0 :(得分:13)

EJB 2.1和EJB 3 bean的共存

EJB2和EJB3 bean可以在一个企业应用程序(.ear)中共存,但不能驻留在同一个ejb jar文件(模块)上。因此,EJB3 bean必须驻留在与EJB2 bean不同的jar中。

从EJB 2.1

调用EJB 3

EJB3 bean没有home接口,而EJB 2.1需要它。为了使EJB3 bean能够从EJB2访问,您需要将本地home接口(或者如果需要远程调用,则为远程home)添加到EJB3 bean。

创建家庭界面:

public interface SystemTimeLocalHome extends EJBLocalHome {  
  SystemTimeLocal create() throws CreateException;  
}  

将home接口添加到EJB3 bean:

@Stateless  
@Local(TimeServiceLocal.class)  
@LocalHome(TimeServiceLocalHome.class)  
public class TimeServiceBean implements TimeServiceLocal {  
   public long getCurrentTimeMillis() {  
      return System.currentTimeMillis();  
   }  
}  

在EJB2 bean中,调用EJB3 bean的代码遵循EJB2规范:查找引用,调用home接口创建本地接口,然后在本地接口上调用方法。

Context ctx = new InitialContext();  
TimeServiceLocalHome home = (TimeServiceLocalHome)ctx.lookup("java:comp/env/" + ejbRefName);  
TimeServiceLocal timeService = home.create();  
timeService.getCurrentTimeMillis();  

从EJB 3

调用EJB 2.1

使用依赖注入将EJB 2.1组件引用注入EJB3 bean。注入EJB3 bean的不同之处在于它是被注入的EJB2的home接口。在注入的EJB home接口上调用create()方法来实例化bean类。

@EJB BankingServiceHome bsHome;

BankingService bs = bsHome.create();
bs.getBalance(...);

答案 1 :(得分:3)

迁移是可能的,尽管它并非没有打嗝。

首先将描述符升级到Java EE 5模式。这通常是服务器用来确定是否需要扫描注释的标志。

一旦升级了描述符(但没有改变),您就可以开始将Session和Message Driven Beans迁移到Java EE 5 bean中。在转换bean时,如果需要,也可以从部署描述符中删除它。

完成所有其他bean之后,您可以开始删除实体bean并将持久性转换为JPA实体类。这是练习中非常重要的部分。

答案 2 :(得分:0)

当然可以。在这里看看开头:http://www.coderanch.com/t/321218/EJB-JEE/java/EJB-call-EJB

相关问题