Cubby in Action

Similar documents
( ( ( )

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版   None

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

(Microsoft PowerPoint - ClickFramework.ppt [\214\335\212\267\203\202\201[\203h])

T2でつなごう! -つなぐつながるWebフレームワーク「T2」の紹介

S2DaoでもN:Nできます

PowerPoint Presentation

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測

intra-mart Accel Platform — IM-BloomMaker プログラミングガイド   初版  

untitled

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

Flex2とS2Flex2とAIR紹介

intra-mart WebPlatform/AppFramework

Dolteng Scaffoldに対する機能追加とマスタ-ディテールScaffoldの紹介

JUnit 概要 2015/4/16 版今泉俊幸 2015 bbreak Systems 1

JSFからのTeeda

Java演習(4) -- 変数と型 --

メディプロ1 Javaサーブレット補足資料.ppt

S2Wicketの紹介

新・明解Java入門

SpringSecurity

基本情報STEP UP演習Java対策

WTM2019SingleSignOn

IronPython による柔軟なゲーム開発 筑波大学 AmusementCreators

: : : TSTank 2

intra-mart im-J2EE Framework

intra-mart im-JavaEE Framework

Java言語 第1回

intra-mart WebPlatform/AppFramework

Java知識テスト問題

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV


Client client = ClientBuilder.newClient(); WebTarget webtarget = client.target(" " "); Invo

intra-mart Accel Platform

untitled

ゆみる は こうげきりょく が 2 あがった!

Microsoft Word - Android_SQLite講座_画面800×1280

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

早分かりS2Dao

Seasar.NET入門

ユニット・テストの概要

Microsoft PowerPoint - Lecture_3

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド

intra-mart WebPlatform/AppFramework

オブジェクト指向プログラミング・同演習 5月21日演習課題

サーブレット (Servlet) とは Web サーバ側で動作する Java プログラム 通常はapache 等のバックグラウンドで動作する Servletコンテナ上にアプリケーションを配置 代表的な Servlet コンテナ Apache Tomcat WebLogic WebSphere Gla

目次 第 1 部 第 2 世代 blanco Framework のご紹介 blanco Framework のご紹介 第 2 部 Eclipse 日本語化への取り組みについて 2

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

はじめに インフォマート API の呼び出しには OAuth2.0 による認証を受ける必要があります OAuth2.0 を使うことで インフォマート API を利用するサービスは インフォマートプラットフォーム ID( 1 以下 PFID) とパスワードを保存したり処理したりすることなく PFID

HTML/JSP/Servlet... 7 JSP... 7 Servlet Struts Struts Struts FormBean LoginForm

TestDesign for Web

Web Servlet/JSP JSP

intra-mart マスカット連携ガイド

03_さらなる開発生産性向上へ.pptx

2

intra-mart Accel Platform — 外部ソフトウェア接続モジュール 仕様書   第3版  

mazec テクニカルガイド第5版(Android版)

HTML Java Tips dp8t-asm/java/tips/ Apache Tomcat Java if else f

intra-mart WebPlatform/AppFramework

前ページからの続き // テキストボックス02 id 属性で取得 // id 属性で取得する場合は一意に決まるので 何番目かの指定は不要 var textbox02elem = document.getelementbyid("text_box02_id"); if ("001" == statee

java_servlet2_見本

Transcription:

Building Web Applications With the Leading Java Framework Cubby IN ACTION

アジェンダ Cubby in "real" service 実サービスでの Cubby の利用例 Here Comes Cubby 2.0!! Cubby 2.0 での新機能紹介 2

自己紹介 名前 : 染田貴志 o http://d.hatena.ne.jp/tksmd/ 所属 : 株式会社チョイスタジオ o http://www.choistudio.jp/ 3

自己紹介 名前 : 馬場保幸 o http://d.hatena.ne.jp/y-baba/ 所属 : 株式会社ヌーラボ o http://www.nulab.co.jp/ 4

Cubby in real Service 実稼働システムでカビーを使ってみた!

Cubby in "real" service Cubby の特徴 使い方のポイント 前半部まとめ 前半は 1.1 を前提でお話します 6

Cubby の特徴 Web アプリケーションフレームワーク シンプル & スモール Cool な URI をサポート JSP 2.0 Love! 7

Cubby の特徴 基本 Struts スタイル 必要最低限 求められる機能 o URL と記述したコードの結びつけ o リクエストパラメータのバインディング o 入力値のバリデーションの仕組み o ビューにおける値の出力補助 8

Cubby の特徴 Cubby がしないこと o Ajax な Javascript コードの動的生成 o Request/Session 以外のスコープ管理 o PDF や Excel などリッチな出力方式 o など 9

Cubby の特徴 CoolURI @Path("todo") public class ToDoAction extends Action{ // /todo/new public ActionResult new(){... public Integer id; // /todo/100 @Path("{id,[0-9]+") public ActionResult index(){ 10

使い方のポイント Action の設計 基本コンポーネントの拡張 o Validator を拡張 o ActionResult を拡張 秘密の機能 コンバータ 11

使い方のポイント Action の設計 o デフォルトの Action はほぼ何もしない o 汎用的な機能を持つ基底クラスを設計する Choistudy での例 o AbstractAction AbstractBasicAction AbstractPagerAction AbstractMobileAction etc Action は拡張して使うがよろし 12

使い方のポイント public abstract class AbstractPagerAction <T extends BasicSearchFormDto> extends Action { AbstractBasic // オフセットが指定されてきた場合のページの処理 public ActionResult page() {... // ソートキーが指定されてきた場合のページの処理 public ActionResult sort() {... public class DrillAction extends AbstractPagerAction<DrillSearchFormDto>{ // /drill/page?offset=... // /drill/sort?key=... 拡張するだけで基本 URL が作成 13

使い方のポイント 基本コンポーネントの拡張 o Validator の拡張 o 汎用バリデーション o Choistudy での利用例 ReferedValidator MultiRecordEmailValidator 14

使い方のポイント 汎用バリデーション public abstract class BaseValidationRules extends DefaultValidationRules { private static final RequiredValidator REQUIRED_VALIDATOR = new RequiredValidator(); protected Validator required() { return BaseValidationRules.REQUIRED_VALIDATOR; public ActionResult fail(string errorpage) { HttpServletRequest req = ThreadContext.getRequest(); if ("XMLHttpRequest".equals(req.getHeader("X- Requested-With"))) {... return new Json(result); return super.fail(errorpage); 15

使い方のポイント Referer に戻るバリデーション public class RefereredValidationRules extends DefaultValidationRules { @Override public ActionResult fail(string errorpage) { String referer = ChoistudyUtil.getInternalRefererPath(); if (referer!= null) { return new Redirect(referer); return super.fail(errorpage); どのページでも表示されるフォーム 16

使い方のポイント MultirecordEmailValidator public class MultiRecordEmailValidator implements ScalarFieldValidator { public void validate(validationcontext context, Object value) { List<String> list = ChoistudyUtil.splitUniq((String) value); for (String address : list) { String message = Messages.getText("valid.email", address); EmailValidator validator = new EmailValidator(message); validator.validate(context, address); 改行区切りで複数バリデーション! 17

使い方のポイント 基本コンポーネントの拡張 ( 続 ) o ActionResult を拡張する テンプレート (velocity,free marker) o Choistudy での利用例 JAXB 2.0 (Java6) を使った XML MobileRedirect 18

使い方のポイント JAXB 2.0 を使った XML public class Xml implements ActionResult { public void execute(...) throws Exception { JAXBContext ctx = JAXBContext.newInstance(bean.getClass()); Marshaller marshaller = ctx.createmarshaller(); response.setcharacterencoding(this.encoding); response.setcontenttype(...); final Writer writer = response.getwriter(); marshaller.marshal(bean, writer); writer.flush(); JSON/XML 出力スタイルの同一化 public class QuestionAction extends Action{ public ActionResult xml(){ QuestionDto dto =...; return new Xml(dto); 19

使い方のポイント 秘密の機能コンバータ o RequestParameter のエンティティの変換の仕組 /tksmd/entries/123 tksmd => Account 123 => Entry o Choistudy での利用例 QuestionConverter エンティティとパスのマッピングの効率化 20

使い方のポイント public class QuestionDtoConverter extends AbstractConverter { public QuestionService questionservice; public Object converttoobject(object value,...) { Integer questionid = Integer.parseInt(value.toString())); return questionservice.find(questionid); : public class QuestionAction extends Action { public QuestionDto questiondto; @Path({questionDto,[0-9]+) public ActionResult detauk() { return new Json(questionDto); 21

前半まとめ Cubby!= フルスタックフレームワーク 作りたいものとの間にギャップが そこが工夫のしどころ DaYo! 22

前半まとめ o あえていえば RESTfulWeb 時代において Struts を最解釈したフレームワーク 23

Here Comes Cubby 2.0! カビー 2.0 がやってきた! ヤァ! ヤァ! ヤァ!

New Feature Spring / Guice Integration o Seasar2 に加えて Spring Framework / Google Guice との統合 POJO Action o POJO によるアクションクラス JUnit4 o JUnit4 形式の単体テスト Validation with Oval o Oval によるアノテーションベースのバリデーション Improve of type conversion o リクエストパラメータ変換のためのコンバータを指定 o バリデーション時に型変換のエラーを検出 25

Spring / Guice Integration Cubby 1.1 Seasar 2.4 との組み合わせのみ Cubby 2.0 プラグイン機構の導入によって コンテナ部分の差し替えが可能に o Spring Framework 2.5+ o Google Guice 2.0+ o Seasar 2.4+ Maven Archetype も用意しているのでプロジェクトの作成が簡単 26

Cubby + Guice on GAE/J site: source: http://cubby-example.appspot.com/ https://www.seasar.org/svn/cubby/branches/2.0.x/cubbyapps/cubby-example-gae/ 27

POJO Action public class HelloAction { @Inject private FlashMap flash; @Inject private ActionErrors errors; public ActionResult index() { return new Forward("index.jsp"); 28

JUnit4 @Test public void index1() throws Exception { MockServletContext ctx = new MockServletContext(); ctx.addinitparameter( MODULE_INIT_PARAM_NAME, ApplicationModule.class.getName()); MockHttpServletRequest req = new MockHttpServletRequest(); req.setmethod("get"); req.setservletpath("/hello/"); MockHttpServletResponse res = new MockHttpServletResponse(); ActionResult result = CubbyRunner.processAction( ctx, req, res, new GuiceFilter()); CubbyAssert.assertPathEquals( Forward.class, "index.jsp", result); 29

Validation with Oval @RequestParameter public String text; @RequestParameter public String memo; public void initialize() { add("text", new RequiredValidator(), new MaxLengthValidator(10)); add("memo", new MaxLengthValidator(100)); @RequestParameter @NotNull @NotEmpty @MaxLength(10) public String text; @RequestParameter @MaxLength(100) public String memo; public void initialize() { add(new OvalValidationRule()); 30

Improvement of type conversion 1. バリデーション時に型変換のエラーを検出 o バリデータの記述がシンプルになります 2.@RequestParameter にコンバータを指定 o 入力されたデータをトリムするなど 入力値の加工に使えます 31

Improvement of type conversion 1. バリデーション時に型変換のエラーを検出 @RequestParameter public int age; @RequestParameter public Date startdate; public void initialize() { add("age", new NumberValidator()); add("startdate", new DateFormatValidator()); public void initialize() { add(new ConversionValidationRule()); 32

Improvement of type conversion 2. @RequestParameter にコンバータを指定 @RequestParameter(converter = TrimConverter.class) public String address; public class TrimConverter extends AbstractConverter { public Object converttoobject(object value, Class<?> objecttype, ConversionHelper helper) throws ConversionException { if (value == null) { return null; return value.tostring().trim(); 33

Plugin Mechanism プラグインを使うには o jar をクラスパスに追加するだけ どんなプラグインがある? o S2Container プラグイン cubby-s2.jar o Guice プラグイン cubby-guice.jar o Spring プラグイン cubby-spring.jar o Gson プラグイン cubby-gson.jar o Oval プラグイン cubby-oval.jar 34

Plugin Mechanism プラグインを作るには o Plugin インターフェイスを実装する 拡張ポイント リクエストの処理 アクションの実行 アクションリザルトの実行 サービスプロバイダの取得 o META- INF/service/org.seasar.cubby.plugin.Plugin にそのクラスの FQCN を書く 35

Roadmap 2009 Q2 Cubby 2.0.0 リリース 2009 Q3 Q4 Cubby 2.1 開発開始 Stable : バグフィックス Dev : 機能追加 36

ご清聴ありがとうございました カビじゃない 綺麗に作れる それ Cubby 米林一茶 37