Ich habe Schwierigkeiten, auf ein zustandsbehaftetes Session Bean (SFSB) von einem Anwendungsclient aus zuzugreifen. Ich verwende JBoss 5.0.1.GA. Der Anwendungsclient und die EJBs sind beide in einem EAR verpackt, das bereitgestellt wird, und ich habe andere Anwendungsclients, die ohne Probleme funktionieren. Bisher habe ich nur zustandslose Session Beans (SLSBs) verwendet, aber soweit ich verstehe, sollten die Unterschiede zwischen SLSBs und SFSBs nicht beeinflussen, wie sie von einem Anwendungsclient aus zugegriffen werden können.
Die Struktur der Klassen/Interfaces:
@Local public interface A {...}
@Stateless public class ABean implementiert A {...}
@Remote public interface B {...}
@Stateful public class BBean implementiert B {
@EJB private A eineInstanzVonA;
@PostConstruct private void init() {
dieseInstanzVonA.eineMethode();
}
}
Der Anwendungsclient wird über den "appclient-launcher" ausgeführt, wie in "Wie man einen Anwendungsclient in JBoss 5 verwendet" beschrieben. Das Suchen nach "BBean" funktioniert gut, bis während der Ausführung von init() someMethod() auf dem (lokalen) ABean aufgerufen wird. Während dieses Aufrufs wirft der Container eine InvalidStateException("Lokaler Aufruf: Sicherheitskontext ist null") (als Wurzelursache). Wenn ich das zustandsbehaftete Bean in ein zustandsloses Bean ändere, funktioniert alles gut (außer natürlich, dass der Zustand nicht erhalten bleibt). Interessanterweise kann ich dasselbe SFSB aus einer Webanwendung (in einem JSF-Managed-Bean) problemlos verwenden.
Mache ich etwas falsch? Wie soll ich ein SFSB von einem Anwendungsclient aus verwenden?
Bisher habe ich noch nichts Nützliches zu diesem speziellen Problem gefunden. Die Ausnahme wird in einem ähnlichen Kontext in [#JBAS-4317] Sicherheitskontext über den Aufruf erwähnt, aber da sie als erledigt markiert ist und in JBoss 5.0.0.Beta3 behoben ist, scheint es nicht das gleiche Problem zu sein.