public void observesConversationEvents(@Observes ConversationalEventWrapper wrapper) {
final EventConversationContext.Context ctx = EventConversationContext.get();
if (ctx != null && ctx.getSessionId() != null) {
final Map<String, Object> messageParts = new HashMap<String, Object>(20);
messageParts.put(MessageParts.ToSubject.name(), CDI.getSubjectNameByType(wrapper.getEventType().getName()));
messageParts.put(MessageParts.CommandType.name(), CDICommands.CDIEvent.name());
messageParts.put(CDIProtocol.BeanType.name(), wrapper.getEventObject().getClass().getName());
messageParts.put(CDIProtocol.BeanReference.name(), wrapper.getEventObject());
messageParts.put(MessageParts.SessionID.name(), ctx.getSessionId());
try {
if (wrapper.getQualifierStrings() != null && !wrapper.getQualifierStrings().isEmpty()) {
messageParts.put(CDIProtocol.Qualifiers.name(), wrapper.getQualifierStrings());
}
wrapper.getBus().send(CommandMessage.createWithParts(messageParts, RoutingFlag.NonGlobalRouting.flag()));
}
finally {
EventConversationContext.deactivate();
}
}
}
}