Как внедрить Сессионный Бин в Бин, управляемый сообщениями?

Я достаточно новичок в Java EE, так что это может быть глупо .. терпите меня, пожалуйста: D

Я хотел бы внедрить сессионный компонент без сохранения состояния в компонент, управляемый сообщениями. По сути, MDB получает сообщение JMS, а затем использует сессионный компонент для выполнения работы. Сессионный компонент содержит бизнес-логику.

Вот мой сессионный компонент:

@Stateless
public class TestBean implements TestBeanRemote {

  public void doSomething() {
    // business logic goes here
  }
}

Соответствующий интерфейс:

@Remote
public interface TestBeanRemote {

  public void doSomething();
}

Вот мой MDB:

@MessageDriven(mappedName = "jms/mvs.TestController", activationConfig =  {
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
    })
public class TestController implements MessageListener {

 @EJB
 private TestBean testBean;

    public TestController() {
    }

    public void onMessage(Message message) {
      testBean.doSomething();
    }
}

Пока не ракетостроение, верно?

К сожалению, при развертывании этого на glassfish v3 и отправке сообщения в соответствующую очередь JMS я получаю ошибки, которые Glassfish не может найти в EJB TestBean:

java.lang.IllegalStateException: Exception attempting to inject Remote ejb-ref name=mvs.test.TestController/testBean,Remote 3.x interface =mvs.test.TestBean,ejb-link=null,lookup=null,mappedName=,jndi-name=mvs.test.TestBean,refType=Session into class mvs.test.TestController
Caused by: com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Remote ejb-ref name=mvs.test.TestController/testBean,Remote 3.x interface =mvs.test.TestBean,ejb-link=null,lookup=null,mappedName=,jndi-name=mvs.test.TestBean,refType=Session into class mvs.test.TestController
Caused by: javax.naming.NamingException: Lookup failed for 'java:comp/env/mvs.test.TestController/testBean' in SerialContext  [Root exception is javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=mvs.test.TestController/testBean,Remote 3.x interface =mvs.test.TestBean,ejb-link=null,lookup=null,mappedName=,jndi-name=mvs.test.TestBean,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'mvs.test.TestBean#mvs.test.TestBean' [Root exception is javax.naming.NamingException: Lookup failed for 'mvs.test.TestBean#mvs.test.TestBean' in SerialContext  [Root exception is javax.naming.NameNotFoundException: mvs.test.TestBean#mvs.test.TestBean not found]]]

Итак, мои вопросы:

это правильный способ внедрения сессионного компонента в другой компонент (в частности, компонент, управляемый сообщениями)?почему поиск имен не удался?

Ответы на вопрос(4)

Ваш ответ на вопрос