我创建了一个演示错误的小例子。
有状态bean将列表作为其状态并注入无状态bean:
@Stateful
@RequestScoped
public class StatefulBean {
@Inject
StatelessBean slsb;
@Getter // public list getter
private List<String> list = new ArrayList<>();
public List<String> sfAdd() {
slsb.slAdd();
System.out.println(list);
list.add("Z");
return list;
}
}
无状态bean通过注入操作有状态bean的状态:
@Stateless
public class StatelessBean {
@Inject
StatefulBean sfsb;
public void slAdd() {
sfsb.getList().add("S");
}
}
调用System.out.println(sfsb.sfAdd());
是在JAXRS GET方法中完成的。我期望的调用步骤是:
sfAdd
被称为slAdd
被调用并添加"S"
,返回。[S]
。"Z"
,返回。[S, Z]
。一般情况下会发生什么,但输出也会给出错误信息:
INFO [stdout] (default task-2) [S]
ERROR [org.jboss.as.ejb3] (default task-2) WFLYEJB0487: Unexpected invocation state 0
INFO [stdout] (default task-2) [S, Z]
我不明白什么是WFLYEJB0487: Unexpected invocation state 0
,为什么会发生以及我应该怎么做呢。该消息是在步骤3和5之间打印的.Google只找到了https://developer.jboss.org/thread/272767,但它没有帮助。
我还发现从@Stateful
删除StatefulBean
会导致错误消失。 Wildfly 10.1,JavaEE 7。