我想在无状态会话bean中有一个静态只读集合。理想情况下,只要应用程序正在运行,它就只会初始化一次并可用于bean实例。
假设此应用程序部署在具有多个服务器/ JVM的集群环境中。
据我了解,在第一种情况下,静态变量barList在容器创建bean的同时被初始化,并且与bean一样长(或者甚至更长?)并且那里有'在bean实例活着的时候没有被垃圾收集的危险。
在第二种情况下,当Foo类被加载时,barList被初始化,这是bean的getBarList()方法被执行时。它回来后会发生什么? bean方法执行完毕后会被销毁吗?
案例1:
@Stateless
public class MrBean implements BeanInterface{
private static final List<Bar> barList;
static{
barList = new ArrayList<Bar>();
//create some bars, add them to the list
}
public List<Bar> getBarList(){
return barList;
}
}
案例2:
@Stateless
public class MrBean implements BeanInterface{
public List<Bar> getBarList (){
return Foo.barList;
}
}
public class Foo {
public static final List<Bar> barList;
static{
barList = new ArrayList<Bar>();
// create bars, add them to barList
}
}
答案 0 :(得分:0)
我宁愿创建一个@Singleton
bean,让它管理并提供列表。那么你有以下优势:
static
,因此您符合EJB标准。@Startup
和@PostConstruct
注释进行EJB初始化。@Lock(READ)
@Lock(WRITE)
同时访问/操作列表。