EJB--简介

EJBsunJavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。EJB (Enterprise JavaBean)J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK) J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话BeanSession Bean),实体BeanEntity Bean)和消息驱动BeanMessageDriven Bean)。

 

先来简单介绍下Session Bean MessageDriven Bean

会话 Bean Session bean)在业务逻辑的实现中使用的频率很高,它在 EJB 技术中成了很重要的一部分。 Session bean 有一下几种特征:

• Stateless:  这种 Session bean 在方法调用中不包含会话状态,任何实例都可以被任意的客户端调用。

• Stateful:    这种 Session bean 包含会话状态,一个实例只能被一个客户端持有。

• Singleton: 单例 session bean,只存在一个实例,并被所有客户端共享,并支持同步调用。

消息驱动Bean(Message-driven bean(MDB)) 通过使用 JMS 接收异步消息来与外部其他系统集成。这个组件模型主要通过消息中间件(MOM)用来集成系统,MDB 通常带业务逻辑给会话 Bean

 

现在开发一个EJB非常的简单,一个简单的 java 类和一个标注就能构成一个EJB:

 

@Stateless

publicclass EJBTest {

 

public Book methodOne(Long id) {

}

 

public Book methodTwo(String param) {

}

}

 

 

EJB 是一个服务器端的组件,一个简单的 java 类和一个标注就能构成一个EJB,EJB与普通java 类的区别就是什么呢?那就是EJB必须要运行在 EJB容器中,EJB容器提供EJB所需要的运行环境,EJB容器能够提供如下的一些功能.

远程客户端通讯( Remote client communication) :

不需要编写额外的代码,一个EJB客户例如:另一个EJB、一个用户接口,一个进程等等)端就可以通过标准的协议来远程调用方法。

依赖注入( Dependency injection):

容器可以注入各种资源到 EJB 中(例如:JMS destinations andfactories, datasources, 其他 EJB, 环境变量等等)

状态管理( State management) :

对于有状态会话 Bean,容器管理着它们的状态。你可以为你的客户端保持状态.

池( Pooling) :

对于无状态会话 Bean 和消息驱动 Bean,容器池化一些实例,这些实例被多个客户端共享。每次调用完毕,实例被放回到池中,而不是被销毁。

组件生命周期( Component life cycle) :

容器可靠地管理着组件的生命周期

消息( Messaging) :

容器允许 MDB 侦听消息源并消费消息,并不使用太多的 JMS 探测

事务管理( Transaction management) :

通过声明式事务管理, EJB 可以使用标注来告诉容器它所需要的事务级别,容器管理着事务的提交与回滚。

安全( Security) :

EJB 可以指定类或者方法级别的访问控制,要求强制验证用户或者角色

并发同步( Concurrency support) :

除了单例,一些并发申明是需要的,其他所有类型的 EJB是默认线程安全的。你可以开发性能好的应用而不必担心线程问题。

拦截器( Interceptors) :

切入点( Cross-cutting concerns)可以放到拦截器中,容器会自动调用它。

异步方法调用( Asynchronous method invocation) :

在 EJB 中,可以不使用消息而实现异步调用

 

有关会话Bean

   会话Bean存在三种子类型:Stateless,Stateful Singleton,用于创建不同类型的会话。

Stateless

无状态会话Bean适用于只需单个请求会话即可完成的业务过程( 事务处理必须在一个方法中结束 )。这样,EJB组件不需要维护方法调用间的状态变更信息。为了实现有效的Bean实例处理,EJB容器经常会使用实例池技术。由于无状态会话Bean不含会话状态,因此同一无状态会话Bean类的所有实例对于客户而言都是等效的。而且无状态会话Bean不保留历史会话信息,所以它对于调用其本身的客户也并不关注。因此,任何无状态会话Bean都能够服务任何客户请求。因为这些无状态会话Bean都是一样的。

Stateful

有状态会话Bean适用于需要若干请求形成才可完成的业务过程。这样,EJB组件就需要维护方法调用间的状态变更信息. 在有状态会话Bean中各个Bean实例中存储的状态信息仅是单个客户的。如果和无状态会话Bean的处理一样,只是简单的将实例全部放置实例池中,当大量的并发客户操作时,内存中运行的有状态会话Bean实例就会过多而失去控制。

Singleton

Singleton 是 ejb 中会话 bean 的一种,容器会确保它在每个应用中只会实例化一次。它实现了单例模式。Singleton 在所有客户端之间共享状态。Singleton是不能感知群集的。集群是一组容器紧密地合作(共享相同的资源,EJB 等等)。因此,在某些情况下,需要在好几台机器上部署分布式容器集群,每个容器将有它自己的 Singleton 实例。

 

有状态的Bean带来了支持会话状态的好处但同时付出了性能的代价。无状态bean具有更好的性能,但却又不具备与客户端的亲合力。struts2中将Action和ActionForm合二为一,就有了状态,因为每次请求都创建一个新的实例,所以没有线程安全问题,而struts1就不能这么做了,struts1的Action采用的是单例模式,仅有Action的一个实例来处理所有的请求,所以使用struts1的时候要特别小心,要保证Action的资源是线程安全最好采用无状态。

 

有关消息驱动Bean

        消息驱动bean是一种通过消息方式为外界提供服务的组件。MDB和它的使用者之间是一种松散耦合的关系.由于MDB组件在使用的过程中,其客户并不拥有MDB组件的远程引用,而是直接将消息发送到特定的队列中,因而用户的调用并不强求MDB组件的运行,在mdb组件没有运行的情况下,客户发送的请求数据会临时保存到消息队列中,当MDB组件加载后,消息队列中的调用消息才能得到处理。javaee规范并没有规定MDB将处理结果返回给消息调用者的方式,但是通常情况下MDB组件是将处理的结果以消息方式发送到特定结果队列中,如果客户程序没有运行,结果会临时存放在消息队列中,直到客户程序启动,结果队列中的消息才能得到处理。

   MDB可以和两种消息队列关联,如果和Topic型的队列关联,则客户发送到队列中的消息,会依次广播给所有的MDB组件,所有的MDB组件会得到相同的消息。

   MDB组件和具体的业务逻辑无关,从特定的消息队列中获得消息,消息内容要在MDB的onMessage方法中处理,具体的而业务逻辑通常委托给其他的ejb组件。

 

有关实体Bean

   实体Bean的主要作用就是维护数据的持久性

小结:

        实体Bean的主要作用就像开始时说的一样是维护数据的持久性;会话Bean可以提供实现业务逻辑的方法;消息驱动Bean是基于JAVA消息技术的EJB对象,可以与JMS程序相配合,实现对消息列队的操作。

 

 

 

 

 

 

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码海拾贝2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值