https://blogs.oracle.com/theaquarium/entry/asynchronous_cdi_events
CDIイベントは非常に強力な機能で、非常にシンプルで型安全な方法で疎結合にすることができます。CDIイベントは、非同期というよりはむしろ同期型である、という側面があり、このことに驚かれる方が結構いらっしゃいます。イベントシステムが通常は非同期である、ということを考えれば、その驚きは当然と言えるでしょう。Piotr Nowickiが、EJBの@AsynchronousアノテーションやSingletonロック、JMSなどのプレーンなJava EEの機能を使用して、CDIイベントを非同期にするための様々なオプションを調査し、ブログエントリにまとめ、その中で問題を調べています。
Asynchronous CDI Eventsnode.jsやリアクティブ・プログラミングが徐々に発展しているため、この問題をさらに深掘りすることはきっと時宜に適っていると思います。
http://www.javacodegeeks.com/2013/05/asynchronous-cdi-events.html
非常に心強いことに、CDI 2.0のスペックリードであるAntoine Sabot-Durand自身が、自身のCDI 2ウィッシュリストで、非同期CDIイベントについて述べており、@Observes アノテーションへの非同期フラグを追加することを提案しています。
Forward CDI 2.0 (Next Presso)この提案における、考えられる不都合な点は、イベントプロデューサではなく、イベントコンシューマが非同期を使うことを決定する、という点です。もう一つの可能性は、Java SE 8で導入されたアノテーション機能を使って、プロデューサに非同期マーカーを付けることです。
http://www.next-presso.com/2014/03/forward-cdi-2-0/
この問題と可能性についてどう思いますか?そろそろ、CDI 2の将来がはっきりしてきたと、合図を出す時期ですね。
public
class
EventProducer {
@Inject
Event event;
public
void
doSomething() {
MyEvent e =
new
@Async
MyEvent();
e.data =
"This is a test event"
;
e.eventTime =
new
Date();
event.fire(e);
}
}
public
class
EventConsumer {
public
void
afterMyEvent(
@Observes
MyEvent event) {
// .. Insert event logic here
}
}
0 件のコメント:
コメントを投稿