head first EJB (ejb architecture)

今天主要学习了EJB的架构与session bean部分的知识.

ejb工作流程主要是这样子的: 客户首先使用JNDI得到注册的IIOP对象, 在PortableRemoteObject.narrow的得到实际的home接口的stub. 根据home接口再得到实际要使用的远程业务接口. 在请求实际的远程业务接口时, home建立了根据配置文件生成的ejb object, 再将其的stub返回给客户, 这样客户就可以进行实际的操作了. 客户操纵ejb object就好像它是真正提供服务的那个bean一样. 而实际上ejb object要使用session bean来进行具体的操作. 而ejb object是容器自动生成的一个类, 它提供了容器根据配置文件所能提供的服务.

home bean在ejb的架构中主要充当了一个标记的作用, 客户通过home bean来得到ejb object就给了ejb容器一个机会, 从配置文件中生成包装过后的ejb object来提供客户实际的服务. 所以它实际上只是一个从EJBHome接口上继承下来的接口而已, 实际生成的类是由容器来实现的.

ejb object其实是一个ejb容器根据配置文件动态生成的类, 它类似于一个aop的方法拦截器, ejb容器可以通过它在客户调用实际的业务方法时, 提供自己的服务.

session bean从SessionBean上继承下来, 是一个具体的类. 它提供了实际的业务服务, 当然最好是对实际业务POJO的包装. 它在并不直接返回给客户使用时, 而是在ejb object的身后, 通过ejb object的调用提供服务. 由于被ejb容器进行类似aop的包装, 在包装后的类中实现了客户所见的远程接口, 所以在ejb object中可以不去实现对应的远程接口, ejb容器可以通过反射来进行方法调用.


在这个架构中, home真正起到的作用大约只有减少JNDI的服务名的数量了. 因为实际上在一个ioc容器中, 根据配置文件进行包装可以通过对业务bean的aop包装来实现, 而根本不必通过home来给容器提供这个机会. 由于所有的这些都要通过EJBRemoteXXX远程接口, 而对于本地服务, 又是通过EJBLocalXXX接口. 所以对于客户来说, 远程与本地的服务所表现出来的是不一样的. 这使的客户端要明确的知道自己使用的是远程还是本地的接口. 虽然这个可以通过adapter与factory或service locator来进行封装, 但这样已经是一种麻烦了.

to be continue....
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值