読者です 読者をやめる 読者になる 読者になる

ITの隊長のブログ

ITの隊長のブログです。いや、まだ隊長と呼べるほどには至っていないけど、日々がんばります。CakePHPとPlayFrameworkを使って仕事しています。最近はAngular2をさわりはじめたお(^ω^ = ^ω^)

【Play Framework】play framworkでハマったエラー「[[IllegalStateException: Transaction is Inactive]]」

Java Play Framework MySQL

スポンサードリンク

f:id:aipacommander:20150222095455p:plain


Play Frameworkって私の探し方が悪いかもしれませんが、ドキュメントが少なくてキツイ。。。


あれかな? そろそろ英語に覚醒(?)すべきではないだろうか。


さておき、対処方法をまとめる


原因

意外に特定するには時間は掛かりませんでした。

play.api.Application$$anon$1: Execution exceptionIllegalStateException: Transaction is Inactive

mysql> show engines;

MyISAM     | DEFAULT
mysql> show create table table_name;

ENGINE=MyISAM


ちーん\(^o^)/オワタ


えー、簡単にいうと、MySQLには2つのエンジンが選べてですよ。「MyISAM」と「InnoDB」が選べるんですけど、トランザクションが使えるエンジンは「InnoDB」だけなんです。なので、今回トランザクションをPlay側で記述したけど、MySQL側では「MyISAM」だったのでエラーが発生したというわけ。

修正をかける


原因がわかったので、MySQLの設定ファイル、既存のテーブルのエンジンを変更する。

  • /etc/my.cnf

[mysqld]
default-storage-engine = InnoDB


設定ファイルを変更したら再起動します。
再起動したら確認

-- dbに接続
mysql> use database_name

-- 内容を確認
mysql> show engines;

InnoDB     | DEFAULT


-- 動的に変更
mysql> alter table table_name engine InnoDB;