T2@java-ja#toyama

50 %
50 %
Information about T2@java-ja#toyama
Technology

Published on April 6, 2009

Author: yone098

Source: slideshare.net

Description

T2でつなごう~つなぐつながるWebフレームワークPHPからJavaへ行こうする向け機能も~

T2でつなごう! ~つなぐつながるWebフレームワーク PHPからJavaへ移行する人向け機能も~ 富山勉強会 2009/04/04

自己紹介 名前 米林 正明 ID id:yone098 所属 株式会社Abby 代表取締役社長

自己紹介 出身

自己紹介 出身 富山

自己紹介 好きです 富山

自己紹介 カターレ富山 初勝利おめでと う!!!!!

一句 富山県 雷鳥 立山 ますのすし❤

Agenda T2の概要 T2の仕組み T2のスタイル T2の目指す所 機能紹介 DIコンテナ非依存 今後の展開 デモ

T2 - The WEB Connector - T2の概要

Webを取り巻く環境の進化 クライアント HTML Flex3 Ajax Param XML AMF3 フレームワーク Struts Struts2 BlazeDS サーバ Action Action POJO Support

Webを取り巻く環境 無理なが 無理なが

T2とは T2とは シンプルなWebフレームワーク フィルタ指向 アノテーションベース テーマ「つなぐ・つながる」 ユーザと開発者を 実案件と楽しさを あらゆるクライアントとサーバアプリを クライアントとユーザーコードの仲介役

T2とは T2とは クライアント側は自由に選択可能 フォームのサブミット Ajaxリクエスト/REST Flex/AIR/Silverlightなどのリッチクライアント Webサービス 統一したプログラミングモデルの提供 クライアントがどうであっても常に同じように作れ る。作り方が変わらない 一貫したスキルセットで開発可能

T2とは つなぐ つながる

T2でつなごう! クライアント T2! サーバ

T2の仕組み T2の仕組み

T2の基本的な仕組み フィルタベースのWebフレームワーク URLとJavaオブジェクト(POJO)をマッチング アノテーションでマッチング マッチしたPOJOから適切なメソッドを選択 メソッドを実行 行き先と遷移方法を指定するNavigationインタ フェースの実装を返す T2がそれに従って遷移する テンプレートエンジンやレンダリングは任意で指定 JSP、ZPT、Mayaaなんでも可能

T2の基本的な仕組み リクエストURLと と リクエスト リクエスト がマッチ? POJOがマッチ? マッチした マッチしたPOJOのメソッド した の マッチ? とマッチ? 対象メソッドの 対象メソッドの実行 メソッド Navigationによる次の遷 による次 による レスポンス 移先と方法の 移先と方法の決定 ブラウザ

T2 - The WEB Connector - T2のスタイル

T2のスタイル アノテーションドリブン エントリーポイントのPOJOにアノテーション付与 エントリーポイントの分かりやすさ重視 規約とアノテーションを適切に利用 @GET サーバ @ActionPath(“/hoge”) @POST

T2のスタイル 基本はステートレス

T2のスタイル 基本はステートレス 特定のコンテナへ依存しない コンテナなくて コンテナなくて もOK

T2のスタイル ユーザーに介入してほしい コアはシンプルに。 エクステンションで便利機能を提供 プロジェクトごとに必要な機能を作るのも簡単 ユーザが制御可能だと自信をもって言え 制御可能だと自信をもって言 制御可能だと自信をもって る事がとても重要。 そのための徹底的なシンプルさ。

T2とは つなぐ つながる

T2 - The WEB Connector - T2の目指す所

T2の目指す所 マルチビューをさばける 過渡期でも使える 依存が少ない ユーザーが支配出来る・やりすぎない Webクライアントの自由度を妨げない Formサブミット リッチクライアント Ajax Webサービス

T2 - The WEB Connector - 機能紹介

T2 - The WEB Connector - リクエストとPOJOの マッピング

T2の基本的な仕組み リクエストURLと と リクエスト リクエスト がマッチ? POJOがマッチ? マッチした マッチしたPOJOのメソッド した の マッチ? とマッチ? 対象メソッドの 対象メソッドの実行 メソッド Navigationによる次の遷 による次 による レスポンス 移先と方法の 移先と方法の決定 ブラウザ

URLとPageのマッピング STEP1:@Pageでクラス特定 でクラス特定 http://yoursite.com/t2app/hello/world @Page(“/hello”) public class MyHello { …

T2 - The WEB Connector - リクエスト内容と アクションメソッドの マッピング

