我正在编写Java EE
应用程序(“UserServices”),它提供了一些服务,例如登录用户,管理用户等EJB
或Web服务REST
。 EJB
旨在供应用程序或客户端应用程序使用。客户端应用程序使用应用程序提供的无状态远程(或本地)bean。
我想保留有关已动态计算的登录用户数,用户活动数和用户统计数的数据。
我不知道怎么做。
数据必须保存在“UserServices”应用程序中,因为它是数据。所以我想我会使用带有本地和远程接口的有状态bean来保存它们。但是,在调用“登录”或“注销”等服务时,每个客户端应用程序都应该更改数据。
那么,如何从使用远程(或本地)无状态bean的客户端应用程序内部更改“UserServices”应用程序中“活动”的数据状态?
或者换句话说,如何从另一个(可能是远程的)应用程序中更改应用程序中存在的有状态bean的状态?
我正在使用Java EE 6
和EJB 3.1
以及JBoss 7.1
。
答案 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++;
}
}
要保存永久登录的用户,您应该使用数据库或文件。