【问题标题】:A bug in Weld ( CDI implementation)?Weld 中的错误(CDI 实现)?
【发布时间】:2013-08-30 10:21:39
【问题描述】:

操作系统:Windows 7 JVM:JavaSE 1.7 Java EE:JBoss AS 7.1.1

场景:

@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);
    }
}

当我远程执行(使用休息客户端)Teservice:execute 多次时,打印相同的日期。

【问题讨论】:

    标签: rest jboss7.x java-ee-6 cdi weld


    【解决方案1】:

    无状态会话 Bean 意味着会话 Bean 没有内部状态。调用后变量不会变为空。并且 SLSB 不会被这么快破坏(好吧,你可以配置它)。实习生变量保持它们的值。

    但无状态代理的客户无法保证在多次调用后获得相同的 SLSB。事实上,有时它看起来像是您与 SFSB 交互,因为容器从他的 SLSB 池中调用同一个 SLSB 上的方法,但您永远不应该依赖它。

    如果您同时对多个客户端进行尝试,我相信您会看到预期的行为。

    编辑:调用的顺序看起来有点像这样(简化)


    TestService->SLSB-Proxy->Container-Magic->Pool->更多Container-Magic->Dummy


    并且您的第一个实例被一次又一次地调用,因为在更多有效负载之前不需要创建另一个实例。

    【讨论】:

    • 如果您通过@PostConstruct 方法设置日期,您还将获得更多信息。
    猜你喜欢
    • 1970-01-01
    • 2016-02-14
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多