★ 为什么要使用ejb,以及在什么时候使用ejb?
● 最重要的理由:分布式!分布式对象的协作,完成特定的业务功能,分布式对象之间应实现分布式透明性(或位置透明性),即在客户端无需指定分布式对象的位置(通过配置来解决)。
● 分布式对象之间的事务支持(RMI不支持事务)。
● 应用程序需要支持不同的客户端,只需要少量代码,就可以让远程客户端访问到企业bean。
● 如果应用程序需要进行分布式部署,如果分布式对象需要业务支持事务,如果关键业务逻辑需要能够支持多种不同的客户端,那么ejb将是很好的选择。
★ ejb的基本分类
● Enterprise Bean(企业Bean)
◆ Session Bean(会话Bean)
◇ Stateless Session Bean(无状态会话Bean)
◇ Stateful Session Bean(有状态会话Bean)
◆ Message Driven Bean(MDB 消息驱动Bean,基于JMS)
● Persistent(持久化)
◆ Entity Bean(实体Bean)
★ Session Bean(会话Bean)
● 会话Bean可以执行业务逻辑操作,比如用户注册,订单登记,数据库操作等。
● 什么叫会话Bean?
◆ 即从客户端开始获得EJB对象开始,然后调用EJB方法(可以多次),直到客户端生命周期结束,或客户端释放EJB对象为止,称为一次会话。
◆ 随着会话的终止,EJB对象也有可能被EJB容器销毁。
★ 定义客户端的访问接口
● 客户端仅通过业务逻辑Bean所定义的接口来访问业务逻辑(与具体实现无关)
● 当开发企业Bean之前,首先要做的第一个决定是:EJB支持什么样的客户端。因为不同的客户端访问方式不同:
◆ 远程客户端——客户端与其调用的EJB对象不在同一个JVM进程中
◆ 本地客户端——客户端与其调用的EJB对象在同一个JVM进程中
◆ WebService客户端——只能访问无状态会话Bean
注:关于JVM进程数的问题:假设在一台机器上安装了一个JVM,一个JBOSS应用服务器。启动JBOSS应用服务器,当然要用到JVM;另外编写一个main方法的java类,并编译执行,也要用到JVM,这里就相当于有2个JVM进程了
★ 方法的参数和访问方式
● 不同的访问方式(Remote、Local、Webservice)会影响到Bean方法的参数和返回值。
● 独立性: 如果是远程调用,客户端操纵的Bean的参数,其实是一份参数值的拷贝,因此对参数的修改,不会影响到Bean;但是对于本地调用来说,客户端操纵Bean的参数,就是一个引用,它对参数值的修改,将会影响到Bean。因此,不管在那和情况下,请避免修改参数的值!
● 粗粒度和数据访问: 因为远程调用的速度比较慢,所以在设计的时候,请尽量使用粗粒度的接口设计,即尽量减少方法的调用,并尽可能地在一次方法调用中传输完毕所需要的数据!