sta*_*ker 8 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和EJB3之间是否存在任何不兼容性?
问题的核心是迁移EJB2.1 - > EJB3是否需要停止世界/完全重写操作,或者可以在添加新功能和修复遗留应用程序错误时执行此操作(因此会有混合EJB2.1和EJB3在运行的应用程序中有一段时间了).
编辑:
ale*_*ung 13
EJB2和EJB3 bean可以在一个企业应用程序(.ear)中共存,但不能驻留在同一个ejb jar文件(模块)上.因此,EJB3 bean必须驻留在与EJB2 bean不同的jar中.
当EJB 2.1需要它时,EJB3 bean没有home接口.为了使EJB3 bean能够从EJB2访问,您需要将本地home接口(或者如果需要远程调用,则为远程home)添加到EJB3 bean.
创建home接口:
public interface SystemTimeLocalHome extends EJBLocalHome {
SystemTimeLocal create() throws CreateException;
}
Run Code Online (Sandbox Code Playgroud)
将home接口添加到EJB3 bean:
@Stateless
@Local(TimeServiceLocal.class)
@LocalHome(TimeServiceLocalHome.class)
public class TimeServiceBean implements TimeServiceLocal {
public long getCurrentTimeMillis() {
return System.currentTimeMillis();
}
}
Run Code Online (Sandbox Code Playgroud)
在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();
Run Code Online (Sandbox Code Playgroud)
依赖注入用于将EJB 2.1组件引用注入EJB3 bean.注入EJB3 bean的不同之处在于它是被注入的EJB2的home接口.create()
在注入的EJB home接口上调用方法来实例化bean类.
@EJB BankingServiceHome bsHome;
BankingService bs = bsHome.create();
bs.getBalance(...);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7020 次 |
最近记录: |