“Singleton Session Bean”用于存储应用程序范围的信息Java EE 6

时间:2014-07-14 12:29:34

标签: java java-ee singleton

我在jboss-as-7应用服务器上编写了一个Java ee 6应用程序。我希望有一个“Singleton Session Bean”来将应用程序范围的信息存储在列表“mediaDataList”中。

无状态会话bean“ClassA”将一些对象写入此列表,Web服务读取“mediaDataList”列表中的信息。

@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@Lock(LockType.WRITE)
public class MediaDataSafe {

    private final List<MediaData> mediaDataList = new ArrayList<MediaData>();

    @Inject
    Logger log;

    @PostConstruct
    void init() {
        // read from HD and store in mediaDataList
    }


    // just read the list...
    public List<MediaData> getMediaDataList() {
        return mediaDataList;
    }

    // write to list
    public void writeMediaDataSafe(...) {
        mediaDataList.add(auraMediaData);
    }
}


@Stateless
public class ClassA {

    @Inject
    MediaDataSafe mediaDataSafe;

    //write in list of singleton
    public void write(...) {
        mediaDataSafe.writeMediaDataSafe(...);
    }
}

@WebService(serviceName = "MyWebService", endpointInterface = "com.WebService")
public class MyWebService implements com.bla.WebService {

    //...

    @Inject
    transient MediaDataSafe mediaDataSafe;

    //read from list in singleton
    public MediaList getMediaList(...){
        mediaDataSafe.getMediaDataList(...);
    }
}

我的问题是,似乎我的系统中存在两个“signleton bean”!如果“ClassA”将一些新值写入列表,我无法使用我的webservice读取这些新值。 webservice始终返回相同的列表。 (它包含init的状态!)

我错了什么?我是否误解了关于“Singleton Session Bean”的内容?

1 个答案:

答案 0 :(得分:0)

到目前为止,对我来说看起来很好,因为Singleton每个应用程序实例化一次,我认为可能导致所描述的行为的唯一原因是同一应用程序的多个部署方向。

也许有必要仔细阅读Java EE 6 tutorial的以下部分以找到问题: