2

我创建了一个演示错误的小示例。

有状态 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 方法中进行的。我期望的调用步骤是:

  1. sfAdd叫做
  2. slAdd被调用并添加"S",返回。
  3. 打印[S]
  4. 添加"Z",返回。
  5. 打印[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但这没有帮助。

我还发现删除@StatefulfromStatefulBean会导致错误消失。Wildfly 10.1,JavaEE 7。

4

0 回答 0