[Presentation] Introduction to JCA and MDB (ja)

この記事は Java EE Advent Calendar 2017 の 2 日目です。

9 月末の 第二十回 #渋谷java で発表し、忘れたままになっていたスライドを再掲します。

テーマは JCA (Java Connectors Architecture) と MDB (Message Driven Bean)。Payara Micro が 5 月のアップデートで各種クラウドのメッセージング・サービスとの連携をサポートし、その際に用いられたのが JCA でした。長いこと存在も忘れていた JCA と、JCA と組み合わせて非同期通信を容易にする MDB について、自身の復習を兼ねてまとめてみました。

スライドにも書いたのですが、JCA は目立たない存在だけれども Java EE サーバーのいたるところで使用されています。JMS (Java Messaging Service) が現在 JCA ベースで設計されていることは知る人ぞ知る事実ですが、JDBC データソース/コネクションプールといった普段何気なく使用しているものも実は JCA ベースで作られていたりもします。Java EE において JMS を使用しない非同期通信は基本的に JCA を使用することが多いです (結果的に JMS と似た処理になるのですが、メッセージ・ブローカー側が JMS に準拠しなくてもよいというメリットがあります)。

JCA と MDB はもっぱら非同期通信で使われますが、仕組みとしては同期通信にも対応しており、その昔は SOAP に対応した JCA と MDB の実装もあったと聞きます。同期通信であっても、MDB を使うと待ち受けのポーリング処理を記述する必要がまったくなくなるため、それなりのメリットはあったと考えられます。

古い資料だと JCA は ERP システムやメインフレームと接続するための仕様と説明され、本質である「汎用的な外部接続サービス」という点が抜け落ちています。JCA は登場してから Java EE とともにアップデートを重ねています。Java EE 8 に含まれる JCA は Java EE 7 と同じ JCA 1.7 ですが、さらに JCA を改善しようという動きもあるようです。古くて新しい JCA のことを、ぜひ頭の片隅にでも覚えておいてください。

明日は @koduki さんです。