Payara 161.1 で @Transactional のバグが修正されました!
この記事は、半分ポエムです。
最初のきっかけ
下記の@opengl_8080さんの記事でした。
CDIビーンのメソッドに@Transactionalアノテーションを付加しても、非チェック例外発生時にロールバックされない、というバグがあるのこと。
(JTAの仕様としては、チェック例外ならばコミット、非チェック例外ならばロールバックされます)
早速、自分でも試してみたのですが、やっぱりロールバックされませんでした。
はじめてのISSUE報告(2015/11/1)
僕は、トランザクション管理はJava EEの要だと思っていますので、PayaraのGitHubにISSUEを書きました。
英語あんまり得意じゃないですが・・・(^^;
テスト用プログラム(上記の@opengl_8080さんの記事を参考に作りました)
GitHub - MasatoshiTada/TransactionalSample-Doma
ISSUE
いま読み返しても、ひどい英語だ・・・。でも、もうこれは気合いでした。
Payaraの中の人から反応が!(2015-11-15)
Payaraの中の人たちは、すぐに反応してくれました。
テスト用プログラムのおかげで再現性がすぐに認められ、バグ修正も速やかに行われました!
最初にバグを見つけたのは@opengl_8080さんですし、僕はISSUEを書いただけです。
しかし、僕は現役のエンジニアではなく、僕が作ったプログラムが世の中で動くわけではないので、
本当に、ほんのちょっとでもPayaraに貢献できたことが、本当に嬉しかったんです。
修正されたPayaraがリリース!しかし・・・(2016-01)
上記の修正は、Payara 4.1.1.161に含まれました。
ウキウキして早速試してみました。
すると・・・
直ってないやん(--;)
TxType
がREQUIRED
の挙動は直っていたんですが、REQUIRES_NEW
の挙動は直っていませんでした。
再びISSUE報告(2016-02)
数日後、改めてISSUEを書きました。
#505 is not fixed when TxType is REQUIRES_NEW · Issue #667 · payara/Payara · GitHub
すると、やはりすぐに反応が返ってきました。
前回のことを覚えてくれていたのか、すぐに修正も行われました。
ちなみに、2回とも修正対応してくれたsmillidgeさん、Payaraを開発している英国C2B2社の創業者の方だそうです。
もし今年のJava Day Tokyoとかにいらっしゃったりすれば、是非お話してみたいなあ・・・。
リリースが思わぬ速さで!(2016-03)
Payaraは通常、四半期に1回のリリースなんですが、たまに四半期の間でもパッチ版がリリースされます。
僕は、「修正版が出るのは次の四半期かなー」と思っていたんですが、つい先日、パッチ版のPayara 4.1.1.161.1がリリースされました!
(「1」が多いので、以降は「Payara 161.1」と書きます)
このリリースに、上記バグの修正が含まれています。
このバグ修正の何が嬉しいのか?
JPA以外のORマッパーをPayara上で使いつつ、かつ@Transactionalでトランザクション管理を行うことができます。
(上記バグは、以前からJPAでは発生しませんでした)
最近、「100%Java EE標準」にこだわらないのであれば、JPA以外のORマッパー(Doma・MyBatis・jOOQ・DBFluteなど)を使う選択肢もアリだと思っています。
このような構成でも、安心してPayaraを使うことができます。
最後に
このバグを見つけてくれた@opengl_8080さんには、本当に感謝です。
繰り返しますが、僕はISSUEを書いただけです。
でも、将来的には、自分でバグ修正までしてプルリクエストを送れるくらいになりたいなあ・・・。