我在从应用程序客户端访问有状态会话 bean (SFSB) 时遇到了一些问题。我正在使用 JBoss 5.0.1.GA。应用程序客户端和 EJB 都打包在一个 EAR 中进行部署,我还有其他应用程序客户端可以正常工作。到目前为止,我只使用了无状态会话 bean (SLSB),但据我了解,SLSB 和 SFSB 之间的差异不应该影响从应用程序客户端访问它们的方式。
类/接口的结构:
@Local public interface A {...}
@Stateless public class ABean implements A {...}
@Remote public interface B {...}
@Stateful public class BBean implements B {
@EJB private A anInstanceOfA;
@PostConstruct private void init() {
this.anInstanceOfA.someMethod();
}
}
应用程序客户端通过“appclient-launcher”运行,如“如何在 JBoss 5 中使用应用程序客户端”中所述。在执行 init() 期间调用(本地)ABean 上的 someMethod() 之前,查找“BBean”工作正常。在该调用期间,容器抛出 InvalidStateException("Local call: security context is null") (作为根本原因)。当我将有状态 bean 更改为无状态 bean 时,一切正常(当然,除了没有保留状态)。有趣的是,我可以很好地使用来自 Web 应用程序(在 JSF 托管 bean 中)的完全相同的 SFSB。
难道我做错了什么?我应该如何从应用程序客户端使用 SFSB?
到目前为止,我还没有发现任何关于这个特定问题的有用信息。该异常在[#JBAS-4317] Security Context over the invocation中的类似上下文中提到,但考虑到它被标记为已完成并在 JBoss 5.0.0.Beta3 中已修复,这似乎不是同一个问题。