JBoss Seam 2.0 を試してみる

以下の環境を使って JBoss Seam 2.0 を試してみる事にする。

  • JavaSE 6.0 Update 3
  • JBoss 4.2.2 GA
  • JBoss Seam 2.0.1 CR1

インストール

ダウンロードサイト からダウンロードした JBoss Seam 2.0.1 CR1 の zip ファイルを適当な場所に解凍し、環境変数 PATH に解凍先のパスを設定する。

>set PATH=C:\jboss-seam-2.0.1.CR1;%PATH%

環境設定

まずは、seam コマンドに setup を指定して環境設定を実施。

>seam setup

以下のような設定項目(一部)に値を設定する。

  • "Java Project workspace" に Seam プロジェクト用のディレクトリパスを指定
    • (例)c:\seam-projects
  • "JBoss home directory" に JBoss のホームディレクトリを指定
    • (例)c:\jboss-4.2.2.GA
  • "project name" にプロジェクト名を設定
    • (例)test1
  • "Java package name for your session beans" にセッションBean用のパッケージ名を設定
    • (例)test1.session
  • "Java package name for your session beans" にエンティティBean用のパッケージ名を設定
    • (例)test1.entity
  • "Java package name for your test cases" にテスト用のパッケージ名を設定
    • (例)test1.test
  • "kind of database" で DB の種類を設定
    • (例)hsql

プロジェクトの作成

下記コマンドを実行すると、環境設定の Java Project workspace で指定した場所にプロジェクト名のディレクトリとそのサブディレクトリ・ファイルが自動生成される。

>seam new-project

ここで、Groovy スクリプトを使用可能にするために、プロジェクトディレクトリ(例 c:\seam-projects\test1)内の build.properties ファイルに以下の設定を追加しておく。

groovy.present = true

アクションの追加

以下のコマンドを実行してアクションクラスとページを追加する。

>seam new-action-war
  • "Seam component name" でコンポーネント名を設定
  • "local interface name" でインターフェース名を設定
  • "bean class name" で Bean クラス名を設定
  • "action method name" でアクション用のメソッド名を設定
  • "page name" でページ名を設定

例えば、コンポーネント名に Register を入力するとプロジェクトディレクトリ内に以下のようなファイルが生成される。

  • src/action/test1/session/Register.java
  • view/register.xthml

Groovy スクリプトで Java クラスと同様にアクションクラスを定義できる事を確認するため、Register.java と同等の処理を実施する Groovy スクリプトファイルを作成し、register.xhtml で両方のアクションクラスを呼び出すようにしてみる。

なお、Groovy スクリプトは以下のファイルとして作成した。

  • src/action/test1/session/registerScript.groovy
Register.java
package test1.session;

import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.log.Log;
import org.jboss.seam.faces.FacesMessages;

@Name("Register")
public class Register {

    @Logger private Log log;
    @In FacesMessages facesMessages;

    private String name = "JavaRegister";

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void register()
    {
        //implement your business logic here
        log.info("------ call Register.register()");
        facesMessages.add("register");
    }
   //add additional action methods
}
groovyScript.groovy
package test1.session

import org.jboss.seam.annotations.*
import org.jboss.seam.log.Log
import org.jboss.seam.faces.FacesMessages

@Name("RegisterScript")
class RegisterScript {
    @Logger Log log
    @In FacesMessages facesMessages

    def String name = "GroovyRegister"

    RegisterScript() {
        println "------ RegisterScript.new"
    }

    void register() {
        log.info("------ call RegisterScript.register()")
        //第2引数を指定しないと例外が発生
        facesMessages.add("registerScript", "")
    }
}
register.xhtml
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:s="http://jboss.com/products/seam/taglib"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:rich="http://richfaces.org/rich"
                xmlns:a="http://richfaces.org/a4j"
                template="layout/template.xhtml">
<ui:define name="body">
    <h:messages globalOnly="true" styleClass="message"/>
    <rich:panel>
        <f:facet name="header">テスト</f:facet>
        <h:form id="RegisterForm">
            <!-- Java アクションクラスの利用 -->
            <h:inputText value="#{Register.name}" />
            <h:commandButton id="register" value="登録" action="#{Register.register}"/>
            <br />
            <!-- Groovy スクリプトのアクションクラス利用 -->
            <h:inputText value="#{RegisterScript.name}" />
            <h:commandButton id="register2" value="groovy登録" action="#{RegisterScript.register}"/>
        </h:form>
    </rich:panel>
</ui:define>
</ui:composition>

ビルドとデプロイの実施

下記コマンドを実行して、ビルドと JBoss へのデプロイを実施する。

>seam explode

JBoss を起動して下記の URL にアクセスして作成したページの動作を確認。

http://localhost:8080/test1/register.seam

備考

seam コマンドの引数に指定する setup や new-project などの処理は、JBoss Seam のインストールディレクトリ内の seam-gen/build.xml ファイルに記述されている