`
xiaoer_1982
  • 浏览: 1821095 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

EJB,J2EE的核心,如何看待?

阅读更多

  EJB容器提供下列服务:远程访问(stub/skeleton),安全性, 事务, 并发性, 生命周期管理等.祝贺Kingdee Apusic产品通过J2EE 1.4认证! 佩服!

  session facade模式:  会话bean(remote接口) + 实体bean(local接口).其实,对CMP而言,EJB2.1标准其资源浪费也不是太大,对于频繁的ejbLoad和ejbStore可以考虑使用值对象,它避免了对每个字段set/get方法的调用. 当然也可以使用轻量级的架构,如hibernate.

  JBuilder还是商业java开发首选,集成的EJB开发也十分强大. Eclipse+ lomboz同样方便, jboss IDE也不错.

EJB的组成:
1) 企业级bean类
public interface javax.ejb.EnterpriseBean extends java.io.serializable {}
根据bean类注释,可以使用Xdoclet + ant自动生成代码,如Home,EjbObject, xml等文件
/**
* @ejb.bean name="Users"
* jndi-name="UsersBean"
* type="CMP"
* primkey-field="id"
* schema="UsersSchema"
* cmp-version="2.x"
* view-type="remote"
*
* @ejb.persistence
* table-name="Users"
*
* @ejb.finder
* query="SELECT OBJECT(a) FROM UsersSchema as a"
* signature="java.util.Collection findAll()"
*
**/
public abstract class UsersBean implements EntityBean {}
2) 远程对象接口EjbObject或本地对象接口EjbLocalObject
3)远程Home接口或本地Home接口
Home接口定义了生成,查找和回收EjbObject的方法.
对本地接口: MyLocalHome lh=(MyLocalHome )ctx.lookup("java:comp/env/ejb/MyEJB");
MyLocalObject obj=lh.create();
对远程接口:MyHome mh=(MyHome )javax.rmi.PortableRemoteObject.narrow(
ctx.lookup("java:comp/env/ejb/MyEJB"), MyHome.class);
MyObject obj=mh.createUsers();

Home接口中create方法返回远程或本地对象接口,可以有多个create方法,但方法名必须是create开头;
对应的bean实现中方法名变为ejbCreate, 其返回类型对状态会话bean来说是void, 对实体bean来说是主键类型.

EJB的分类:
1. 无状态bean
    消息驱动bean和无状态会话bean, 不需要保存客户状态.通常用来建立业务过程模型.这些bean是轻量级的,具有高度的可伸缩性. 可以在容器中初始化一定数量共享bean,供多个客户使用.
    消息驱动bean只是一个消息消费者, 没有定义Home接口和EjbObject接口.消息的生产者可以是JMS方式或其他.
2. 状态bean
 1)有状态会话bean : 一个会话只能被一个客户使用;容器在主存中维护事务间的对象状态,钝化时写入辅村; 容器故障后,不可还原
 2)实体bean: 一个实体对象可以被多个客户共享;用数据库或其他资源管理器维护; 可还原.
通常一个业务实体实现为实体bean.

例:对一个购物车程序,若购物过程要跨越很长的时间和多个web会话, 则将购物车实现为实体bean;
若购物过程只限于一个单独的web会话,则实现为一个状态会话bean.可以将会话状态的维护委托给HttpSession对象.
myobject obj=myhome.create(id);
session.setAttribute("myobjBean", obj);

EJB 的激活与钝化:
1. 无状态会话bean,由实例池调度
2. 有状态会话bean, 主要是ejbPassive和ejbActive
3. 实体bean,ejbStore->ejbPassive----ejbActive->ejbLoad

Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例。

Entity Beans能存活相对较长的时间,并且状态是持续的。只要数据库中的数据存在,Entity beans就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了,Entity beans也是存活的。Entity Beans生命周期能够被容器或者 Beans自己管理。


EJB通过以下技术管理实务:对象管理组织(OMG)的对象实务服务(OTS),Sun Microsystems的Transaction Service(JTS)、Java Transaction API(JTA),开发组(X/Open)的XA接口。

数据连接池的工作机制:

J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics