2011-10-02 56 views
0

我很新的EJB 3.1,我试图解决服务器端的问题;也许有人可以提供一些指导。使用EJB 3.1的Singleton bean作为客户到多个远程状态会话Bean

我有一个状态机,代表多个用户的在我的应用程序共享状态。我试图将这个状态机模型化为一个有状态会话Bean;由于这个状态机代表了多个用户,我引入了一个Singleton会话bean,它是StateMachine的实际客户端,所有用户最终都是Singleton bean的“客户端”。我希望在应用程序的整个生命周期中生命周期多个StateMachines时出现问题。

我想我的辛格尔顿豆(“经理”)来处理客户端的请求,并分发到相应的StateMachine - 我怎么会访问状态bean的具体事例?为了增加复杂性,我试图远程访问这些StateMachine bean(如果它是本地的,我只是创建这些事件的实例作为Manager的成员)。

无论如何,我希望这是明确的。我觉得我错过了EJB设计的一些基本点;你们都会告诉我,如果是这样的话。

回答

1

单身已在EJB 3.1被引入提供如在A Sampling of EJB 3.1描述的多个实例之间共享状态的能力。

单身

一个长期存在的遗漏EJB API在一直的能力到企业bean组件 的多个实例之间或在应用程序的多个企业bean组件之间容易 共享状态。相比之下,Java EE Web应用程序编程模型始终通过 通过ServletConfig对象提供此类功能。在 EJB 3.1中,这个遗漏已经通过引入 singleton beans(也称为singletons)而得到解决。

单例是一种新类型的会话bean,保证为 在特定的Java虚拟 机器(JVM)*中实例化一次。一个Singleton使用@Singleton 注释中定义,如显示在下面的代码例如:

@Singleton公共类PropertiesBean {

private Properties props; 
private int accessCount = 0; 

public String getProperty(String name) { ... } 

public int getAccessCount() { ... } 

}因为它是会话bean的另一种调味剂,单罐 定义与无状态和有状态bean相同的本地和远程客户端视图。客户端访问单身人士的方式与访问无状态和有状态Bean的方式相同,即通过EJB 参考。例如,一个客户端可以访问上述PropertiesBean 单如下:

@EJB private PropertiesBean propsBean; 

...

弦乐味精= propsBean.getProperty( “hello.message”);在这里, 容器确保在同一个JVM所有PropertiesBean 引用所有的调用由 PropertiesBean的同一个实例提供服务。默认情况下,容器与其他组件类型一样强制执行相同的线程 保证。具体来说,允许不超过一个 访问任何一个 时间的特定bean实例。对于单身人士来说,这意味着阻止任何并发调用。 但是,这只是默认的并发行为。有 额外的并发选项,允许更高效的并发 访问单例实例。

看看Java EE6 Events关于如何使用事件发送通知。

相关问题