EJB 3: невозможно внедрить bean-компонент в код клиента, оба из которых управляются одним контейнером - PullRequest
1 голос
/ 22 декабря 2011
@Local
public interface EJBA{
// declares a method 'validate'
}

@Stateless
public class EJBABean implements EJBA{
// implements the method 'validate'
}

class Model{
@EJB
private EJBA ejbA;
public void doSomething(){
   ejbA.validate();
}
} 

Теперь, если я сделаю следующее из метода execute класса действий Struts 1.2

new Model().validate();

ejbA для модели равно нулю, в результате чего NullPointerException . Вопрос похож на this , но в моем случае я запускаю клиентский код (модель), а также bean-компонент на самом сервере JBoss 6.1 Final. Модель и EJB находятся в отдельном файле jar, а классы действий - в файле war. Оба из них упакованы в файл ear.

Если я использую поиск по контексту, используя [ear-name] / EJBABean / local , я могу получить к нему доступ. Что я делаю не так?

1 Ответ

1 голос
/ 26 декабря 2011

Ваш класс Model не управляется контейнером, и поэтому JBoss не может определить ejbA как внедренный EJB. Вы должны превратить свой класс Model в EJB, пометив его как @Stateless / @Stateful / @Singleton.

Вот почему поиск JNDI, в котором контейнер не участвует, работает отлично.

...