EJB 2.1 和 EJB 3 bean 共存
EJB2 和 EJB3 bean 可以共存于一个企业应用程序 (.ear) 中,但不能驻留在同一个 ejb jar 文件(模块)中。因此,EJB3 bean 必须驻留在与 EJB2 bean 不同的 jar 中。
从 EJB 2.1 调用 EJB 3
EJB3 bean 没有主接口,而 EJB 2.1 需要它。为了使 EJB3 bean 能够从 EJB2 访问,您需要向 EJB3 bean 添加本地 home 接口(如果需要远程调用,则为远程 home)。
创建主界面:
public interface SystemTimeLocalHome extends EJBLocalHome {
SystemTimeLocal create() throws CreateException;
}
为 EJB3 bean 添加 home 接口:
@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 的主接口。create()
在注入的 EJB 主接口上调用方法来实例化 bean 类。
@EJB BankingServiceHome bsHome;
BankingService bs = bsHome.create();
bs.getBalance(...);