T2の基本的な仕組み リクエストURLと と リクエスト リクエスト がマッチ? POJOがマッチ? マッチした マッチしたPOJOのメソッド した の マッチ? とマッチ? 対象メソッドの 対象メソッドの実行 メソッド Navigationによる次の遷 による次 による レスポンス 移先と方法の 移先と方法の決定 ブラウザ

基本機能 STEP2:メソッドアノテーションでメソッド特定 2 メソッドアノテーションでメソッド特定 メソッドアノテーション http://yoursite.com/t2app/hello/world @Page(“/hello”) public class MyHello { @GET @ActionPath(“/world”) public Navigation helloworld(){ …

メソッド特定方法 のリクエストで @GET GETのリクエストで かつ のパスの @ActionPath(“/world”) /worldのパスの場合 public Navigation helloworld(){ … 全マッチの場合、呼び出される。 マッチの場合、 される。

メソッドアノテーション @GET,@POST @ActionPath @ActionParam リクエストパラメータのkey key-value指定も可能 @Ajax @Amf (0.6から) @Default

アノテーションマッチ 複数のメソッドがマッチした場合 たくさんアノテーションがマッチした方を優先 同じ数のアノテーションがマッチした場合 先に見つかったほうを使用 マッチするのがなかった場合 @Defaultがついたメソッドを呼ぶ @Defaultつきがない場合、エラー

メソッド引数特定方法 引数のアノテーションを見て、適切なコン ポーネントをインジェクト @RequestParam @RequestHeader @SessionAttr @Upload @Form @Index @Var

メソッド引数特定方法 引数の型を見て、インジェクト HttpServletRequest, HttpServletResponse HttpSession ServletContext Cookie/Cookie[] WebContext Request, Response UploadFile ErrorInfo

メソッド引数特定方法 @ActionPath(“/world/{id}”) public Navigation helloworld( HttpSession session, @Var(“id”) String id, @RequestParam(“name”) String name){ …

T2とは つなぐ つながる

phpとつながる PHPでの開発 5年やってます

phpとつながる PHPといえば

phpとつながる $_GET $_POST $_SESSION $_FILES

phpとつながる $_GET[“arg1”] $_POST[“arg2”] $_SESSION[“name”] $_FILES[“sample”]

phpとつながる わかりやすい

phpとつながる PHPを知ってる人にJavaを教えると 「Javaはクラス名長い><」 「Javaはメソッド名長くない?><」 「HttpServletRequestとか何?><」 「$_POST[‘arg’]で取れないの><」

phpとつながる PHPを知ってる人にJavaを教えたら 「Javaはクラス名長い><」 「Javaはメソッド名長くない?><」 「HttpServletRequestとか何?><」 「$_POST[‘arg’]で取れないの><」 ごもっとも

一句 無いのなら 作ってしまおう $_POST

PHPとつながる public class $_POST { public static <T> T get(String key) { T ret = null; String[] params = WebContextUtil.getRequest().getParameters(key); if (params != null && params.length == 1) { ret = (T) params[0]; } else { ret = (T) params; } return ret; } }

PHPとつながる 使い方 PHP : $_POST[‘arg1’] Java : $_POST.get(‘arg1’) @POST public Navigation execute() { String value = $_POST.get(“arg1quot;); …. }

PHPとつながる 対応クラス $_POST $_GET $_SESSION $_FILES

PHPとつながる 使い方 $_FILES ファイルアップロードも熱い @POST @ActionParam public Navigation upload() { UploadFile file = $_FILES.get(‘sample’); logger.debug(quot;file name: {}, size:{}quot;, file.getName(), file.getSize()); …. }

PHPとつながる 使い方 sampleのlikephpを参照 手軽に試す方法 t2-samplesをチェックアウト htmlを作成 対応するPageクラスで$_POST, $_FILES, $_SESSION, $_GETを実際に使ってみる

PHPとつながる 今後 $_ENVやvar_dump関数を提供もしくは作って ください 狙い PHPに記述が似ててすぐ動いて嬉しい $_POSTってどうなってるの? そのままソースを追う事によりJavaに興味を持 ちつつHttpServletRequestの理解 最後は自分で勉強することが大事 $_ENVを作ることにより理解も深まる

T2とは つなぐ つながる

T2 - The WEB Connector - レスポンス

T2の基本的な仕組み リクエストURLと と リクエスト リクエスト がマッチ? POJOがマッチ? マッチした マッチしたPOJOのメソッド した の マッチ? とマッチ? 対象メソッドの 対象メソッドの実行 メソッド Navigationによる次の遷 による次 による レスポンス 移先と方法の 移先と方法の決定 ブラウザ

レスポンス 戻り値として、Navigationインターフェースを 実装したクラスのインスタンスを返す Forward(フォワードする) Redirect(リダイレクトする) SimpleText(テキストデータを返す) Direct(ファイルなどを直接書き込む) Json(JSONにして返す) NoOperation(何もしない) PassThrough(次のServlet/Filterに委譲)

レスポンス に //JSPにForward @ActionPath(“/world/{id}”) public Navigation helloworld(){ return Forward.to(“/jsp/hoge.jsp”); } //画像ファイルを返す 画像ファイルを 画像ファイル @ActionPath(“/worldImage”) public Navigation helloworldImage(){ File image = new File(“world.png”); return Direct.from(image); }

レスポンス マルチビューデモ Applet->T2 JavaFX->T2

T2 - The WEB Connector - DIコンテナ非依存

DIコンテナ非依存 T2は特定のDIコンテナなどのフレーム ワークに依存しない 単体でも動作可能 主要DIコンテナとも連携可能 アダプタ機能を配布

DIコンテナ非依存 T2が動作するDIコンテナ Guice Spring Lucy

DIコンテナ非依存 今日は 今日は ひがさん きとるにか

DIコンテナ非依存 君 Seasar君 どこ行ってしもたんや… どこ行ってしもたんや

DIコンテナ非依存 T2が動作するDIコンテナ Seasar2 あるよ! あるよ! Guice Spring Lucy

DIコンテナ非依存 今日は 今日は ひがさん Slim3 メインやないか メインやないか

DIコンテナ非依存 Slim3 どこ行ってしもたんや… どこ行ってしもたんや

DIコンテナ非依存 T2が動作するDIコンテナ Seasar2 未検証>< 未検証>< ? Slim3? Guice Spring Lucy

DIコンテナ非依存 環境構築~Seasar2編~ 参照 t2-employee 構成 S2.4 + S2Dao

DIコンテナ非依存 作成設定ファイル~Seasar2編~ aop.dicon app.dicon dao.dicon jdbc.dicon

DIコンテナ非依存 web.xml~Seasar2編~ <filter> <filter-name>t2</filter-name> <filter-class>org.t2framework.filter.T2Filter </filter-class> <init-param> <param-name>t2.rootpackage</param-name> <param-value>examples.employee.page</param-value> </init-param> <init-param> <param-name>t2.container.adapter</param-name> <param-value>org.t2framework.plugins.container.Seasar2Adapter</param-value> </init-param> <init-param> <param-name>t2.eagerload</param-name> <param-value>true</param-value> </init-param> </filter>

DIコンテナ非依存 Pageクラス~Seasar2編~ @RequestScope @Page(quot;loginquot;) public class LoginPage

DIコンテナ非依存 PageクラスDI~Seasar2編~ protected FooService fooService; @Binding(bindingType = BindingType.MUST) public void setFooService(FooService fooService) { this.fooService = fooService; }

DIコンテナ非依存 環境構築~Guice編~ 参照 t2-guice 構成 Guice + JPA

DIコンテナ非依存 作成設定ファイル~Guice編~ persistence.xml ※Guice用のモジュール(Java で)

DIコンテナ非依存 web.xml~Guice編~ <filter> <filter-name>t2</filter-name> <filter-class>org.t2framework.t2.filter.T2Filter</filter-class> <init-param> <param-name>t2.rootpackage</param-name> <param-value>org.t2framework.samples.guice.page</param-value> </init-param> <init-param> <param-name>t2.container.adapter</param-name> <param-value>org.t2framework.t2.adapter.GuiceAdapter</param-value> </init-param> <init-param> <param-name>t2.exclude-resources</param-name> <param-value>css, js</param-value> </init-param> </filter>

DIコンテナ非依存 Pageクラス~Guice編~ @RequestScoped @Page(quot;addquot;) public class AddPage

DIコンテナ非依存 PageクラスDI~Guice編~ @Inject private CalcService calcService; @Inject @RequestParameters Map<String, String[]> params;

DIコンテナ非依存 環境構築~Spring編~ 参照 t2-spring 構成 Spring2.5 + iBatis

DIコンテナ非依存 作成設定ファイル~Spring編~ applicationContext.xml dao-ibatis.xml sql-map-config.xml XxxSqlMap.xml

DIコンテナ非依存 web.xml~Spring編~ <filter> <filter-name>t2</filter-name> <filter-class>org.t2framework.t2.filter.T2Filter</filter-class> <init-param> <param-name>t2.rootpackage</param-name> <param-value>org.t2framework.samples.spring.page</param-value> </init-param> <init-param> <param-name>t2.config</param-name> <param-value>applicationContext.xml</param-value> </init-param> <init-param> <param-name>t2.container.adapter</param-name> <param-value>org.t2framework.t2.adapter.SpringAdapter</param-value> </init-param> <init-param> <param-name>t2.eagerload</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>t2.exclude-resources</param-name> <param-value>css, js</param-value> </init-param> </filter>

DIコンテナ非依存 Pageクラス~Spring編~ @Component @Page(quot;addquot;) public class AddPage

DIコンテナ非依存 PageクラスDI~Spring編~ private CalcService calcService; @Autowired(required=true) public void setCalcService( CalcService calcService) { this.calcService = calcService; }

DIコンテナ非依存 動作確認アプリケーションサーバ Tomcat5x/6x JBoss4x/5x Jetty6x WebLogic10x その他いろいろ… Yonexで確認

T2 - The WEB Connector - T2の拡張性

拡張性の高さ ユーザが制御可能=拡張性が高い メインフローの順序・実装 ActionFilter 例外ハンドリング部分 ExceptionHandler プラグイン機能による機能追加 Pluginによって処理を差し込める

T2 - The WEB Connector - 今後の展望

今後の展望 バージョン0.6 Flex3対応 どのフレームワークよりも簡単に Flex/AIRと通信できる AMF3の実装 バージョン0.7 Atom、RSS、Webサービス対応

T2プロジェクトについて T2プロジェクトとは Apacheライセンスのプロジェクト Javaだけに限っていない 本当に現場で使えるものを作る 自分達が実際に使い、コミュニティに還元し、 洗練させていく ユーザを大事にし、継続してお互い成長する 楽しく開発・コミュニケーション!

色々なプロダクト Commons 共通ユーティリティフレームワーク Commons-ext JTAトランザクション実装、DataSet API Lucy ライトウェイトDIコンテナ AOP機能 Daisy(開発中) 2waySQLフレームワーク 薄いJDBCラッパー

その他プロダクト Yonex(仮) Hyper Integration Test Suite レポーティング とかも 提供したい!

プロジェクトリソース サイト http://code.google.com/p/t-2/ リリースアーカイブ、ドキュメント、ソース コード メーリングリスト T2-users http://groups.google.com/group/t2-users 開発の話、仕様の話、なんでもOK。

T2 - The WEB Connector - まとめ

まとめ T2はマルチビュー対応なシンプルWebフ レームワーク あらゆるクライアントをつなぎます! が まだまだ発展途上。ご意見ください!

T2 - The WEB Connector - エンドロール

T2 - The WEB Connector - 出演

T2 - The WEB Connector - テツ

T2 - The WEB Connector - テツ

T2 - The WEB Connector - テツ

T2 - The WEB Connector - イーダ

T2 - The WEB Connector -

T2 - The WEB Connector - イーダ

T2 - The WEB Connector - イーダ

T2 - The WEB Connector -

T2 - The WEB Connector - イーダ

T2 - The WEB Connector - イーダ

T2 - The WEB Connector - イーダ

T2 - The WEB Connector -

T2 - The WEB Connector - イーダ

T2 - The WEB Connector - designed by カネウチカズコ

T2 - The WEB Connector - コミッタ

T2 - The WEB Connector - 片山 暁雄

T2 - The WEB Connector -

T2 - The WEB Connector - 米林 正明

T2 - The WEB Connector -

T2 - The WEB Connector - 横田 健彦

T2 - The WEB Connector -

T2 - The WEB Connector - 大谷 晋平

T2 - The WEB Connector -

一句 おらっちゃ 富山人 富山、北陸 盛り上げよう (※字余り)

T2 - The WEB Connector - 御静聴ありがとうございました

Add a comment

Related presentations

Presentación que realice en el Evento Nacional de Gobierno Abierto, realizado los ...

In this presentation we will describe our experience developing with a highly dyna...

Presentation to the LITA Forum 7th November 2014 Albuquerque, NM

Un recorrido por los cambios que nos generará el wearabletech en el futuro

Um paralelo entre as novidades & mercado em Wearable Computing e Tecnologias Assis...

Microsoft finally joins the smartwatch and fitness tracker game by introducing the...