LastaFluteとSeasarとの違い
Seasar を Java8 でフォーク
- 徹底したスリム化
- 使わない機能削減、依存ライブラリ削減(依存jarを少なくシンプルに)
- デバッグしやすいように
- コンテナ内で発生したエラーのメッセージをDBFlute風に
- OGNL改めjs
- OGNLの代わりにJava同梱のNashornのJavaScriptエンジンを利用
- Java8 でコンパイル
- 少し速くなるかなぁ...
- ホットデプロイはそのまま
- 欠かせないホットデプロイは変わらず利用できるように
SAStruts を Java8 でフォーク
- Struts1外し
- 一番のネックだった Struts1 への依存のない SAStruts を
- commonsへの依存最小限
- 古いcommonsへの依存を外し、アプリで最新版使えるように
- 内部フォワードしない
- フォワードせずとも綺麗なURLを実現
- 設定ファイル削減
- 定型化された設定を組み込んで、アプリで管理する設定をシンプルに
- シンプルなコード
- RequestからActionが呼ばれるまでの道のりできるだけシンプルに
- Hibernate Validator
- バリデーションに Hibernate Validator を使う
- Java8 でコンパイル
- 少し速くなるかなぁ...
- 規約ベースはそのまま
- 欠かせない規約ベースURLマッピングは変わらず利用できるように
Lasta Diなら、の箇条書き
Lasta Di なら...
ポリシー
- とにかく起動を速く
- エラーメッセージ改善
アーキテクチャ
- コンパイルスコープの依存ライブラリが、Javassist, Slf4j, JTA のみ
- Servlet には依存していない (一部web系のものは、LastaFluteへ)
- Seasar の Logger は削除し、Slf4j に移行 (まだ移行中 at 2015/10/01)
- S2JDBC は完全削除
- Dxo や Beans.copy() は完全削除
- S2ClassBuilderを内包、redefinerという名前に
- dicon じゃなくて Di xml, 拡張子は .xml, DTD宣言も変わっている
- 組み込みの Di xml をリファクタリング、拡張しやすいように
- ☆フィールドインジェクションのみサポート (回避策あり)
Di xml の Expression
- Nashorn の JavaScript で Di xml の expression を表現 (若干自由度下がる)
- いざとなれば、パースエンジンを差し替えられる (OGNL や Groovy にすることもできる)
- 三項演算子で new をしても、@ResourceのprivateフィールドでDIできる
- include の condition で #exists('#path') で "もしあればinclude" ができる
事務的な話
- ガンガンリファクタリング (S2という言葉はLaに変更, 一部内部的なものはLdiというprefixを付けたり)
- 日本語のJavaDocは削除
- Genericは頑張って付けた
- Java8で増えたインターフェースのメソッドを実装 (一部空実装だが、特に問題ないと想定)
- エラーメッセージは英語
- エラーメッセージをDBFlute風に (ド派手エラー)
- 起動時のログで、Di xml の階層がわかるように
LastaFluteなら、の箇条書き
LastaFlute なら...
ポリシー
- 基本、トップページに書いてある通り (ですが、SAStrutsとの違いに焦点を当てるなら...)
- Interceptorをあまり使わない (ActionHookを使う)
- INとOUTは引数/戻り値で
- できるだけネイティヴ型がつかえるように (FormでIntegerやLocalDateなど)
アーキテクチャ
- デフォルトでは、Action は enhance されていない (起動スピードの向上)
- Form は DI コンポーネントではない、フレームワークが new するが、単なる new
- Struts1 は外している (一部クラスはfork)
- commons には依存していない
- Validator は Hibernate Validator
- jsPの機能は、lasta-taglib へ外だし
- ConnectionPoolのログ機能を大強化
- ログは、Slf4j
- Formでネイティヴ型を使えるように
- 配列プロパティでOutOfMemory攻撃対応