Jakarta ee @注入无状态EJB包含来自上一个请求的数据

Jakarta ee @注入无状态EJB包含来自上一个请求的数据,jakarta-ee,ejb,jax-rs,stateless-session-bean,Jakarta Ee,Ejb,Jax Rs,Stateless Session Bean,我有一个JAX-RS Web服务,其中包含用于生成测试数据的资源。在测试期间,我发现注入的EJB没有重新初始化,仍然包含来自上一个请求的数据 我有一个jar文件server.jar,其中包含我与EJB的业务逻辑。为了显示我的问题,我创建了一个无状态bean: @Stateless public class TestService { @EJB SubsequentTestService state2Service; private String value;

我有一个JAX-RS Web服务,其中包含用于生成测试数据的资源。在测试期间,我发现注入的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();
    }
}
我使用对
subsequentsetservice
的后续调用来显示另一个无状态EJB的调用也存在奇怪的行为:

@Stateless
public class SubsequentTestService
{
    private String value;

    public void testIt()
    {
        System.out.println("####### VALUE2: " + value);
        value = "TestValue2";
    }
}
将注释表单
@EJB
更改为
@Inject
不会改变任何内容

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

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

    @GET
    @Path("/state")
    public void testState()
    {
        testService.testIt();
    }
}
@ApplicationPath("/api")
public class JaxRsConfiguration extends Application
{
}
JAX-RS应用程序配置如下所示:

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

    @GET
    @Path("/state")
    public void testState()
    {
        testService.testIt();
    }
}
@ApplicationPath("/api")
public class JaxRsConfiguration extends Application
{
}
war文件包含beans.xml,但不包含其他配置文件。所有内容都打包到ear文件中,并部署在wildfly 10.0.0.Final中。如果我通过调用webservice作为GET请求,我将获得预期的输出:

信息[stdout](默认任务-7)值:null
信息[stdout](默认任务-7)值2:null

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

信息[stdout](默认任务-8)值:TestValue
信息[stdout](默认任务-8)值2:TestValue2


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

您具有向后的
@无状态的含义

这并不意味着像这样:

嘿,容器,这是一个任意类,请将其设置为无状态bean

这实际上意味着:

嘿,容器,这是一个无状态类,您可以安全地将其用作无状态bean

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

另见:

我真丢脸。有些日子你最好不要离开床。谢谢你的澄清。