javaのFW「Play」のまとめリンク

Playでできる5つのすごいこと(公式日本語1.2)

PLAY FRAMEWORK2.0の公式ドキュメントを読む

ポストRailsと個人的に期待するPlay frameworkを推奨する5つの理由

なぜ Play は Servlet を使っていないのか(Why there is no servlets in Play 翻訳)

herokuで始めるplay frameworkの入門

アクション、コントローラ、レスポンス(公式日本語2.0)
httpRequesutやResponceなど。
public static Result index() {
return ok("Got request " + request() + "!");
}

HTTPルーティング(公式日本語2.0)
routes、HttpResponseのContext設定、リダイレクト、controller.Application を毎回書く事に疲れたらのimportなど。
public static Result show(String page) {
String content = Page.getContentOf(page);
response().setContentType("text/html");
return ok(content);
}

レスポンスの変更(公式日本語2.0)
Context-type、レスポンスヘッダ、cookieの設定、レスポンスで文字コードの設定など。

セッションとフラッシュスコープ(公式日本語2.0)

ボディパーサ(公式日本語2.0)
plainだけでなくxml,json,maltipart/form-data,application/form-url-encodedとかも。application.confで最大content-lengthの設定も
public static Result index() {
RequestBody body = request().body();
return ok("Got body: " + body);
}
@BodyParser.Of(BodyParser.Json.class)
public static Result index() {
RequestBody body = request().body();
return ok("Got json: " + body.asJson());
}

アクションの合成(公式日本語2.0)
@Withアノテーション、Http.Context、delegate,call、ノートにplay.mvc.Security.Authenticated と play.cache.Cached アノテーション
@With(VerboseAction.class)
public static Result index() {
return ok("It works!");
}

・Cometソケット(公式日本語2.0)
チャンクレスポンス

WebSocekt(公式日本語2.0)

フォームテンプレートヘルパの利用(公式日本語2.0)
Twitterbootstrapフィールドコンストラクタ、フィールドコンストラクタ、値の繰り返しとかも

SQLデータベースアクセス、JDBCの設定と利用
JDBCコネクションプール、JDBCデータソースの参照、JDBCコネクションの取得

import play.db.*;
DataSource ds = DB.getDatasource();
Connection connection = DB.getConnection();

JPAの統合(公式日本語2.0)
JNDI経由、persistence.xmlファイル、@Transactionalアノテーション

EBeanのORM(公式日本語2.0)
トランザクション、EBeanの設定。
default データソースを使用する default Ebean サーバを定義していて、これは適切に設定する必要がある。アノテーションのpatternはバリデーションにもなる。
ebean.orders="models.Order,models.OrderItem"
ebean.customers="models.Customer,models.Address"

@Formats.DateTime(pattern="dd/MM/yyyy")
public Date dueDate = new Date();

Transactionalアノテーションが複数あるから注意。
@play.db.jpa.Transactional アノテーション
play.db.ebean.Transactional;

キャッシュAPI(公式日本語2.0)
キャッシュAPIのアクセス、アクションの合成、テンプレートにおけるキャッシュ、セッションにおけるキャッシュ
@Cached("homePage")
public static Result index() {
return ok("Hello world");
}

テンプレートエンジン(公式日本語2.0)
The Template Engine(公式英語2.1.2)
Common Template Use Cases(公式英語2.1.2)

・Play WS API(公式日本語2.0)
httpリクエスト、レスポンス、httpクライアント

