我是EJB3.1的新手。如果这是一个微不足道的问题,请耐心等待。我的要求是拥有一个单独的类,它将共享某些数据 不同的豆子。并让不同的线程访问这个单例类的数据。让我尝试解释使用两个不同的类A和B.
@Singleton
//@Local?? ,@Remote?? or @LocalBean ?
class A {
private List<CommonDTO> commonDTOList = new ArrayList<CommonDTO>();
.
. //other member variables, EJB beans which implement Remote interfaces.
.
init(){
//initialise commonDTOList here.
}
//getter
List<SomeDTO> getCommonDTOList(){
return commonDTOList;
}
}
@Stateless
Class B implements Interface { //Interface is @Remote
//need to access singleton Class A's getter , so that all the threads have the same commonDTOList.
@EJB
private A classA;
.
.//other member variables
.
@OverRide //overriding Interface2's method
public void doSomething(){
.
.//do some database transactions here , which can be done parallely by multiple threads, since this is stateless.
.
//now retrieve Class A'S CommonDTOList.
//This List should be shared across multiple threads of this stateless bean.
List<SomeDTO> someDTOListInsideStatelessBean = classA.getCommonDTOList();
}
}
问题是ClassA
上应该注释的内容,以便我可以在另一个无状态bean中访问它的List。
我试过以下但是徒劳无功。
1)@Local
我无法使用,因为在上面的内联注释中提到过。在classA
中,成员变量具有实现@EJB
接口的@Remote
bean。
2)@LocalBean
看起来就像这个场景中使用的那个。但是,一旦进入方法&#34; doSomething()
&#34;在ClassB
classA
变量中,@Remote
变量具有全部变量
成员变量为null。虽然List在启动期间已初始化。
我的印象是,由于它的单身人士,只有实例共享
跨越所有豆类。
3){{1}}我不确定我是否应该在这里使用,但是也没有运气。
请帮忙。提前谢谢。
答案 0 :(得分:0)
我得到了答案。 A类可以用&#34; Singleton&#34;进行注释。和B类(无状态)可以正常访问它的方法没有任何问题。你不必为A类提供任何视图。默认情况下它将是无界面视图。以下是帮助我理解的链接。