2016 Обновление
Altho java-события были добавлены еще в 2006 году, и этот вопрос относится к 2010 году, они все еще как-то «скрытые» функции в Java API, читая вопрос, который я считаю альтернативой, которая делает именно то, что вы хотите, - события Java, но не те, что в событиях AWT Java 6, которые позволяют отделить модули вашего проекта и иметь JML-подобные возможности без сервера, единственным недостатком событий по сравнению с JMS является то, что слушатель должен быть запущен, иначе сообщение будет заблудился.
от: https://dzone.com/articles/java-ee6-events-lightweight
Yo создать сообщение:
public class LogMessage implements Serializable {
private final String message;
private final Level level;
LogMessage(String message, Level level) {
this.message = message;
this.level = level;
}
public String getMessage() {
return message;
}
public Level getLevel() {
return level;
}
}
Вы создаете продюсера:
@Inject Event<LogMessage> event;
event.fire(new LogMessage("Log it baby!", Level.INFO));
и, наконец, вы создаете потребителя:
public class LogListener {
private static final Logger LOGGER = Logger.getAnonymousLogger();
public void process(@Observes LogMessage message){
LOGGER.log(message.getLevel(), message.getMessage());
}
}
Ознакомьтесь с аннотацией @Observe.
Все это делается синхронно и хорошо, чтобы быть больше jms /, как вы хотите сделать этот процесс асинхронным способом, для этого просто добавьте:
@Stateless
@Asynchronous
public class LogListener {
private static final Logger LOGGER = Logger.getAnonymousLogger();
public void process(@Observes LogMessage message){
LOGGER.log(message.getLevel(), message.getMessage());
}
}