Rest Weld中的一个bug(CDI实现)?
操作系统:Windows7 JVM:JavaSE 1.7 JavaEE:JBossAS 7.1.1 情景:Rest Weld中的一个bug(CDI实现)?,rest,jboss7.x,java-ee-6,cdi,weld,Rest,Jboss7.x,Java Ee 6,Cdi,Weld,操作系统:Windows7 JVM:JavaSE 1.7 JavaEE:JBossAS 7.1.1 情景: @Path("/test") @RequestScoped public class TestService { @Inject private Instance<Dummy> dummyinInstance; @Path("/execute") @GET public void execute() { dummyi
@Path("/test")
@RequestScoped
public class TestService {
@Inject
private Instance<Dummy> dummyinInstance;
@Path("/execute")
@GET
public void execute() {
dummyinInstance.get().execute();
}
}
@Stateless
public class Dummy {
private Date date=new Date();
public void execute() {
System.out.println("current date="+date);
}
}
@Path(“/test”)
@请求范围
公共类测试服务{
@注入
私有实例dummyinstance;
@路径(“/execute”)
@得到
public void execute(){
dummyinInstance.get().execute();
}
}
@无国籍
公共类虚拟{
私有日期=新日期();
public void execute(){
System.out.println(“当前日期=”+日期);
}
}
当我远程执行(使用rest客户端)Teservice:execute多次时,会打印相同的日期。无状态会话Bean意味着没有,会话Bean没有内部状态。变量在调用后不会变为空。而且SLSB不会这么快被销毁(好吧,您可以配置它)。实习生变量保存其值 但是,无状态代理的客户端不能保证在多次调用后获得相同的SLSB。事实上,有时看起来您与SFSB交互,因为容器从其SLSB池中调用同一SLSB上的方法,但您永远不应该依赖它 如果你同时与几个客户一起尝试,我相信你会看到你期望的行为 编辑:调用的顺序看起来有点像这样(简化)
TestService->SLSB代理->容器魔法->池->更多容器魔法->虚拟
您的第一个实例会被一次又一次地调用,因为在负载增加之前不需要再创建另一个实例。如果您通过
@PostConstruct
方法设置日期,您也会更顺利地完成所需任务。