有状态EJB和几个客户端应用程序

时间:2013-06-19 16:38:55

标签: java-ee ejb

我正在编写Java EE应用程序(“UserServices”),它提供了一些服务,例如登录用户,管理用户等EJB或Web服务RESTEJB旨在供应用程序或客户端应用程序使用。客户端应用程序使用应用程序提供的无状态远程(或本地)bean。

我想保留有关已动态计算的登录用户数,用户活动数和用户统计数的数据。

我不知道怎么做。

数据必须保存在“UserServices”应用程序中,因为它是数据。所以我想我会使用带有本地和远程接口的有状态bean来保存它们。但是,在调用“登录”或“注销”等服务时,每个客户端应用程序都应该更改数据。

那么,如何从使用远程(或本地)无状态bean的客户端应用程序内部更改“UserServices”应用程序中“活动”的数据状态?

或者换句话说,如何从另一个(可能是远程的)应用程序中更改应用程序中存在的有状态bean的状态?

我正在使用Java EE 6EJB 3.1以及JBoss 7.1

2 个答案:

答案 0 :(得分:0)

据我了解,您希望在不同客户端的bean调用之间共享一些数据。尝试从另一个状态访问有状态会话bean的状态并不是一个好主意,因为每个客户端总是创建一个实例。 如果不需要持久化数据,则可以使用EJB Singleton Bean,或者使用单例范围的CDI bean(我更喜欢EJB Singleton)。要监视用户活动(bean调用),拦截器可能很有用,您可以拦截SFSB调用,并以这种方式提供单例。

答案 1 :(得分:0)

要计算登录用户的数量,您应该将bean定义为@Singleton。 @Singlton将数据保留在容器的起始端。

import javax.ejb.Singleton;
@Singleton

public class CounterBean {
private int loginUser = 1;

// Increment and return the number of users
public int countLoggedInUsers() {
    return loginUser++;
}
}

要保存永久登录的用户,您应该使用数据库或文件。