@Stateless bean访问EJB3中@ Singleton的bean的数据

时间:2014-11-24 11:02:47

标签: singleton ejb-3.0 stateless-session-bean

我是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}}我不确定我是否应该在这里使用,但是也没有运气。

请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我得到了答案。 A类可以用&#34; Singleton&#34;进行注释。和B类(无状态)可以正常访问它的方法没有任何问题。你不必为A类提供任何视图。默认情况下它将是无界面视图。以下是帮助我理解的链接。

EJB 3.1 @LocalBean vs no annotation