【问题标题】:@Inject stateless EJB contains data from previous request@Inject 无状态 EJB 包含来自先前请求的数据
【发布时间】:2018-02-24 21:14:50
【问题描述】:

我有一个 JAX-RS 网络服务,其中包含用于生成测试数据的资源。在测试过程中,我发现注入的 EJB 没有重新初始化,并且仍然包含来自最后一个请求的数据。

我有一个 jar 文件 server.jar,其中包含我的 EJB 业务逻辑。为了显示我的问题,我创建了一个无状态 bean:

@Stateless
public class TestService
{
    @EJB
    SubsequentTestService state2Service;

    private String value;

    public void testIt()
    {
        System.out.println("####### VALUE: " + value);
        value = "TestValue";

        state2Service.testIt();
    }
}

我正在使用对 SubsequentTestService 的后续调用来显示调用另一个无状态 EJB 时也存在奇怪的行为:

@Stateless
public class SubsequentTestService
{
    private String value;

    public void testIt()
    {
        System.out.println("####### VALUE2: " + value);
        value = "TestValue2";
    }
}

将注释形式@EJB 更改为@Inject 不会改变任何内容。

在我的web.war 中,我有简单的 JAX-RS bean。被调用以显示奇怪行为的定义如下:

@Path("/test")
public class TestResource
{
    @Inject
    TestService testService;

    @GET
    @Path("/state")
    public void testState()
    {
        testService.testIt();
    }
}

JAX-RS 应用程序配置如下所示:

@ApplicationPath("/api")
public class JaxRsConfiguration extends Application
{
}

war 文件包含 beans.xml,但没有其他配置文件。一切都打包成一个ear文件,部署在wildfly 10.0.0.Final中。如果我通过http://localhost:8080/api/test/state 将网络服务作为 GET 请求调用,我会得到预期的输出:

INFO [stdout](默认任务 7)####### 值:空
INFO [stdout](默认任务 7)####### VALUE2:null

但在第二个请求中,我得到以下意外输出:

INFO [stdout](默认任务 8)####### 值:TestValue
INFO [stdout](默认任务 8)####### VALUE2:TestValue2

我的问题是什么?可能是野蝇中的任何错误配置?但我只更改了日志记录和数据源定义。

【问题讨论】:

    标签: jakarta-ee ejb jax-rs stateless-session-bean


    【解决方案1】:

    你后面有@Stateless的意思。

    这不是这个意思:

    嘿容器,这是一个任意的类,请把它变成一个无状态的 bean。

    这实际上是这样的:

    嘿容器,这是一个无状态类,你可以放心地将它用作无状态 bean。

    你有一个有状态的类。您应该将其标记为@Stateful bean。否则,摆脱所有状态(非托管实例变量),以便您可以安全地将其用作@Stateless bean。

    另见:

    【讨论】:

    • 真丢脸。有些日子你最好不要离开床。感谢您的澄清。
    猜你喜欢
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多