• 1. EJB基础知识 杨 泳 yangyong@ufsoft.com.cn
  • 2. 提 纲认识J2EE框架 认识EJB容器 认识EJB组件 编写Session Bean
  • 3. 两层计算模型网络编程(Socket) 分布式面向对象编程(RMI CORBA) 大部分逻辑在客户端实现 服务端实现数据存储
  • 4. 3/n层计算模型MVC 模型(Model-View-Controller) 3层模型 客户端仅为视图,不实现业务逻辑(View) 中间层实现所有逻辑和事务控制(Controller) Model 层提供数据存储模型
  • 5. 提出J2EE框架产品越做越庞大,分工越来越精细 需要分布式计算 需要多层模型 需要组件技术 Sun提出Java企业计算解决方案J2EE
  • 6. J2EE – Java 2 Enterprise Edition 可重用的组件模型 J2EE提供面向服务的底层结构来自动支持与管理组件。 为组件提供集成服务,企业极开发者可以专著与组件而不是底层服务。 分离业务逻辑与服务,提高业务逻辑的可重用性J2EE技术
  • 7. RMI JNDI(提供根据名字来定位服务和远程对象的服务) Web Container EJB Container Transaction Manager(JTA) DataSource JMS 。。。J2EE平台构成
  • 8. J2EE结构图 I
  • 9. J2EE结构图 II客户层网络层EIS 层集成 层业务层
  • 10. J2EE中间件应用服务器(Application Server) 为 servlet/jsp/ejb 提供运行环境 提供事务管理器 提供数据源实现 提供其它J2EE必要服务 BEA Weblogic/IBM Websphere/JBoss
  • 11. J2EE编程编写EJB B/S,编写servlet/jsp客户端 C/S,编写Java Application客户端 部署EJB
  • 12. EJB 框架J2EE 的核心部件 基于容器概念的服务模型 Write once,run anywhere! 透明的远程调用 提供EJB运行环境,客户只需关注业务逻辑 提供访问J2EE其它各种服务的接口 基于XML的部署机制 ejb-jar.xml
  • 13. EJB ContainerEJB容器提供以下服务 持续化 事务控制 安全 EJB实例生存周期管理 并发 对象池
  • 14. EJB 分类SessionBean,业务逻辑 EntityBean,数据库映射 MessageDrivenBean,基于JMS的异步调用
  • 15. EJB Bean构成Home接口 Remote接口 Bean实现 部署描述
  • 16. EJB 部署生成Home对象并绑定到JNDI 预先生成几个Bean 实例放置在实例池中
  • 17. EJB 调用通过JNDI获得Home 通过Home获得EJB Object,Bean实例的远程引用 对于EJBObject的调用由Bean实例来完成
  • 18. EJB 组成部分-HomeEJB的Factory接口 由EJB开发者提供 提供创建和定位EJB的相关方法(create) EJB服务器厂商为Home接口提供: 实现该接口的Class Stubs和Skeletons 将该Factory接口与名字服务绑定在一起。
  • 19. EJB 组成部分-EJB ObjectEJB的代理接口 由EJB的开发者(程序员)提供 暴露EJB提供给客户端的有关业务方法 EJB服务器提供 该接口的实现类(EJB Object) Stubs和Skeletons 根据需要实例化
  • 20. EJB 组成部分-EJB Bean实现逻辑 由业务开发者提供 实现在EJB Object中定义的业务方法 并不是远程对象
  • 21. Session BeanStateless Session Bean 在方法调用之间,不保存客户状态 EJB Home 的 create 方法没有参数 生命周期简单 Stateless Session Bean 在方法调用之间,保存客户状态 EJB Home 的 create 方法可以带参数 生命周期复杂
  • 22. 部署描述文件是一个XML文档,标签由DTD规范定义 描叙一个或多个EJB的各种属性 结构信息 应用组装信息 所需要资源的声明 每一个JAR文件都需要一个部署描述文件 META-INF/ejb-jar.xml
  • 23. 编写Session Bean - Home继承自javax.ejb.EJBHome 为EJB中的每个ejbCreate声明create方法 必须与ejbCreate方法匹配 Create方法必须返回Remote接口类型 必须throws CreateException,RemoteException 如果是Stateless Session Bean,则只有一个无参数的create方法。
  • 24. 编写SessionBean - Homeimport javax.ejb.*; import java.rmi.RemoteException; public interface HelloHome extends EJBHome { public Hello create() throws RemoteException, CreateException; }
  • 25. 编写SessionBean-EJB Object必须继承自javax.ejb.EJBObject 声明客户端需要访问的EJB中对应的业务方法 在业务方法中throws的应用Exception在该接口中必须同样throws,每个方法都得抛出 RemoteException
  • 26. 编写SessionBean – EJB Objectimport javax.ejb.*; import java.rmi.RemoteException; public interface Hello extends EJBObject { public String getMessage() throws RemoteException; }
  • 27. 编写Session Bean – Bean 实体1、创建一个Java 类 该类实现javax.ejb.SessionBean接口 定义一个或多个ejbCreate方法 必须为public 作为Bean的构建器 方法签名和 Home 接口定义的create方法相同 定义业务逻辑方法
  • 28. 编写SessionBean – Bean 实体import javax.ejb.*; import java.util.*; public class HelloBean implements SessionBean { public HelloBean(){} public void ejbCreate () {} public void ejbActivate () throws EJBException {} public void ejbPassivate () throws EJBException {} public void ejbRemove () throws EJBException { } public void setSessionContext (SessionContext ctx) throws EJBException {} public String getMessage () throws java.rmi. RemoteException { String str="The current dir is:\n"; try{ str+=System.getProperty("user.dir"); }catch(Exception e){str=str+e;} return str; } }
  • 29. 部署Session Beanejb-jar.xml 结构信息 Bean class Home Interface Remote Interface 运行信息 对其它Bean的引用 对其它资源的引用 事务控制 安全信息 基于厂商部署描述文件 Jndi名称 打成jar包,并使用厂商的发布工具发布
  • 30. 2、打成jar包 将Bean class,Home Interface class、Remote Class与ejb-jar.xml等DD一起打成一个jar包
  • 31. 客户端程序使用厂商工具获得client接口和类 Lookup Home Home.create Ejb 调用
  • 32. 总 结J2EE使开发变得简单,把程序员从繁重的底层事务中解放出来,只需关注业务逻辑 EJB组件的可重用性、扩展性为开发大型系统做好了准备 EJB组件能运行在不同的应用服务器上 EJB是企业级高级技术,要用好它并不是一件简单的事
  • 33. (本页无文本内容)