2015-04-10 2 views
0

Я создал ConnectionFactory (QCF/прод) и очереди (очередь/Impact) на моем сервере WebSphere
Когда я пытаюсь внедрить фабрику соединений в моих управляемых сообщениях, у меня есть эта ошибка:JMSContext инъекция не может быть решена

javax.ejb.EJBException: The @Inject java.lang.reflect.Field.context reference of type javax.jms.JMSContext for the XXXXProducerBean component in the XXXEJB-5.1-SNAPSHOT.jar module of the XXXXServiceEAR application cannot be resolved. 
    at com.ibm.wsspi.injectionengine.InjectionBinding.getInjectionObject(InjectionBinding.java:1154) ~[com.ibm.ws.runtime.jar:na] 
    at com.ibm.wsspi.injectionengine.InjectionBinding.getInjectableObject(InjectionBinding.java:1032) ~[com.ibm.ws.runtime.jar:na] 
    at com.ibm.wsspi.injectionengine.InjectionTarget.inject(InjectionTarget.java:125) ~[com.ibm.ws.runtime.jar:na] 
    at com.ibm.ws.injectionengine.AbstractInjectionEngine.inject(AbstractInjectionEngine.java:1084) ~[na:na] 
    at com.ibm.ejs.container.StatelessBeanO.initialize(StatelessBeanO.java:289) ~[com.ibm.ws.runtime.jar:na] 
    at com.ibm.ejs.container.BeanOFactory.create(BeanOFactory.java:130) ~[com.ibm.ws.runtime.jar:na] 
    at com.ibm.ejs.container.EJSHome.createNewBeanO(EJSHome.java:869) ~[com.ibm.ws.runtime.jar:na] 
    at com.ibm.ejs.container.EJSHome.createBeanO(EJSHome.java:1242) ~[com.ibm.ws.runtime.jar:na] 
    at com.ibm.ejs.container.EJSHome.createBeanO(EJSHome.java:1360) ~[com.ibm.ws.runtime.jar:na] 
    at com.ibm.ejs.container.activator.UncachedActivationStrategy.atActivate(UncachedActivationStrategy.java:89) ~[com.ibm.ws.runtime.jar:na] 
    at com.ibm.ejs.container.activator.Activator.preInvokeActivateBean(Activator.java:324) ~[com.ibm.ws.runtime.jar:na] 
    at com.ibm.ejs.container.EJSContainer.preInvokeActivate(EJSContainer.java:3728) ~[com.ibm.ws.runtime.jar:na] 
    at com.ibm.ejs.container.EJSContainer.EjbPreInvoke(EJSContainer.java:3042) ~[com.ibm.ws.runtime.jar:na] 

И мой MDB выглядит следующим образом:

@Stateless 
@Remote({ IXXXX.class }) 
@Interceptors(SpringBeanAutowiringInterceptor.class) 
@TransactionAttribute(TransactionAttributeType.REQUIRED) 
@TransactionManagement(TransactionManagementType.CONTAINER) 
@DeclareRoles(Constants.USER_ROLE_NAME) 
@RolesAllowed(Constants.USER_ROLE_NAME) 
public class XXXXProducerBean implements IXXXX { 

    @Inject 
    @JMSConnectionFactory("qcf/cont") 
    private JMSContext context; 

    @Resource(name="queue/Impact") 
    private Destination queueImpact; 

Я все документы, которые я нашел в интернете JMSContext, кажется, получают инъекции без любой конфигурации ... есть ли что-то не хватает?

EDIT
Спасибо за Эдди для файла beans.xml. Я забыл это.
Но теперь у меня есть другое исключение:

[10/04/15 09:34:55:031 CEST] 0000006e BeansDeployer E BeansDeployer deploy 
           javax.enterprise.inject.UnsatisfiedResolutionException: Api type [javax.jms.JMSContext] is not found with the qualifiers 
Qualifiers: [@javax.enterprise.inject.Default()] 
for injection into 
Field Injection Point, field : private javax.jms.JMSContext com.package.producer.ejb.XXXXProducerBean.context, Bean Owner : [WSEjbBean [businessLocals=[], ejbName=XXXXProducerBean2142018237,Name:null,WebBeans Type:ENTERPRISE,API Types:[java.lang.Object],Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Default]] 
    InjectionType : [interface javax.jms.JMSContext] 
    Annotated  : [Annotated Field,Base Type : interface javax.jms.JMSContext,Type Closures : [interface javax.jms.JMSContext, interface java.lang.AutoCloseable, class java.lang.Object],Annotations : [@javax.jms.JMSConnectionFactory(value=qcf/cont), @javax.inject.Inject()],Java Member Name : context] 
    Qualifiers  : [[@javax.enterprise.inject.Default()]] 
    at org.apache.webbeans.util.InjectionExceptionUtils.throwUnsatisfiedResolutionException(InjectionExceptionUtils.java:92) 
+0

У вас есть пустой 'beans.xml' файл под' WEB-INF'? Для EJB-модулей (JMS) вам необходимо создать [экземпляр CDI] (http://docs.oracle.com/javaee/6/tutorial/doc/gjbnz.html). –

+0

Спасибо за файл beans.xml. У вас есть идея для нового исключения? – bryce

ответ

0

WebSphere поддерживает JMS 1.1 не 2,0. @JMSConnectionFactory - от 2.0. Вам нужно изменить, что @Resource так:

@Resource("qcf/cont") 
    private ConnectionFactory connectionFactory; 
+0

Правильно! Это была проблема с WebSphere. – bryce

+0

@bryce Нет, это была проблема, из-за которой вы использовали неподдерживаемый API. Вы всегда должны проверить, поддерживается ли api в целевой среде выполнения или правильно настроить среду разработки, чтобы она знаменует неизвестные классы. Когда я вставил образец в свою среду, он сразу же выделил, что '@ JMSConnectionFactory' и' JMSContext' неизвестны. – Gas

+1

Да, вы правы. Когда я их использую, они были неизвестны. Затем я добавил зависимость javax.jms-api, и она сработала ... – bryce

Смежные вопросы