Java EE için oldukça yeniyim, bu aptalca olabilir .. benimle ayırabilirsin: DBir Oturum Bean bir Mesaj Driven Bean içine nasıl enjekte edilir?
Mesaja dayalı bir fasülye vatansız bir oturum fasulyesi enjekte etmek istiyorum. Temel olarak, MDB bir JMS iletisi alır, sonra işi gerçekleştirmek için bir oturum fasulyesi kullanır. Oturum fasulye iş mantığını tutar.
İşte benim Oturum Bean var:
@Stateless
public class TestBean implements TestBeanRemote {
public void doSomething() {
// business logic goes here
}
}
eşleştirme arayüzü:
@Remote
public interface TestBeanRemote {
public void doSomething();
}
İşte benim MDB var:
@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();
}
}
Şimdiye kadar, değil roket bilimi doğru?
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]]]
Yani benim sorular şunlardır: Bu v3 glassfish dağıtma ve uygun JMS Kuyruğu bir mesaj gönderirken glassfish TestBean EJB bulamıyorsa o
yazık ki, ben hataları olsun
- Bir oturum fasulyesinin başka bir fasülyeye (özellikle mesaj yönlendirmeli bir fasülye) enjekte edilmesi için doğru yol bu mu?
- Neden adlandırma araması başarısız oluyor?
Şimdi biraz daha uzağım. @LocalBean, Arabirim içermeyen bir fasulyeyi tanımlar. Demek istediğim, istediğim bu değil: D – Hank
"@EJB private TestBeanRemote testBean" kullanmış olmalısınız. – Dagvadorj