JavaOne2008 5日目 JavaOne3日目開催
■Servlet3.0
きました、Servlet3.0!
そのままメモはり。
JSR135
まだ決定していない事項も多い
新機能
プラガビリティ
EoD
非同期サポート
セキュリティ
- プラガビリティ
web.xml
単一のweb.xmlはつらいよねと。
modular web.xml。個別web.xmlをフレームワークごとに設定
META-INF/web.xmlで個別の設定をよめますよ。
web-fragments, servlets, filters
<web-fragment> <servlet> </servlet> ...... </web-fragment>
ServletContextの設定でServlet、Filterなどを足せる
初期化時のみ動的にServlet、URLマッピング、Filterを足せる
@ServletContextListener public class MyListener { contextInit(){ servletContext.addServlet(......); servletContext.addServletMapping("servlet", new String[]{"*"}); }
@Servlet(url-mapping="....") url-mapping必須 @GET/@POST/@PUT/@DELETEはJSR311のアノテーションを利用。えーー @HttpMethod
@Servlet(urlMapping={"/foo"}) public class SimpleSample { @GET public void get(HttpServletRequest req, HttpServletResponse res) { ..... } }
@ServletFilter @FilterMapping(urlPattern="/hoge") public class MyFilter { public void doFilter(HttpServletRequest req, HttpServletResponse res) { ..... } }
@ServletContextListener
- 非同期サポート
Cometや非同期プロキシ、Webサービスなどのサポート
ストリーミングやロングポーリングサポート
リクエストがsuspend可能に。
HttpServletRequest
void suspend(long timeout)
void resume()
void complete()
boolean isSuspended()
boolean isResumed()
boolean isTimeout()
ServletRequestListener
void requestSuspended(ServletRequestEvent e);
ServletResponse
void disable();
boolean isDisabled();
void enable();
- セキュリティ
コードでログイン・ログアウト
ServletRequestに強制的にログイン・ログアウトを追加
HttpServletRequest
HttpServletRequestWrapper
HttpSession
login method
HttpServletResponse
www-authenticate header
logout method
HttpSession
- その他新機能
HttpOnlyCookieサポート
クライアントスクリプトコードからCookieアクセスを防御する
セッショントラッキングクッキー
COOKIE、URL、SSL
ファイルアップロード
Container wide init-params
JAX-RS/JSF2.0への対応(必要であれば)
JavaEE6プロファイル
Webプロファイル(Tomcatプロファイル)
まだどうなるかよくわからないw
JavaEE6では
ServletとEJBが同居できるのでwarで簡単パッケージング
public reviewは今年夏。
参考実装はGlassFishで提供
・Converting (Large) Applications to OSGi
■Choosing a Java Base Web Framework: A Comparison
最近のWebフレームワーク
たくさんありすぎ
選ぶのが難しい
再利用不可能なコードが多くなる
Ajaxへのサポートが少ない
リクエストやセッションの永続化機能がない
ドキュメントが少ない
同じようなコードを書かなくてはいけない
統一的なイベントモデルがない
Webデザイナには難しい
アプリがでかくなると設定が難しくなる
テンプレート内はデバッグ不可
Viewをコントローラーとして使う
JSPの悪夢
テンプレートを覚えるのが大変
デプロイ
Criteria
ハローワールド
パフォーマンス
Filterベース、Servletベース?
View
テンプレート?JSP?Javaレンダリング?
デプロイまでの速度
開発速度
習熟速度
機能追加
アジャイル
バリデーション
Server/Client/Both
i18n
ドキュメンテーション
ブックマーカビリティ
スケーラビリティ
移行
私が必要なものはなに?
おいら、これで作れる?
アプリはどれくらいの規模?
どのように使われるか
変更はどれくらいはいるのか?
3層アーキテクチャ必要?
チームのサイズとコンピテンシーは?
Sweet Spots
どれもにフィットするものはない
シナリオによっては違うフレームワークになる
Viewオンリー
Writeオンリー
Both
インタラクティブ。CRM
Advanced Criteria
Ajaxサポート
integrateされてるのか、何もしないのか
View言語
EL
OGNLなど
コミュニティ
アクティブで継続的な開発
成熟度
プッシュベースかプルベース
3層サポート。SpringとHibernate
フレンドリーURL、URLマッピング
Client/Server JSサポート
どこかの会社がそのフレームワークを使っているか?
開発者が経験あるか?
ArcheTypeある?
Groovy/Grails
使用方法:View/Write
良い点
ホットデプロイ
シンプルな設定
クロージャー
SpringとHibernate連携
悪い点
おそい
Ajaxサポート:YES
View言語:Java
Push/Pull:Push
成熟度:まだまだ
Community:小さい
3層:YES
フレンドリーURL:なし
GWT
使用方法:インタラクティブ
良い点
シンプル
ビルドコンポーネントが豊富
mavenize
悪い点
CSSの制御がきつい
ビルドインコンポーネントがベーシックなものだけ
Java5/6サポートされてない
Ajaxサポート:YES
View言語:Java生成
Push/Pull:Pull
成熟度:まだまだ
Community:小さい
3層:NO
フレンドリーURL:あるけど、標準じゃない
Struts2
使用方法:View/Write、インタラクティブ
良い点
Ajaxサポート
Spring連携
POJO
フリーマーカー、Velocityサポート
悪い点
まだXML設定大変
マッピングをXMLで書く必要あり
public class LoginAction implements Preparable {
public LoginAction(LoginService service) {
this.service = service;
}
public String execute() {
return Action.SUCCESS;
}
public String login() {
service.login(un, pw);
return execute();
}
Ajaxサポート:YES
View言語:JSP、OGNL
Push/Pull:Push
成熟度:まだまだ
Community:中規模
3層:YES
フレンドリーURL:ない
Tapestry
使用方法:View/Write、インタラクティブ
良い点
HTMLテンプレート
Hotデプロイ
簡単な設定
Ajaxサポート
悪い点
ドキュメントに欲しい情報がない
メジャーバージョンごとに互換性はない
<!-- template code --> <div jwcid="@hyperic:MessagePanel" message="message"/> <input jwcid="@hyperic:InputField" fieldValue="userName" fieldTitle="message:userNameTitle" fieldLabel="message:userName"/> <a jwcid="@hyperic:Button" listener="listener:signinButtonListener" label="message:signInButton" enableKeyListener="true" />
//Java Controller public abstract class SignIn extends BasePage { @Persist() public abstract String getUserName(); public abstract void setUserName(String userName); public ILink signinButtonListener(IRequestCycle cycle) { //button click listener .... } }
Ajaxサポート:Extensive
View言語:OGNL、Prop
Push/Pull:Pull
成熟度:成熟
Community:大規模
3層:YES
フレンドリーURL:YES
Wicket
使用方法:インタラクティブ
良い点
HTMLテンプレート
すばらしいドキュメント
コンポーネントは拡張可能
全部Javaで!
悪い点
全部Javaで!
//Definition public class Login extends WebPage { public Login(){ add(loginPanel); } public void onSubmit(){ login(); setResponsePage(new HomePage()); } }
<wicket:panel><div wicket:id="login"> <div><span wicket:id="username"></span></div> <div><span wicket:id="password"></span></div> </div></wicket:panel> // Usage add(new LoginPanel("login", login); <span wicket:id="login"/>
Ajaxサポート:Extensive
View言語:OGNL
Push/Pull:Pull
成熟度:枯れてる
Community:中規模
3層:YES
フレンドリーURL:YES
■From Java to Ruby... and Back
背景・BigUniverse.com
20年以上の経験
2006年からRails
A World of Children Pictures Books
Ubuntu
Apache/Mongrel
Rails
MySQL
OpenLaszlo
DHTML/Ajax
Why We Choose Ruby
Railsのおかげ
1年以上の経験で結果として、Javaよりも生産性は高い
ビジネス面効果
言語
スタックアプリケーション
NO XML!
動的言語
No compilation(5年以内にコンパイルとかしないっしょ)
Railsの説明
MVC
ActionPack:Controllers&Views
ActionRecord:Model
ActiveMailer
Java&Rubyの比較
Javaのほうが早い
Loops、FileはJavaが早い
Socket、DBはほぼ同じ
http://visualpatterns.com/javaruby.php
RubyとJavaの共存
JRubyすかwwwwwwww
80/20.ほとんどのWebアプリはパフォーマンスも求められてない
RailsアプリをWARとしてデプロイできる
1.1RC2が最新版
GoldSpikeでWARにするかGrizzlyでやる
NetBeans
Rails
何か難しいと感じたときにはRailsを使うのが間違ってるかも。
その他
irb/consoleを使う
Capistranoでデプロイ
ちっと期待はずれだなあ。
すまん、あんま書くことがない^^;
■The Future of Guice
雰囲気としてはとても好きな感じだった。
Guiceの現在と次バージョンであるGuice2.0についてざっくばらんに
語るイベント。ボブリーさんを始めてみたよ。
資料ないので、デジカメからおこしてあとでかく。