→Java関連

→JSF(JavaServer Faces)関連

→Webアプリ開発

#contents


* 関連Web [#yc679f18]
-http://www.jboss.org/projects/
-http://seamframework.org/
-http://www.jboss.com/products/seam

-[[日本JBossユーザ・グループ>http://www.jbug.jp/cgi-bin/fswiki/wiki.cgi]]


*Document [#p9a27fcd]
-[[JBoss.org Community Documentation(英語)>http://www.jboss.org/docs/]]
--[[JBoss Application Server>http://www.jboss.org/jbossas/docs/]]
---[[Installation Guide>http://www.jboss.org/file-access/default/members/jbossas/freezone/docs/Installation_Guide/beta422/html/index.html]]
--[[JBoss IDE for Eclipse>http://www.jboss.org/jbosside/docs]]

--[[JBoss Seam>http://www.seamframework.org/Documentation]]
---[[JBoss Seam 1.2 API reference>http://docs.jboss.com/seam/1.2.1.GA/api/]]
---[[JBoss Seamドキュメント和訳>http://www.jbug.jp/trans/jboss-seam1.0.1GA/ja/html/index.html]]
---[[上記の英語版>http://docs.jboss.com/seam/1.2.1.GA/reference/en/html/]]

--[[RichFaces/Ajax4jsf>http://www.jboss.org/jbossrichfaces/docs]]
--[[JBoss EJB3>http://docs.jboss.org/ejb3]]
--[[Hibernate>http://www.hibernate.org/5.html]]
--JBoss Rules(Drools)
--JBoss jBPM

-[[JBoss Developer Studio Document>http://www.redhat.com/developer_studio/guides/index.html]]

-[[JBoss ホワイトペーパー(日本語)>http://www.jp.redhat.com/jboss/docs/wp/]]
--Seamチュートリアル(上・下)はJBoss Developer Studioを手っ取り早く覚えたい人にはおすすめ

-[[JBoss RichFaces>http://www.jboss.org/jbossrichfaces/docs/]]

-[[JBoss Seam FAQ@JBoss.org>http://www.jboss.org/jbossseam/faq/index.html]]

-[[JBoss Seam FAQ@SeamFramework.org>http://www.seamframework.org/Documentation/FAQsOverview]]

-[[KnowledgeBase Overview>http://www.seamframework.org/Documentation/KnowledgeBaseOverview]]

-[[Link to External Seam Documentation@SeamFramework.org>http://www.seamframework.org/Documentation/LinksToExternalSeamDocumentation]]



*Download [#ad1275a6]
-[[JBoss Developer Studio(有料)の導入>http://www26.atwiki.jp/memotech/pages/17.html]]

-[[JBoss Seam Download>http://www.seamframework.org/Download]]
-[[JBoss Application Server download>http://www.jboss.org/jbossas/downloads/]]

-[[JBoss Tools Project>http://www.jboss.org/tools/]]

-[[JBoss Application Platform>http://www.jboss.com/products/platforms/application]]
--JBoss ASの有料版?


*入門・紹介系記事 [#f668be40]
-[[JBoss が Developer Studioと1.0とTools2.0を展開@InfoQ>http://www.infoq.com/jp/news/2008/01/jboss-dev-studio]]

-[[JBoss Seamの導入@InfoQ>http://www.infoq.com/jp/articles/jboss-seam]]
--Seam Webアプリケーションの記述は、概念的に非常に単純である。次のコンポーネントをコーディングするだけでよい。:
---エンティティオブジェクトはデータモデルを表す。エンティティオブジェクトは、Java Persistence API(JPA、別名EJB3永続性)またはHibernate POJOでエンティティBeanになり得る。関係データベーステーブルに自動的にマッピングされる。
---JSF Webページはユーザーインターフェイスを表示する。ページはフォームを通じてユーザー入力をキャプチャし、結果データを表示する。フォームフィールドとデータ表示テーブルはエンティティBeanまたはエンティティBeanの集合体にマッピングされる。
---EJB3 セッションBeanまたはアノテーション付きSeam POJOはJSF WebページのUIイベントハンドラとして機能する。これらは、エンティティBeanでカプセル化されたユーザー入力を処理し、次のステップ(またはページ)での表示のためのデータオブジェクトを生成する。

-[[JBoss勉強会発表資料>http://www.jbug.jp/cgi-bin/fswiki/wiki.cgi?page=JBoss%CA%D9%B6%AF%B2%F1%C8%AF%C9%BD%BB%F1%CE%C1]]

-[[Webの上のポジョをステートフルにつなぐJBoss Seam>http://www.atmarkit.co.jp/fjava/special/jbossseam/jbossseam_1.html]]

-[[JBoss Seam - EJB3.0時代のフレームワークを使いこなす>http://journal.mycom.co.jp/special/2006/seam/index.html]]
--JBoss Seamは、Java EE 5アプリケーションにおいてEJB 3.0(Enterprise Java Beans 3.0)のコンポーネントモデルとJSF(JavaServer Faces)のコンポーネントモデルをシームレスに統合するためのWebアプリケーションフレームワークである。
--JBoss Eclipse IDEというプラグインが提供されている
--Managed BeanとしてEJBコンポーネントを扱える(Seamコンポーネント)


*特徴 [#be78a306]
-双方向のDI(バイジェクション)
--Expression Languageを使って式の値をインジェクトも可能
--コンポーネント間の参照はコンテキストを介して間接的に行われる
--@Inアノテーションでメソッド実行前にコンテキストからオブジェクトを取得
--@Outアノテーションでメソッド実行後にコンテキストにオブジェクトを設定
--アプリケーションの実行中に何度でも注入が行われる
--参考:[[バイジェクションとコンテキスト>http://www.ne.jp/asahi/davinci/code/jboss/seam/index4.html]]

-7つのスコープ(ここでいうスコープとは、コンテキストにセットした変数が生きている期間=範囲のこと)
--Application アプリケーションの開始から終了まで
--Business Process ビジネス・プロセスの開始から終了まで
--Session セッションの開始から終了まで
--Conversation 対話の開始から終了まで
---対話とは、@Beginをつけたメソッドから@Endをつけたメソッドまで
---一つのPCで複数のWebブラウザを立ち上げた場合、ブラウザの状態を別々に管理できる
--Event リクエストの開始から終了まで
--Page ページの開始から終了まで
--Stateless 状態を管理しない

-フォームとEJBの結びつきはアノテーションで設定するスコープとNameで決まる模様。
--1スコープ内にひとつの名前の変数しか持てない。
--ELで参照されたときに範囲の短いスコープから順に名前を検索していくようだ


*JBoss Application Serverのzipファイルからのインストール手順 [#s26ff22d]
-適当な場所にZIPを展開
-環境変数JAVA_HOMEにJavaのルートをセット
  例)C:\Program Files\Java\jdk1.5.0_16
-%JAVA_HOME%\jre\bin にパスを切る
-サーバの起動
--<zipを展開したディレクトリ>\bin\run.batを実行する
--注意:このときポート 8080を使うアプリ(例えばPOPFileとか)を起動していたら終了させておくこと
-起動したら以下の場所をWebブラウザでアクセスしてみる
	http://localhost:8080/
-"JBoss Online Resouces" というページが表示されたら成功
-失敗したら <zipを展開したディレクトリ>\server\default\log にあるserver.logを見てみるべし。例外が出てるところに原因が出ている
-起動したサーバを終了させるときはコンソールからCtrl+Cを押すと良い模様(もっと正規の方法があるのかも?)

**アンインストール [#d7eefea2]
-zipからインストールした場合は単に解凍したディレクトリをまるごと削除すればいい


*Tips [#c03502ff]
-各ページのURLの拡張子を.seamから.htmlに変えるには
--web.xmlのservlet-mappingの下のurl-patternタグで設定する
 <url-mapping>*.seam</url-mapping>
            ↓
 <url-mapping>*.html</url-mapping>
これはseamの仕様というよりJavaEEの仕様

-[[jboss-seam.jarがデプロイされない>http://d.hatena.ne.jp/re_shikajiro/20080620/1213977721]]
--JBossToolsで作ったearをデプロイしたら、earプロジェクトのjboss-seam.jarがデプロイされないよ!
--色々調べたら、以下の記述を消せばいいみたいだよ。
 application.xmlの
 
 <module>
 	<ejb>jboss-seam.jar</ejb>
 </module>

-[[Seamの認証機構>http://www.jbug.jp/trans/jboss-seam1.2.1GA/ja/html/security.html]]
--ELにidentity.loginなどの内臓クラスのメソッドが指定されているのに、別のクラスで自分で作ったまったく別名のメソッド、例えばAuthenticator.authenticate()などで対応されるという不思議な動きをする。
--自分で作った認証メソッドとidentity.loginの対応付けはcomponents.xml内で指定されている。((こういう仕組みって用意した側は便利なつもりなのかもしれないが非常に気持ち悪いのは自分だけだろうか…なぜなら、htmlソースのELで読んでいるidentity.loginからAuthenticator.authenticate()へどうやってたどり着けばいいか、components.xmlのことを知っていない限り直感的にはわからないから。))
 <security:identity authenticate-method="#{authenticator.authenticate}"/>

-com.sun.facelets.compiler.TagLibraryConfig loadImplicit というエラーについて
--http://www.andromda.org/jira/browse/JSF-30
--One annoying thing about using Facelets with SEAM/EJB3/JBoss is that there are some strange 'ERROR' log messages that happen when the first page is hit. --They look something like this:
 07:38:26,843 ERROR \[STDERR\] Nov 29, 2006 7:38:26 AM  
 com.sun.facelets.compiler.TagLibraryConfig loadImplicit
 INFO: Added Library from: jar:file:/C:/java/jboss-4.0.5.GA-ejb3/server/default
 /./tmp/deploy/tmp64384starter1.ear-contents/webapp-exp.war/WEB-INF/lib/jsf- 
 facelets.jar!/META-INF/jsf-ui.taglib.xml
--So, I've finally figured out what this means. Basically, the Facelets compiler is emitting the message to System.err, which JBoss's Log4J setup interprets as an error level log message. I think that's a reasonable assumption to make with Log4J.
--If java.util.logging were a pet dog I'd say: Bad logging! Bad! Nnno!
--The folks at Sun should know better than to write to System.err, especially if the message is not an error. Perhaps the JDK logging can be tweaked to make this work better, but still... highly annoying.
--Solution #1
--Ignore the messages. They are only errors because ConsoleHandler writes log messages to System.err (dodgy) and the JBoss logging framework interprets them as errors, redirecting the messages as ERROR level (understandable).
--Solution #2
--Use a different logging handler by using a different java.util.logging (a.k.a. JULI) configuration.
--Solution #3
--Experimental - Use a ContextListener to reconfigure JULI to send logging messages to Log4J. :)

-Stateful Session Beanには Removeメソッドが必要
--メソッド名がRemoveでないといけないというわけではない(もちろんそうしてもいいが)
--@Statefulをつけたクラスには@Removeアノテーションをつけたメソッドを最低一つ用意する
--そのBeanを廃棄しても良い状態になったら(Seamへの通知として)このメソッドを呼ぶ
--Seam側ではそれを目印としてBeanに割り当てた資源を回収する

-@Factoryアノテーション
--@Factory(Name)というアノテーションをつけたメソッドは、そのNameのオブジェクトが最初に参照されたときに呼ばれる。
--つまりデータモデルの初期化機構=Factory Methodとして使える
--参考:http://docs.jboss.com/seam/1.2.1.GA/api/org/jboss/seam/annotations/Factory.html



*examples下にあるサンプルについて [#w148ff93]
-ビルド手順などはこちら
--http://www.jbug.jp/trans/jboss-seam1.0.1GA/ja/html/tutorial.html#try-examples

-Seamのディレクトリにあるbuild.propertiesに jboss.homeの行を追加するときに、ディレクトリの区切りの円マークは二重にする必要があるようだ。readme.txtにはこのことが書いてないので注意(これってJavaの人には常識なの?)
 正しい記述例
 jboss.home = D:\\MyData\\java\\jboss-AS4.2.3.GA
 
 これではダメです
 jboss.home = D:\MyData\java\jboss-AS4.2.3.GA

-JBoss Seamのbookingというサンプルをant(ビルド→deploy)してみたらエラー(下記)が発生した
 2008-09-15 01:10:39,901 ERROR [org.apache.catalina.core.ContainerBase.
 [jboss.web].[localhost].[/seam-booking]] クラス 
 org.apache.myfaces.webapp.StartupServletContextListener の
 アプリケーションリスナの設定中にエラーが発生しました
--これはJBoss ASのバージョンが4.2.3であるのに対し、使ったサンプルが Seam 1.2.1GAのものであったためらしい。
---参考にしたblog記事:http://d.hatena.ne.jp/fusatsukatsujin/20080316
--Seamの2.0.3CR1を落としてきてbooking exampleをantしたら今度は無事に動いた

-@Factoryアノテーション
--@Factory(Name)というアノテーションをつけたメソッドは、そのNameのオブジェクトが最初に参照されたときに呼ばれる。
--つまりデータモデルの初期化機構=Factory Methodとして使える
--参考:http://docs.jboss.com/seam/1.2.1.GA/api/org/jboss/seam/annotations/Factory.html


*認証の仕組み [#v11e84f7]
-[[Seamの認証機構>http://www.jbug.jp/trans/jboss-seam1.2.1GA/ja/html/security.html]]
--ELにidentity.loginなどの内臓クラスのメソッドが指定されているのに、別のクラスで自分で作ったまったく別名のメソッド、例えばAuthenticator.authenticate()などで対応されるという不思議な動きをする。
--自分で作った認証メソッドとidentity.loginの対応付けはcomponents.xml内で指定されている。((こういう仕組みって用意した側は便利なつもりなのかもしれないが非常に気持ち悪いのは自分だけだろうか…なぜなら、htmlソースのELで読んでいるidentity.loginからAuthenticator.authenticate()へどうやってたどり着けばいいか、components.xmlのことを知っていない限り直感的にはわからないから。))
 <security:identity authenticate-method="#{authenticator.authenticate}"/>

-ページのアクセス制限
--ページ単位のアクセスの設定は pages.xml で行う
 <page view-id="/hoge/*">
     <restrict>#{identity.loggedIn}</restrict>
 </page>
--ELの評価がtrueならページが表示される(はず。未確認)
--falseなら NotLoggedInExceptionがとぶ

--ログインの他にロールも必要ならこういう感じになる
 <page view-id="/hoge/*">
     <restrict>#{identity.loggedIn and s:hasRole('ADMIN')}</restrict>
 </page>

--login-required属性という手もある
 <page view-id="/hoge/*" login-required="true" />

-NotLoggedInExceptionがとんだらどうするかの設定
--pages.xmlのexceptionタグで定義する
 <exception class="org.jboss.seam.security.NotLoggedInException">
    <redirect view-id="/login.xhtml">
       <message>ログインしていないと閲覧できません</message>
    </redirect>
 </exception>
--上記ではloginのページにリダイレクトしてメッセージを出している


*RichFaces [#c5415640]
-RichFaces is an open source framework that adds Ajax capability into existing JSF applications without resorting to JavaScript.


*EL(Expression Language) [#s51df338]
-JSFのビューからの指定方法
--#{コンポーネント名.プロパティ名}
--#{コンポーネント名.メソッド名}


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS