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では
 ServletEJBが同居できるので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



RubyJavaの共存
 JRubyすかwwwwwwww
 80/20.ほとんどのWebアプリはパフォーマンスも求められてない
 RailsアプリをWARとしてデプロイできる
 1.1RC2が最新版
 GoldSpikeでWARにするかGrizzlyでやる
 NetBeans


推薦
 Ruby&Rails
  Rubyを先に!

 Rails
  何か難しいと感じたときにはRailsを使うのが間違ってるかも。

 その他
  irb/consoleを使う
  Capistranoでデプロイ



ちっと期待はずれだなあ。



Mercurial

すまん、あんま書くことがない^^;


■The Future of Guice


雰囲気としてはとても好きな感じだった。

Guiceの現在と次バージョンであるGuice2.0についてざっくばらんに

語るイベント。ボブリーさんを始めてみたよ。

資料ないので、デジカメからおこしてあとでかく。