|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|

Seamを使用したプロジェクトの作成

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

JBoss Seamを利用したプロジェクトの作成

JBoss Seamのセットアップはかなり煩雑です。
JSFとEJB3を統合する、というSeamのコンセプトからして、本格的なEARプロジェクトを作成する必要がある上、Seam独自の設定をいくつも施してあげなくてはなりません。

ただ、Seamの内部動作を推し量るためにはこれらの設定ファイルがどういう意味を持つのか知る必要があります。まずは頑張って一つ一つセットアップしていきましょう。

勉強会用Eclipseセットアップ

勉強会ではWTPプラグイン入りのEclipseを使用して、サンプルアプリケーションを作成しましょう。

ターゲットランタイムの設定

「ウィンドウ→設定→サーバー→インストール済みランタイム→追加」で、JBoss v4.0を指定してJBossインストールディレクトリを指定します。

MyNumberGuessEARプロジェクトの作成

  • 新規プロジェクト→J2EE→エンタープライズ・アプリケーション・プロジェクト
  • ターゲット・ランタイムにJBoss v4.0を指定する

MyNumberGuessEJBプロジェクト

新規プロジェクト→EJB→EJBプロジェクト
  • ターゲット・ランタイムにJBoss v4.0を指定する
  • 「EARにプロジェクトを追加」チェックボックスにチェックを入れ、「MyNumberGuessEAR」を指定する

MyNumberGuessWebプロジェクト(新規プロジェクト→Web→動的Webプロジェクト)

  • ターゲット・ランタイムにJBoss v4.0を指定する
  • 「EARにプロジェクトを追加」チェックボックスにチェックを入れ、「MyNumberGuessEAR」を指定する

web.xmlの設定

Seamを利用したWebアプリケーションが起動する際、Seamは様々な処理を行うため、リスナ(SeamListener)の登録が必要です。
<listener>
  <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
</listener>

また、以下のフィルタ(SeamRedirectFilter)を追加しておき、JSFのサーブレットが持つURLパターンと一致させておきます。
<filter>
  <filter-name>Seam Redirect Filter</filter-name>
  <filter-class>org.jboss.seam.servlet.SeamRedirectFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>Seam Redirect Filter</filter-name>
  <url-pattern>*.seam</url-pattern>
</filter-mapping>

JSF用の設定もいくつか必要なので、それらを全て追加したweb.xmlは以下のようになります(bookingサンプルから引用)。
<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4" 
   xmlns="http://java.sun.com/xml/ns/j2ee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
                       http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

   <!-- Seam -->
  
   <listener>
     <listener-class>
       org.jboss.seam.servlet.SeamListener
     </listener-class>
   </listener>

   <!-- Propagate conversations across redirects -->
   <filter>
     <filter-name>Seam Redirect Filter</filter-name>
     <filter-class>
       org.jboss.seam.servlet.SeamRedirectFilter
     </filter-class>
   </filter>
   
   <filter-mapping>
     <filter-name>Seam Redirect Filter</filter-name>
     <url-pattern>*.seam</url-pattern>
   </filter-mapping>

   <!-- JSF -->
   
   <context-param>
     <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
     <param-value>client</param-value>
   </context-param>

   <context-param>
     <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
     <param-value>.xhtml</param-value>
   </context-param>

   <context-param>
     <param-name>facelets.DEVELOPMENT</param-name>
     <param-value>true</param-value>
   </context-param>

   <servlet>
     <servlet-name>Faces Servlet</servlet-name>
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
   </servlet>

   <!-- Faces Servlet Mapping -->
   <servlet-mapping>
     <servlet-name>Faces Servlet</servlet-name>
     <url-pattern>*.seam</url-pattern>
   </servlet-mapping>

   <!-- MyFaces -->
   <listener>
     <listener-class>
       org.apache.myfaces.webapp.StartupServletContextListener
     </listener-class>
   </listener>

   <!-- JSF RI -->
   <!--
   <listener>
     <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
   </listener> 
   -->
</web-app>

WEB-INF/components.xmlの設定(jndiPattern)

WEB-INF/faces-config.xmlの設定(org.jboss.seam.jsf.SeamPhaseListener)

ejb-jar.xmlの設定(全てのセッションBeanにSeamInterceptorを付加)

<?xml version="1.0"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  metadata-complete="true" version="3.0" 
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                      http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">

persistence.xmlにデータソースの場所を指定