Wildfly

时间:2017-08-09 22:01:04

标签: java java-ee wildfly cdi ejb-3.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]
  6. 一般情况下会发生什么,但输出也会给出错误信息:

    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。

0 个答案:

没有答案