Payara 161.1 で @Transactional のバグが修正されました!

この記事は、半分ポエムです。

最初のきっかけ

下記の@opengl_8080さんの記事でした。

JavaEE使い方メモ(JTA) - Qiita

CDIビーンのメソッドに@Transactionalアノテーションを付加しても、非チェック例外発生時にロールバックされない、というバグがあるのこと。

JTAの仕様としては、チェック例外ならばコミット、非チェック例外ならばロールバックされます)

早速、自分でも試してみたのですが、やっぱりロールバックされませんでした。

はじめてのISSUE報告(2015/11/1)

僕は、トランザクション管理はJava EEの要だと思っていますので、PayaraのGitHubにISSUEを書きました。

英語あんまり得意じゃないですが・・・(^^;

テスト用プログラム(上記の@opengl_8080さんの記事を参考に作りました)

GitHub - MasatoshiTada/TransactionalSample-Doma

ISSUE

Payara does NOT rollback when RuntimeException occurs in CDI @Transactional method using JDBC · Issue #505 · payara/Payara · GitHub

いま読み返しても、ひどい英語だ・・・。でも、もうこれは気合いでした。

Payaraの中の人から反応が!(2015-11-15)

Payaraの中の人たちは、すぐに反応してくれました。

テスト用プログラムのおかげで再現性がすぐに認められ、バグ修正も速やかに行われました!

PAYARA-510 fixes 505 ensures resources are enlisted into the transaction by smillidge · Pull Request #524 · payara/Payara · GitHub

最初にバグを見つけたのは@opengl_8080さんですし、僕はISSUEを書いただけです。

しかし、僕は現役のエンジニアではなく、僕が作ったプログラムが世の中で動くわけではないので、

本当に、ほんのちょっとでもPayaraに貢献できたことが、本当に嬉しかったんです。

修正されたPayaraがリリース!しかし・・・(2016-01)

上記の修正は、Payara 4.1.1.161に含まれました。

ウキウキして早速試してみました。

すると・・・

直ってないやん(--;)

TxTypeREQUIREDの挙動は直っていたんですが、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を書いただけです。

でも、将来的には、自分でバグ修正までしてプルリクエストを送れるくらいになりたいなあ・・・。