- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用友NC二次开发参考资料——高级EJB
EJB Container Architecture EJB Container Architecture EJB应用的组成 Client、JNDI、EJB Container、Thread、DataSource、Database 相互关系 Client通过JNDI得到EJB的Home stub Client通过Home stub得到Remote stub Client通过Remote stub进行对EJB的远程调用 Bean生存在EJB Container中 Bean通过DataSource来访问数据库 服务端有线程池来管理和分配线程 Client View of SB’s Lifecycle Client View of SB’s Lifecycle SessionBean生命周期的客户端视图 存在:SessionBean已经存在于EJB Container中 引用:SessionBean被Client所引用 1、访问前,Bean不存在也没被引用 2、调用Home.create之后,容器负责生存Bean实例并返回其远程引用,Bean处于存在且被引用 3、在调用EJBObject.remove或者Home.remove,或者系统发生异常之后之后,Bean实例被容器销毁,此时,Bean处于引用但不存在的状态,任何对其的调用将抛出NoSuchObjectException 4、引用但不存在状态在该引用超出生存范围或者被强行置为null之后跳转到不存在也没被引用状态 5、存在且引用状态下,如果引用超出生存范围,该Bean即处于存在但不被引用状态 6、存在但不被引用状态下,客户端可以通过事先序列化的EJB Handle的getEJBObject方法重新得到该Bean的引用;在容器崩溃或者超时情况下,Bean将回到不存在也不被引用状态 客户端和EJB容器的交互 客户端和EJB容器的交互 0. 在部署期,容器生成 EJB Home对象,并将其绑定到JNDI服务器上 1. 客户端通过名字服务接口 lookup EJB Home 2. Jndi返回EJB Home远程引用 3. 客户端通过使用EJB Home对象的Reference发出create请求 4. 服务器端创建(个EJB对象并将它的reference 返回给客户端 5. 容器返回给客户端EJB 对象的reference 6. 客户端通过EJB对象的远程引用发出方法调用请求 7. 容器从实例池中得到一个实例,请将请求发给该实例 …… …… 8. 容器得到调用的结果 9. 容器把调用结果返回给客户端 容器调用过程图 Lifecycle of stateful session bean Create a StateBean EJBLocal 接口 同一个JVM中对EJB的调用使用EJBLocal接口,节省网络开销 设计EJB系统的时候,使用EJBLocal,将大大提高系统执行效率 Transaction 模型 事务类型 容器管理的事务(CMT) 这是EJB推荐的事务处理类型,通过在EJB部署文件中进行配置,在进入EJB的方法之前,容器会负责新起事务环境,在方法结束后,对事务进行 commit 或 rollback。 程序管理的事务(BMT) 如果要在程序中手动的控制事务起始和结束的边界,可以使用BMT,对于BMT,完全依赖程序员来控制事务的完整性,因为事务的控制是一个极为严谨的事情,对于经验不丰富的程序员来说,很难保证每个事务都能正确的提交和回滚,所以不大建议使用。 事务属性 Start Transactoin Commit Transaction 事务同步 CMT StatefulBean 拥有事务同步功能 java.ejb.SessionSynchronization afterBegin() beforeCompletion() afterCompletion(boolean status) 事务嵌套 JTA规范不要求支持嵌套事务,大多数J2EE应用服务器都不支持完整的嵌套事务 采用事务链支持简单嵌套事务,Last Create First Commit DataSource 将数据库配置保存在 DataSource中, 并绑定到JNDI上,实现分布式的 数据库配置管理 客户端从JNDI上得到数据库配置, 然后在本地实例化一个数据源 数据源一般使用连接池来 优化数据库执行效率 数据源可以与JTA协作完成 自动事务处理(CMT) Thread Pool 初始化线程是耗时的工作 服务器预先初始化一定数目的线程放置在线程池中 调用到来的时候直接从线程池中分配已经生成的线程 调用完成时,回收线程进线程池 构
文档评论(0)