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

Jakarta ee 有状态EJB和几个客户端应用程序,jakarta-ee,ejb,Jakarta Ee,Ejb,我正在编写一个javaee应用程序(“UserServices”),它通过EJB或web服务REST提供一些服务,如登录用户、管理用户等EJB旨在由应用程序或客户端应用程序使用。客户端应用程序使用应用程序提供的无状态远程(或本地)bean 我想保留有关登录用户数量、用户活动和用户统计信息的数据,这些数据是动态计算的 我不知道怎么做 这些数据必须保存在“UserServices”应用程序中,因为它包含数据。所以我想我应该使用有状态bean和本地和远程接口来保持它们。但当调用诸如“登录”或“注销”之

我正在编写一个
javaee
应用程序(“UserServices”),它通过
EJB
或web服务
REST
提供一些服务,如登录用户、管理用户等<代码>EJB旨在由应用程序或客户端应用程序使用。客户端应用程序使用应用程序提供的无状态远程(或本地)bean

我想保留有关登录用户数量、用户活动和用户统计信息的数据,这些数据是动态计算的

我不知道怎么做

这些数据必须保存在“UserServices”应用程序中,因为它包含数据。所以我想我应该使用有状态bean和本地和远程接口来保持它们。但当调用诸如“登录”或“注销”之类的服务时,每个客户端应用程序都应该引起数据的更改

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

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


我正在使用
JavaEE6
EJB3.1
JBoss7.1

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

要计算登录用户的数量,您应该将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++;
}
}

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

我认为单例ejb可能用于计算登录用户的数量。