EJB 2.x 应用程序到EJB 3.0的移植(上)
来源:互联网 发布:淘宝网上怎么备案啊 编辑:程序博客网 时间:2024/06/06 18:23
原作者: Shashank Tiwari
来源:Javaworld
译者:TKD-恋冰
原文: http://www.javaworld.com/javaworld/jw-08-2006/jw-0814-ejb.html
企业JavaBeans简化了企业bean架构,同时提供了一些更强大的特性。新规范补充支持了Java 5介绍的元数据注释工具以及Hibernate和TopLink这些工具的持久化和对象关系映射的最佳实践,和在一些轻量级Java框架如Spring中十分流行的依赖注入(Dependency Injection)模式。
本文讨论了把用EJB 2.1或更早版本的规范写的应用程序移植到基于EJB 3.0架构的一些可行的移植策略。我们会从设计和执行两方面来评价这些移植方案。本文并不打算详尽地描述每一种移植策略。阅读完这篇文章后,你应该能够根据自己的实际情况,选择一种最适合自己的方法把旧的EJB编码移植到新的规范。
本文假定你已经熟悉了企业bean,Java 5,和对象关系映射的特性及概念。
EJB 2.1到EJB 3.0:有哪些变化?
为了能给本文讨论的这些可行的移植方式提供一个上下文联系,我会从讨论新规范中每种不同的bean类型与以前不同的变化开始,然后再简单地贯穿相关的多种bean类型。
会话(Session) bean
列表1,描述了EJB 2.1规范定义有状态session bean的一个例子。
表 1.基于EJB 2.1的银行服务的有状态session bean
public void deposit(int accountId, float amount) throws RemoteException;
public void withdraw(int accountId, float amount)throws RemoteException;
public float getBalance(int accountId) throws RemoteException;
public void doServiceLogout() throws RemoteException;
}
public interface BankingServiceHome extends EJBHome ...{
public BankingService create() throws CreateException, RemoteException;
}
public class BankingServiceEJB implements SessionBean ...{
public void deposit(int accountId, float amount) throws RemoteException ...{
//Business logic to deposit the specified amount and update the balance
}
public void withdraw(int accountId, float amount)throws RemoteException ...{
//Business logic to withdraw the desired amount and update the balance
}
public float getBalance(int accountId) throws RemoteException ...{
//Business logic to get the current balance
}
public void doServiceLogout() throws RemoteException ...{
//Service completion and logout logic
}
public void ejbCreate()...{}
public void ejbActivate()...{}
public void ejbPassivate()...{}
public void ejbRemove()...{}
public void setSessionContext(SessionContext context)...{}
}
在EJB 3.0规范中,一个session bean只需要定义一个业务接口和一个bean行为类。Home接口已经被移除了。业务接口就是常规的Java接口,有时也叫作POJI,或者纯Java接口(plain-old Java interface)。业务接口不需要扩展EJBObject或EJBLocalObject接口;如果需要,它可以通过描绘业务领域模型的接口层次来定义。
public interface BankingService ...{
public void deposit(int accountId, float amount);
public void withdraw(int accountId, float amount);
public float getBalance(int accountId);
publlic void doServiceLogout();
}
@Stateful
public class BankingServiceBean implements BankingService ...{
public void deposit(int accountId, float amount) ...{
//Business logic to deposit the specified amount and update the balance
}
public void withdraw(int accountId, float amount) ...{
//Business logic to withdraw the desired amount and update the balance
}
public float getBalance(int accountId) ...{
//Business logic to get the current balance
}
@Remove
public void doServiceLogout () ...{
//Service completion and logout logic
}
}
EJB 2.1和一些更早版本的规范里,对于每一个会话 bean来讲,两个接口——home和local(或者说是remote,business)接口——和bean行为类是必须的。Home接口要求必须扩展EJBHome或者EJBLocalHome接口,而且要声明生命周期方法,比如create()。Local,或者说是remote, business接口要求必须扩展EJBObject或EJBLocalObject接口,而且要声名业务方法。Bean行为类本身是EnterpriseBean类型,作为session bean的情况下,扩展了SessionBean子接口。Bean类必须提供其中回调方法的实现,这样容器可以在适当的生命周期事件发生时触发它们。此外,bean中一些受争议的元素, 包括事务和安全定义,还有它们是有状态还是无状态的,都定义在联合部署描述符中。
消息驱动bean
- EJB 2.x 应用程序到EJB 3.0的移植(上)
- MyEclipse+Jboss下的EJB开发(EJB 2.x)
- 将JBoss EJB应用程序迁移到WebLogic上
- 前进:从EJB 2.1到EJB 3.0
- EJB 3.0 应用程序绑定概述
- 将EJB 3应用程序迁移到GlassFish
- 【EJB基础】开发一个简单的EJB应用程序
- EJB的体系结构(上)
- 详解EJB 3.0是如何简化应用程序的开发
- EJB组件到其他EJB组件的调用操作
- EJB
- ejb
- EJB
- EJB
- EJB
- EJB
- EJB
- EJB
- 面试题2:10个靶打中90环的情况有多少种?
- 使用const提高函数的健壮性
- 913项目开始
- c# 的插件开发
- Start!
- EJB 2.x 应用程序到EJB 3.0的移植(上)
- linux learn
- 回答别人的问题如下Z:
- log4cxx 0.9.7介绍
- 在WinXp下编译wxRuby2成功
- 男孩、女孩和六个苹果的故事[慢慢看哟!]
- 工作中烦恼啊!
- 迭代器配接器(适配器)
- 推荐大家......必看的几部超级鬼片