一、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别
EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现的。
SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。
对于客户机,SessionBean是一种非持久性对象,它实现某些服务器上运行的业务逻辑。
对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。
Session Bean还可以细分为Stateful Session Bean与Stateless Session Bean,这两种的Session Bean都可以将系统逻辑放在method之中执行,不同的是stateful Session Bean可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的stateful session bean的实体。stateless session bean虽然也是逻辑组件,但是他去不负责记录使用者的状态,也就是说当使用者呼叫stateless session bean的时候,EJB Container并不会寻找特定的stateless session bean的实体来执行这个method。换言之,很可能数个使用者在执行某个stateless session bean的methods时,会是同一个Bean的Instance在执行。从内存方面来看,stateful session bean与stateless session bean比较,stateful session bean会消耗J2EE server较多的内存,然而stateful session bean的优势在于它可以维持使用者得状态。
二、EJB与JAVABEAN的区别:
Java Bean 是可复用的组件,对java bean并没有严格的规范,理论上讲,任何一个java类都可以是一个bean。但通常情况下,由于java bean是被容器所创建的,所以java bean应具有一个无参的构造器,另外,通常java bean还要实现Serializable接口用于实现bean的持久性。java bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。EJB相当于DCOM,即分布式组件。它是基于java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被部署在诸如websphere、weblogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件有容器所创建和管理。客户通过容器来访问真正的EJB组件。
三、EJB包括(SessionBean,EntityBean)说出他们的生命周期,以及如何管理事务的?
SessionBean:stateless sesion bean的生命周期是由容器决定的,当客户机发出请求要建立一个bean的实例时,EJB容器不一定要创建一个新的bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。当客户机第一调用一个stateful session bean时,容器必须立即在服务器中创建一个新的bean实例,并关联到客户机上,以后此客户机调用stateful session bean 的方法时容器会把调用分派到此客户机相关联的bean实例。
EntityBean:EntityBean能存活 相对较长的时间,并且状态是持续的。只要数据库中的数据存在,EntityBeans就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了,entity bean也是存活的。entity bean生命周期能够被容器或者Beans自己管理。
EJB通过以下技术管理事务:对象管理组织(OMG)的对象事务服务(OTS),Sun Microsystems的Transacton Service(JTS)Java Transaction API(JTA),开发组(X/Open)的XA接口。
四、EJB容器提供的服务:
主要提供声明周期管理、代码产生、持续性管理、安全、事务管理、锁和并发性管理等服务。
五、EJB的激活机制
以Stateful Session Bean为例:其Cache大小决定了内存中可以同时存在的Bean实例的数量,根据MRU或NRU算法,实例在激活和去激活状态之间迁移,激活机制是当客户端调用某个EJB实例业务方法时,如果对应EJB Object发现自己没有绑定对应的Bean实例则从去激活Bean存储中(通过序列化机制存储实例)回复(激活)此实例。状态变迁前会调用对应的ejbActive和ejbPassivate方法。
六、EJB的几种类型
会话(Session)Bean,实体(Entity)Bean、消息驱动的(Message Drived)Bean
会话Bean又可分为有状态(stateful)和无状态(stateless)两种
实体Bean可分为Bean管理的持续性(BMP)和容器管理的持续性(CMP)两种。
七、客户端调用EJB对象的几个基本步骤:
设置JNDI服务工厂以及JNDI服务地址系统属性,查找Home接口,从Home接口调用Create方法创建Remote接口,通过Remote接口调用其他业务方法。