Play framework で添付ファイルを永続化してみた
昨年末からPlay frameworkというJavaフレームワークを使って開発している。
このフレームワーク、Javaでありながらスクリプト言語のような軽快な開発スタイルが取れ、これまでJava EEで辛い思いをしてきた人達にとっては非常に感動的なシロモノ。
ストレス無くさくさく開発を進めていたのだけど、ここ最近実装している添付ファイルの永続化周りでちょっと詰まってしまった。
Play frameworkにはplay.db.jpa.Blobというorg.hibernate.usertype.UserType実装クラスが用意されており、このクラスをModelのフィールドに定義することで簡単にファイルを保持するModelを定義することが出来る。ファイルの保存先はapplication.confのattachments.pathに指定する。
[java]
import javax.persistence.Entity;
import javax.persistence.Table;
import play.db.jpa.Blob;
import play.db.jpa.Model;
@Entity
@Table(name = "tbl_attach")
public class Attachment extends Model {
public Long id;
public Blob data;
}
[/java]
ただ、この方式にすると1つのディレクトリ配下にファイルがどんどん登録されていくことになる。
1ディレクトリ内に配置可能なファイル数には制限事項があるので、この方式はなんとも気持ち悪い。attachments.pathを動的に切り替えれば良いのかもしれないけど・・・。
で、結局DBにBlob型を用意して永続化するようにした。この方式だと保守が楽なのとトランザクションの考えもシンプルになるし。
今度Play Frameworkの勉強会に参加するので、この辺りのベストプラクティスをご存じの方がいたら聞いてみたいところ。