![](/img/trans.png)
[英]EJB TransactionRequiredException in GlassFish 2.1
[英]EJB Dependencies are not wired (injected) properly on GlassFish 2.1
由於某些原因,我應該使用舊的EJB容器GlassFish 2.1.1。 (通過Java EE 5和EJB 3.0認證)。 項目結構如下:
MDB:
@MessageDriven(
mappedName = "jms/Queue",
activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue")
})
public class TriggerMBean implements MessageListener {
@EJB
private TriggerProcessor triggerService;
public void onMessage(Message message) {
//.......
triggerService.process();
//.......
}
}
TriggerProcessor:
@Stateless
public class TriggerProcessor {
public void proceess() {
//....
}
}
我尚未創建部署描述符。 據我了解,如果我使用的是從3.0開始的注釋和EJB版本,則沒有必要
部署時,以下情況是例外:
[#|2012-06-15T15:55:50.290+0300|SEVERE|sun-appserver2.1|javax.enterprise.system.container.ejb.mdb|_ThreadID=42;_ThreadName=p: thread-pool-1; w: 61;_RequestID=824fc411-7772-42cc-aeee-9a8d9b451dbf;|com.sun.enterprise.InjectionException
com.sun.enterprise.InjectionException: Exception attempting to inject Unresolved Ejb-Ref fi.prh.novus.sync.consumer.TriggerMBean/triggerService@jndi: fi.prh.novus.sync.service.TriggerProcessor@null@fi.prh.novus.sync.service.TriggerProcessor@Session@null into class fi.prh.novus.sync.consumer.TriggerMBean
at com.sun.enterprise.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:387)
at com.sun.enterprise.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:206)
at com.sun.enterprise.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:127)
at com.sun.ejb.containers.MessageBeanContainer.createMessageDrivenEJB(MessageBeanContainer.java:711)
at com.sun.ejb.containers.MessageBeanContainer.access$100(MessageBeanContainer.java:109)
at com.sun.ejb.containers.MessageBeanContainer$MessageBeanContextFactory.create(MessageBeanContainer.java:492)
at com.sun.ejb.containers.util.pool.NonBlockingPool.getObject(NonBlockingPool.java:199)
at com.sun.ejb.containers.MessageBeanContainer._getContext(MessageBeanContainer.java:555)
at com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:1731)
at com.sun.ejb.containers.MessageBeanContainer.beforeMessageDelivery(MessageBeanContainer.java:1008)
at com.sun.ejb.containers.MessageBeanListenerImpl.beforeMessageDelivery(MessageBeanListenerImpl.java:70)
at com.sun.enterprise.connectors.inflow.MessageEndpointInvocationHandler.invoke(MessageEndpointInvocationHandler.java:135)
at $Proxy86.beforeDelivery(Unknown Source)
at com.sun.messaging.jms.ra.OnMessageRunner.run(OnMessageRunner.java:245)
at com.sun.enterprise.connectors.work.OneWork.doWork(OneWork.java:77)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555)
Caused by: javax.naming.NameNotFoundException: fi.prh.novus.sync.service.TriggerProcessor#fi.prh.novus.sync.service.TriggerProcessor not found
at com.sun.enterprise.naming.TransientContext.doLookup(TransientContext.java:216)
at com.sun.enterprise.naming.TransientContext.lookup(TransientContext.java:188)
at com.sun.enterprise.naming.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:74)
at com.sun.enterprise.naming.LocalSerialContextProviderImpl.lookup(LocalSerialContextProviderImpl.java:111)
at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:409)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.sun.enterprise.naming.NamingManagerImpl.lookup(NamingManagerImpl.java:951)
at com.sun.enterprise.naming.java.javaURLContext.lookup(javaURLContext.java:173)
at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:407)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.sun.enterprise.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:287)
... 15 more
|#]
我試圖注釋private TriggerProcessor triggerService;
@EJB(beanName="TriggerProcessor")
和public class TriggerProcessor {..
與@Stateless(name="TriggerProcessor")
但沒有幫助。
實際上,這在最新的Glassfish 3.1。上是完美的,但是正如我很珍貴的告訴我,我應該使用GF 2.1.1。
任何幫助表示贊賞!
由於GlassFish 2不支持EJB 3.1,因此它不起作用。 由於TriggerProcessor
沒有實現任何接口,因此它提供了無接口視圖。 您必須提供一個接口,使TriggerProcessor
與EJB 3.0兼容。
僅EJB 3.1支持無接口視圖。 請參閱http://docs.oracle.com/cd/E19776-01/820-4496/beahm/index.html和第1.2章JSR 318規范的EJB 3.1中的新增功能 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.