PlayのOpen ID対応(公式日本語2.0

メッセージの外部ファイル化と多言語対応
messagesファイル、メッセージのフォーマット(プレイスホルダ)

アプリケーションのグローバル設定(公式日本語2.0)
Globalオブジェクト、GlobalSettingsオブジェクト、アプリケーションの起動、停止のインターセプト、アプリケーションのエラーページ、NotFoundとか存在しないエラー対応

リクエストのインターセプタ(公式日本語2.0)
特定のアクションメソッドへのリクエストだけをインターセプトすることも可能です。そのためには、アクションの合成を使います。

アプリケーションのテスト(公式日本語2.0)
JUnit、フェイクアプリケーション

機能テストを書く(公式日本語2.0)
テンプレート、コントローラ、ルータ、httpサーバの起動、ブラウザからテスト

フォームの送信(公式日本語2.0)
制約の定義、アノテーションを使ったBeanバリデーション、play.data.validation.Constraints クラス、バインドエラー、JodaTime

JSONリクエストとレスポンス(公式日本語2.0)
cURLでテスト
@BodyParser.Of(Json.class)
public static index sayHello() {
JsonNode json = request().body().asJson();
String name = json.findPath("name").getTextValue();
if(name == null) {
return badRequest("Missing parameter [name]");
} else {
return ok("Hello " + name);
}
}

How to redirect to external URL in Play framework 2.0 (Java)
リダイレクト。フォワードは?

■自サイト
Play Frameworkの開始、メモ
playのview
playのController
playのmodel
playのトランザクション

apachePOIのメモ書き。環境はwindows7

poi.apache.orgのDownloadページからbin版のpoi-bin-3.9-20121203.zipをダウンロード。中身をみたら、poi-3.9ディレクトリ下にjarがたくさんあったり、poi-3.9\ooxml-lib.poi-3.9\libディレクトリにもいくつかlibがあった。
eclipseで実行する場合、libフォルダでも作ってそのなかにpoi-3.9\poi-3.9-20121203.jarをコピーしてパスを通せば実行できた。試したのは簡単なpoiを使うソースだったから、色々やるようになったら他のlibも必要になるかも。

[20130728追記]
excel2007で使うXSSFDrawingクラスを使おうとしたら、poi-ooxml*あたりのjarも必要になった。あと、Runtimeでjava.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlObjectが発生し、xmlbeans*.jar,dom4j*.jar,stax-api*.jarあたりも必要だった。めんどくせ、いい加減maven使おう。

で、eclipseだけじゃなくて、ちょっとコマンドラインからもビルドから実行までやってみようとしたら少し嵌ったのでそれについても少し書く。

>javac HelloWorld.java
HelloWorld.java:3: エラー: パッケージorg.apache.poi.hssf.usermodelは存在しま
import org.apache.poi.hssf.usermodel.*;
^
HelloWorld.java:4: エラー: パッケージorg.apache.poi.hssf.utilは存在しません
import org.apache.poi.hssf.util.HSSFColor;
^
HelloWorld.java:14: エラー: シンボルを見つけられません
HSSFWorkbook workBook = new HSSFWorkbook();

コンパイル失敗。poiのライブラリを指定してないから想定の範囲内。なのでsetでCLASSPATHを指定してから再度コンパイル。
(set CLASSPATH=でCLASSPATHを無効にできる。環境変数の一覧はprintenvで見れる。あ、でもcygwin入れてるからもしかしたらwindows環境でダメな人もいるかも。[追記]windowsだとsetコマンドで一覧が見れる)

>set CLASSPATH=C:\poi-bin-3.9-20121203\poi-3.9\poi-3.9-20121203.jar

>javac HelloWorld.java
注意:HelloWorld.javaは推奨されないAPIを使用またはオーバーライドしています。
注意:詳細は、-Xlint:deprecationオプションを指定して再コンパイルしてください。

>javac HelloWorld.java -Xlint:deprecation
elloWorld.java:23: 警告:[deprecation] HSSFRowのcreateCell(short)は推奨されません
HSSFCell cell = row.createCell((short)0);
^
警告1個

警告はでたけど、とりあえずコンパイル成功。続いて実行。

>java HelloWorld
エラー: メイン・クラスHelloWorldが見つからなかったかロードできませんでした

実行エラー。指定したみずからのクラスが認識されていない。カレントディレクトリをクラスパスに追加。先頭に「.;」書いている。再度実行。

>set CLASSPATH=.;C:\tec\java\poi\bin\poi-bin-3.9-20121203\poi-3.9\poi-3.9-20121203.jar

c:\tec\java\ApachePOISample\code>java HelloWorld

実行成功。

javaのコマンドラインコンパイル&実行(javac,java)

・POIおすすめ本

Apache POI入門/ラトルズ
¥2,940
Amazon.co.jp


playのトランザクションについて。

トランザクションのコードを書くなら、Ebean,TxRunnableを使ってできる。
// トランザクションの実行
Ebean.execute(new TxRunnable() {}
参考 ・トランザクション処理クラスTxRunnable(@it)
それより簡単なのが、トランザクションを考慮したいメソッドの上に@Transactionalをつけるだけでできる。ちなみに@Transactionalは「play.db.ebean.Transactiona」「 com.avaje.ebean.annotation.Transactional」はできなかった。play.db.jpa.Transactionalもあるみたいだけど試してない。

参考
jpaの統合
playのmodelsについて(ebeanのモデル)。


play.db.ebean.Modelをextendsして作る。クラスに@Entityアノテーションをつける。これはjavax.persistence.Entity。フィールドのアノテーションは色々ある。それがそのままvalidationとして使える。

com.avaje.ebean.validationパッケージ
com.avaje.ebean.annotationパッケージ
play.data.validation.Constraintsパッケージ
javax.persistenceパッケージ

色々パッケージがあるから注意。例えば、@Length(min=500, max=500)は長さ500固定になる・・・たぶん。dbのtableのフィールドの型はvarchar500だけど、modelsを通すとchar500になるから注意。playで実行するとvalidationExceptionが表示される。

Execution exception
[ValidationException: validation failed for: models.T01Dic]