Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Object 如何获取特定cdi会话范围bean的所有实例_Object_Find_Cdi_Session Bean - Fatal编程技术网

Object 如何获取特定cdi会话范围bean的所有实例

Object 如何获取特定cdi会话范围bean的所有实例,object,find,cdi,session-bean,Object,Find,Cdi,Session Bean,我有一个@SessionScoped CDIBean,用于跟踪web应用程序中的用户会话信息。有没有办法从另一个@ApplicationScoped bean中找到这个bean的所有对象?你不能开箱即用。出于安全考虑,JavaEE禁止这种事情 现在,您可以想象一种更精细的方法来在应用程序范围级别跟踪这些会话bean。最干净的方法是从@ApplicationScopedbean生成它们: @ApplicationScoped public class Registry { private Li

我有一个@SessionScoped CDIBean,用于跟踪web应用程序中的用户会话信息。有没有办法从另一个@ApplicationScoped bean中找到这个bean的所有对象?

你不能开箱即用。出于安全考虑,JavaEE禁止这种事情

现在,您可以想象一种更精细的方法来在应用程序范围级别跟踪这些会话bean。最干净的方法是从
@ApplicationScoped
bean生成它们:

@ApplicationScoped
public class Registry {
  private List<SessionData> data = new ArrayList<>;

  @Produces
  @SessionScoped
  public SessionData produceSessionData() {
    SessionData ret = new SessionData();
    data.add(ret);
    return ret;
  }

  public void cleanSessionData(@Disposes SessionData toClean) {
    data.remove(toClean);
  }
}
@ApplicationScoped
公共类注册表{
私有列表数据=新的ArrayList;
@产生
@会议范围
公共SessionData produceSessionData(){
SessionData ret=新SessionData();
数据。添加(ret);
返回ret;
}
public void cleansiondata(@Disposes SessionData to clean){
数据删除(toClean);
}
}

请注意
@Dispose
方法,该方法将在生成的bean结束其生命周期时调用。这是一种使列表保持最新并避免额外内存使用的方便方法。

感谢Antoine提供了宝贵的答案。我必须在ApplicationScoped bean中的HashMap的帮助下完成这项工作,当成功登录时,该HashMap将加载唯一的用户ID和相关的SessionScoped bean对象,然后从SessionScoped bean的PreDestroy事件中的HashMap中删除相关的session bean对象。我也必须试试你的解决办法。再次感谢。