Jakarta ee @注入无状态EJB包含来自上一个请求的数据
我有一个JAX-RS Web服务,其中包含用于生成测试数据的资源。在测试期间,我发现注入的EJB没有重新初始化,仍然包含来自上一个请求的数据 我有一个jar文件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;
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
另见:
我真丢脸。有些日子你最好不要离开床。谢谢你的澄清。