最近在看EJB,概述一下基本的概念:
EJB是用来创建分布式、服务器端基于java的企业应用组件的模型,是java服务器端服务框架的规范,其最大的用处是部署分布式应用程序。
在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。
一 .Session Bean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个Session Bean来为客户端服务。Session Bean可以直接访问数据库,但更多时候,它会通过Entity Bean实现数据访问。
Stateful Session Bean:每次产生一个新的会话,能区分不同的会话。
Stateless Session Bean : 服务器端是同一个对象,为单例。
本地(Local):客户端与其调用的EJB对象在同一个JVM进程中,数据直接用传址的方式传输。
远程(Remote):客户端与其调用的EJB对象不在同一个JVM进程中,传值,需要将参数序列化。
Webservice :Webservice 客户端可以访问无状态会话bean的接口
二.Entity Bean是域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个Entity Bean对象相当于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。
三.MessageDriven Bean是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态Session Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。
JMS
是
Java
的消息服务,
JMS
的客户端之间可以通过
JMS
服务进行异步的消息传输。
JMS
支持两种消息模型:
Point-to-Point
(
P2P
)和
Publish/Subscribe
(
Pub/Sub
),即点对点和发布订阅模型。
点对点:在
P2P
模型中,有下列概念:消息队列
(Queue)
、发送者
(Sender)
、接收者
(Receiver)
。每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到它们被消费或超时。
l
每个消息只有一个消费者
(Consumer)
(即一旦被消费,消息就不再在消息队列中)
l
发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列。
l
接收者在成功接收消息之后需向队列应答成功
如果你希望发送的每个消息都应该被成功处理的话,那么你需要
P2P
模型。
发布订阅:
在
Pub/Sub
模型中,有下列概念:
主题(
Topic
)、发布者(
Publisher
)、订阅者(
Subscriber
)。客户端将消息发送到主题。多个发布者将消息发送到
Topic
,系统将这些消息传递给多个订阅者。
l
每个消息可以有多个消费者
l
发布者和订阅者之间有时间上的依赖性。针对某个主题
(Topic)
的订阅者,它必须创建一个订阅之后,才能消费发布者的消息,而且,为了消费消息,订阅者必须保持运行的状态。
当然,为了缓和这种严格的时间相关性,
JMS
允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。
如果你希望发送的消息可以不被做任何处理、或者被一个消费者处理、或者可以被多个消费者处理的话,那么可以采用
Pub/Sub
模型。
消息的消费:在
JMS
中,消息的产生和消费是异步的。对于消费来说,
JMS
的消费者可以通过两种方式来消费消息。
l
同步
�C
订阅者或接收者调用
receive
方法来接收消息,
receive
方法在能够接收到消息之前(或超时之前)将一直阻塞。
l
异步
�C
订阅者或接收者可以注册为一个消息监听器。当消息到达之后,系统自动调用监听器的
onMessage
方法。
对客户端来说,
message-driven bean
就是异步消息的消费者。当消息到达之后,由容器负责调用
MDB
。客户端发送消息到
destination
,
MDB
作为一个
MessageListener
接收消息。