サラリーマンIT技術者の調査レポート

日々の業務で気付いた当たり障りのない技術的なあれこれを綴ります。

ActiveMQ は JMS2.0 をサポートしていない(2015/12/14時点)

タイトルのとおりです。気を付けましょう。

問題点

JavaEE 7 で JMS 2.0 が導入されましたが、ActiveMQ の Resource Adapter がサポートしている JMS のバージョンは 1.1 までとなっています(少なくとも activemq-rar-5.13.0.rar はそうです)。

@JMSContext
@JMSConnectionFactory

これらのアノテーションWildfly 8.1 + ActiveMQ で使おうとしたら、デプロイで微妙に失敗してハマりました。 動きそうで動かない。。

アプリケーションで JMS 2.0 の機能を使ってても、ビルドまでは確実にできちゃうし、場合によってはデプロイもできちゃうのでたちが悪いです。

例えば、

Session session = connection.createSession();

これはビルドがOKでデプロイもOKなのですが、悲しいかな、動かすとNGです。このような場合は

Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);

と書く必要があります。こうすれば JMS 1.1 のメソッドしか呼び出してないので、ビルドもOKで、デプロイも当然OKで、動作もOKです。

最後に

確かに、Apache ActiveMQ ™ -- Index を見ると、いきなり JMS 1.1 って書いてあるんですけど、、早く JMS 2.0 に対応して欲しいです。