I have a question regarding CDI Events fired from a CommonJ WorkListener. This is my setup:
A bean that fires events and schedules work items:
@Named
public class SomeBean {
@Inject
private Event<ActivityEvent> event;
public void doIt() {
try {
event.fire(new ActivityEvent("I work just fine :)"));
WorkManager manager = (WorkManager) new InitialContext().lookup("java:comp/env/wm/HighPriority");
List<WorkItem> workItems = new ArrayList<>();
for (int i = 0; i < 10; i++) {
SomeWork work = new SomeWork();
WorkListener listener = new SomeWorkListener();
workItems.add(manager.schedule(work, listener));
}
event.fire(new ActivityEvent("I work just fine :)"));
manager.waitForAll(workItems, WorkManager.INDEFINITE);
event.fire(new ActivityEvent("I work just fine :)"));
} catch (Exception e) {}
}
}
A WorkListener that tries to fire an event, but fails :(:
public class SomeWorkListener implements WorkListener {
private static final Logger LOGGER = Logger.getLogger(SomeWorkListener.class);
@Override
public void workAccepted(WorkEvent we) {}
@Override
public void workRejected(WorkEvent we) {}
@Override
public void workStarted(WorkEvent we) {}
@Override
public void workCompleted(WorkEvent we) {
LOGGER.debug("Work completed");
//fireEvent fails silently?
getBeanManager().fireEvent(new ActivityEvent("I don't work :("));
LOGGER.debug("This debug message won't print?...");
}
public static BeanManager getBeanManager() {
try {
return (BeanManager) new InitialContext().lookup("java:comp/BeanManager");
} catch (NamingException ex) {
throw new RuntimeException(ex);
}
}
}
An EventListener that observes the ActivityEvent events:
@Stateless
@Asynchronous
public class ActivityEventListener {
private static final Logger LOGGER = Logger.getLogger(ActivityEventListener.class);
public void process(@Observes ActivityEvent activityEvent) {
LOGGER.info(activityEvent.getMessage());
}
}
This will only print the "I work just fine :)"
events fired from the managed bean and not the "I don't work :("
events fired from the WorkListener. It appears to fail silently since the log message after the fireEvent won't log as well; no exception or stack trace...
I've also tried passing a reference of the event from the managed bean to the worklistener, without succes. Using the BeanManager to fire events works from the managed bean by the way.
So my question is: How can I fire events from a (CommonJ) WorkListener?
Relevant part of stack:
- JEE6
- CommonJ WorkManager
- WebLogic 12.1.2
Aucun commentaire:
Enregistrer un commentaire