为什么Weblogic容器无法注入Event对象?

时间:2015-10-20 14:00:34

标签: java-ee dependency-injection weblogic cdi jsr356

首先,我想告诉我们这个问题更多是关于CDI,尤其是CDI事件。容器(在我的情况下,Weblogic 12无法注入Event对象)

问题的动机:

我正在尝试将JMS与WebSocket集成。基本上我试图从JMS使用消息然后引发一个事件,以便服务器端点可以接收JMS消息并最终通过WebSocket协议将其提升到浏览器。我有想法从这个blog集成JMS和WebSocket。 请注意,我没有将CDI用于任何其他目的。。但是当我尝试发射注入的事件时,我正面临NPE。

我的理解是,使用CDI我需要定义一个beans.xml,即使几乎是空的。

我的beans.xml(我已将此内容放入我的网络应用程序的WEB-INF目录中,并且我已粘贴以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="
  http://java.sun.com/xml/ns/javaee
  http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>

我的EventProducer课程如下所示:

public class EventProducer {
    @Inject
    @WSJMSMessage
    Event<DataChangeEvent> wsDeltaEvent;
    boolean raiseEvent = false;

    void produceEvent() {
        if (raiseEvent) {
            DataChangeEvent event = new DataChangeEvent(lastSeqNumberOfChangeLists, messageSelector, dataChangeEntries);
            wsDeltaEvent.fire(event); //Raising the NPE because wsDeltaEvent has not been injected.
        }
    }
}

Event Qualifier因此被定义:

/**
 * Identifies WebSocket JMS messages.
 */
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})

public @interface WSJMSMessage {
}

该活动的消费者是onJMSMessage类上的方法ServerEndpoint,相关部分粘贴在下方:

@ServerEndpoint(value = "/{projectName}/{businessViewName}/wsdata",
                encoders = {WSJsonEncoder.class},
                decoders = {WSJsonDecoder.class})
public class WebSocketActiveDataHandler {

    // Other Lifecycle methods omitted for brevity

    public void onJMSMessage(@Observes @WSJMSMessage DataChangeEvent dataChangeEvent) {
        //Something here
    }
}

我在这里缺少什么?有什么指针吗?

0 个答案:

没有答案