Почему контейнер Weblogic не может внедрить объект Event?

Прежде всего я хочу сказать, что этот вопрос больше касается CDI, особенно CDI Events. Контейнер (в моем случае Weblogic 12 не может ввести Event объект)

Мотивация для вопроса:

Я пытаюсь интегрировать JMS с WebSocket. По сути, я пытаюсь получить сообщение от JMS, а затем вызвать событие, чтобы конечная точка сервера могла получить сообщение JMS и в конечном итоге передать его в браузер по протоколу WebSocket. У меня есть идея интегрировать между 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.
        }
    }
}

EventQualifier определяется так:

/**
 * 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 ответов

Другие вопросы по тегам