2007年11月5日月曜日

ZK: Seasar2

ZKからSeasar2のS2JDBCを利用してデータベースにアクセスするアプリケーションをとりあえず動作させた手順のメモです。

  • Seasarサイトの「セットアップ>Doltengを使う場合」を参考にしてEclipseにSeasarをセットアップする。

  • EclipseでChuraプロジェクトを作成する。
    File>New>Other>Chura>Chura Project
    Nextボタンを押してCreate a Chura Projectダイアログを表示する

    Project name; [zkseasar]
    Root Package Name: [zkseasar]
    Project Type: Super Agile(Teeda + S2Dao)

    Finishボタンを押すとプロジェクトが作成される。
    zkseasarプロジェクトを右クリックしメニューを表示する。
    「Tomcat プロジェクト>コンテキスト定義を更新」をクリックする。


  • ZKライブラリをPROJECTHOME/src/webapp/WEB-INF/libへコピーする。
    プロジェクトツリーでzkseasarをクリック
    src>main>webapp>WEB-INF>libを選択し右クリックしてメニューを表示する。
    ImportをクリックしImport Selectダイアログを表示する。
    General>File Systemを選択しNextボタンをクリックしFile systemダイアログを表示する。
    From directory: の右にある BrowseボタンをクリックしZKを展開してできたディレクトリのdist/libのjarファイルを選択しコピーする。

    今の作業を繰り返しdist/lib/extのjarファイルもコピーする。


  • 同様にs2-tiger/libにあるgeronimo-jpa_3.0_spec-1.0.jarとgeronimo-ejb_3.0_spec-1.0.jarをWEB-INF/libへコピーする。


  • 同様にs2-tiger/src/test/resourcesにあるs2jdbc.diconをsrc/main/resourcesへコピーする。

  • s2jdbc.diconを編集しdialectをh2dialectに変更しChuraプロジェクトのサンプル
    データベースにあわせる。

    <components>
    ...
    <property name="dialect">h2Dialect</property>
    ...


  • geronimo-jpa_3.0_spec-1.0.jarをBuild Pathに追加する。
    プロジェクトツリーでzkseasarをクリック
    Referenced Librariesを右クリックしメニューを表示する。
    Build Path>Configure Build Path...をクリックしJava Build Pathダイアログを表示する。

    LibrariesタグをクリックしAdd External JARS..ボタンをクリックして出てきたダイアログでgeronimo-jpa_3.0_spec-1.0.jarを選択しOKボタンをクリックする。

  • app.diconを編集しs2jdbc.diconを追加する。

    .....
    <include path="s2jdbc.dicon"/>
    </components>


  • convention.diconを編集しorg.seasar.framework.convention.impl.PersistenceConventionImplを登録する。

    ....
    <component class="org.seasar.framework.convention.impl.PersistenceConventionImpl"/>
    </components>


  • WEB-INF/web.xmlへzkdemoのweb.xmlから必要そうな部分をコピーする。

    ....
    <!-- ZK -->
    <listener>
    <listener-class>org.zkoss.zk.ui.http.HttpSessionListener</listener-class>
    </listener>
    <servlet>
    <servlet-name>zkLoader</servlet-name>
    <servlet-class>org.zkoss.zk.ui.http.DHtmlLayoutServlet</servlet-class>
    <init-param>
    <param-name>update-uri</param-name>
    <param-value>/zkau</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup><!-- Must -->
    </servlet>
    <servlet-mapping>
    <servlet-name>zkLoader</servlet-name>
    <url-pattern>*.zul</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
    <servlet-name>zkLoader</servlet-name>
    <url-pattern>*.zhtml</url-pattern>
    </servlet-mapping>

    <!-- Optional. Uncomment it if you want to use richlets.
    -->
    <servlet-mapping>
    <servlet-name>zkLoader</servlet-name>
    <url-pattern>/zk/*</url-pattern>
    </servlet-mapping>

    <servlet>
    <servlet-name>auEngine</servlet-name>
    <servlet-class>org.zkoss.zk.au.http.DHtmlUpdateServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>auEngine</servlet-name>
    <url-pattern>/zkau/*</url-pattern>
    </servlet-mapping>

    <!-- Miscellaneous -->
    <session-config>
    <session-timeout>120</session-timeout>
    </session-config>
    ....


    アプリケーション作成


  • エンティティEmp.javaを作成。

    package zkseasar.entity;
    import java.math.BigDecimal;
    import java.util.Date;

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Table;

    @Entity
    @Table(name = "EMP")
    public class Emp {
    @Column(name = "ID")
    public Integer id;

    @Column(name = "EMP_NO")
    public Integer empNo;

    @Column(name = "EMP_NAME")
    public String empName;

    @Column(name = "MGR_ID")
    public Integer mgrId;

    @Column(name = "HIREDATE")
    public Date hiredate;

    @Column(name = "SAL")
    public BigDecimal sal;

    @Column(name = "DEPT_ID")
    public Integer deptId;

    @Column(name = "VERSION_NO")
    public Integer versionNo;

    }



  • サービスEmpService.java作成。

    package zkseasar.service;
    import java.util.List;

    import org.seasar.extension.jdbc.JdbcManager;
    import zkseasar.entity.Emp;

    public class EmpService {
    public JdbcManager jdbcManager;

    public List<Emp> selectAll() {
    return jdbcManager.from(Emp.class).getResultList();
    }
    }


  • src/main/webapp/viewにemp.zulを作成。

    <?xml version="1.0" encoding="UTF-8"?>
    <?variable-resolver class="org.zkoss.zkplus.seasar.DelegatingVariableResolver"?>
    <zk xmlns="http://www.zkoss.org/2005/zul" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd ">
    <zscript >
    import zkseasar.entity.Emp;

    public class MyRowRenderer implements RowRenderer {
    public void render(Row row, Object data) {
    new Intbox(((Emp)data).id).setParent(row);
    new Intbox(((Emp)data).empNo).setParent(row);
    new Textbox(((Emp)data).empName).setParent(row);
    // new Intbox(((Emp)data).mgrId).setParent(row);
    new Datebox(((Emp)data).hiredate).setParent(row);
    new Decimalbox(((Emp)data).sal).setParent(row);
    new Intbox(((Emp)data).deptId).setParent(row);
    new Intbox(((Emp)data).versionNo).setParent(row);
    }
    }
    emps = empService.selectAll();
    model = new SimpleListModel(emps.toArray());
    rowRenderer = new MyRowRenderer();
    </zscript>
    <window title="Emplyee list" >
    <grid model="${model}" rowRenderer="${rowRenderer}">
    <columns>
    <column label="id"/>
    <column label="Emp no"/>
    <column label="Emp name"/>
    <column label="Hiredate"/>
    <column label="Sal"/>
    <column label="Dept id"/>
    <column label="Version no"/>
    </columns>
    </grid>
    </window>
    </zk>


  • 完成
    まだDBを起動していないときはDoltengと一緒にインストールしたDatabaseViewから起動する。
    Window>Show View>Other>Dolteng>DatabaseViewをクリックしビューを表示。
    ビューの中のzkseasarをクリックして表示されるjdbc.diconをクリックするとDBが起動する。
    Ellipse>Tomcat>Tomcat起動をクリックしTomcatを起動する。
    Webブラウザでhttp://localhost:8080/zkseasar/view/emp.zulを表示する。


    Seasarコンポーネントの変数もapp.diconからs2jdbc.dicon経由で自動的に設定されるようです、いいですね!
  • 0 件のコメント: