У меня возникли проблемы с доступом к сеансовому компоненту с состоянием (SFSB) из клиента приложения. Я использую JBoss 5.0.1.GA. Клиент приложения и EJB оба упакованы в EAR, который развертывается, и у меня есть другие клиенты приложений, которые работают без проблем. До сих пор я использовал сессионные компоненты без состояния (SLSB), но, насколько я понимаю, различия между SLSB и SFSB не должны влиять на то, как они могут быть доступны из приложения-клиента.EJB 3: Доступ к сеансовому компоненту с состоянием из приложения-клиента
Структура классов/интерфейсов:
@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-пусковой установки», как описано в "How to use an application client in JBoss 5". Выполнение поиска «BBean» работает нормально до тех пор, пока someMethod() на (локальном) ABean не будет вызван во время выполнения init(). Во время этого вызова контейнер выдает InvalidStateException («Локальный вызов: контекст безопасности имеет значение null») (в качестве основной причины). Когда я изменяю фазу с состоянием в факторе без состояния, все работает нормально (за исключением, конечно, того, что государство не сохраняется). Интересно, что я могу использовать точно такую же SFSB из веб-приложения (в JSF-управляемом компоненте) просто отлично.
Я делаю что-то неправильно? Как я должен использовать SFSB от клиента приложения?
Я пока не нашел ничего полезного в этой конкретной проблеме. Исключение упоминается в аналогичном контексте в [#JBAS-4317] Security Context over the invocation, но, учитывая, что оно отмечено как сделанное и зафиксировано в JBoss 5.0.0.Beta3, похоже, это не проблема.
Интересная информация. Хотя, я не уверен, как это объясняет поведение, тем более, что он «работает» в факторе без состояния, и проблема возникает только тогда, когда я использовал свой собственный домен безопасности. Во всяком случае, поскольку я больше не имею никакого отношения к проекту и с тех пор не развивал разработки Java EE, я не очень мотивирован, чтобы узнать, как этот материал действительно работает. Спасибо, в любом случае! –