| # Oracle 10g AS上でSeasar2.4を動かすための設定 Seasar2.4はOracle Application Server上で動作します。 以下、動作確認に利用した環境やアプリケーションの設定についてOracle Application Serverとの連携に必要なものを中心に説明します。 ## 目次 動作環境 データソースの設定 JTAの設定 JPAの設定 デプロイのための設定 ## 動作環境 ### 動作環境の構成 動作確認に用いた環境は次の通りです。
ハードウェア | HP ProLiant DL360 G5 server CPU:Intel(R) Xeon(R) CPU 5160 3.00GHz (x2) メモリ:2GB
OS | Red Hat Enterprise Linux AS 4 Update 2 (AMD64/Intel EM64T)
アプリケーションサーバー | Oracle Application Server 10g Release 3 (10.1.3.0) for Linux x86
RDBMS | Oracle Database 10g Release 2 (10.2.0) for Linux x86-64
動作確認に用いたアプリケーションは、データベースの内容を一覧取得、追加、更新、削除、照会といった一連の機能を提供するWebアプリケーションです。 主な技術要素としては、EJB3.0、JSF1.1、JPA1.0を使用しています。EJBコンテナの実装としてS2Container、JSFの実装としてTeedaを利用します。JPAの実装にはHibernateを利用します。Kuina-DaoはJPAに対するDAOとして利用します。 使用したSeasar2のプロダクトとそのバージョンは次の通りです。
S2Container | 2.4.12-SNAPSHOT
Teeda | 1.0.7-SNAPSHOT
S2Hibernate-JPA | 1.0.0-rc2-SNAPSHOT
Kuina-Dao | 1.0.0-rc2-SNAPSHOT
### Subversionリポジトリ 動作確認に使用したソースコードや依存jarファイル一式は以下のリポジトリにあります。設定情報の詳細はこちらを参照してください。 https://www.seasar.org/svn/s2container/trunk/employee-benchmark/employee-seasar2-teeda-oc4j ## データソースの設定 ### アプリケーションサーバー アプリケーションサーバーにデータソースを設定します。設定の方法はアプリケーションサーバーのドキュメントを参照してください。 ここではデータソースのJNDI名に`jdbc/dataSource`と設定するものとします。 ### web.xml webアプリケーションからデータソースを利用するので以下のように`resource-ref`要素を定義します。
        ・・・
        <resource-ref>
            <res-ref-name>jdbc/dataSource</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
        </resource-ref>
        ・・・
### jdbc.dion データソースはJNDIからルックアップするように定義します。ルックアップのキーには`java:comp/env/`リソース名を指定してください。
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
        "http://www.seasar.org/dtd/components24.dtd">
    <components namespace="jdbc">
        <include path="jta.dicon"/>
        <include path="jdbc-extension.dicon"/>

        <component class="org.seasar.extension.jdbc.impl.OracleResultSetFactory"/>
        <component class="org.seasar.extension.jdbc.impl.ConfigurableStatementFactory">
            <arg>
                <component class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
            </arg>
            <property name="fetchSize">100</property>
            <!--
            <property name="maxRows">100</property>
            -->
        </component>

        <!-- from JNDI -->
        <component name="dataSource"
            class="javax.sql.DataSource">
            @org.seasar.extension.j2ee.JndiResourceLocator@lookup("java:comp/env/jdbc/dataSource")
        </component>

    </components>
## JTAの設定 ### oc4j-jta.dion アプリケーションサーバーのJTAと連動するために以下の設定を行います。
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
        "http://www.seasar.org/dtd/components21.dtd">
    <components namespace="jta">

        <!-- Oracle10gAS -->
        <component name="TransactionManager"
                class="javax.transaction.TransactionManager">
            @org.seasar.extension.j2ee.JndiResourceLocator@lookup("java:comp/UserTransaction")
        </component>

        <!-- UserTransaction from JNDI -->
        <component name="UserTransaction"
                class="javax.transaction.UserTransaction">
            @org.seasar.extension.j2ee.JndiResourceLocator@lookup("java:comp/UserTransaction")
        </component>

    </components>
### s2container.dion s2container.diconに`SimplePathResolver`を定義し、Seasar2のjarファイルに同梱されている`jta.dicon`を`oc4j-jta.dion`に置き換えるように指定します。
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
        "http://www.seasar.org/dtd/components24.dtd">
    <components>
        <include condition="#ENV == 'ut'" path="hotdeploy.dicon"/>
        <include condition="#ENV != 'ut'" path="cooldeploy.dicon"/>

        <component class="org.seasar.framework.container.factory.SimplePathResolver">
            <initMethod name="addRealPath">
                <arg>"jta.dicon"</arg>
                <arg>"oc4j-jta.dicon"</arg>
            </initMethod>
        </component>
    </components>
## JPAの設定 ### persistence.xml `jta-data-source`要素にはアプリケーションサーバーに定義したデータソースのJNDI名を指定します。 アプリケーションサーバーと連携するために`hibernate.transaction.manager_lookup_class`プロパティを設定します。 データベースと連携するために`hibernate.dialect`プロパティを設定します。
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence>
        <persistence-unit name="persistenceUnit" transaction-type="JTA">
            <jta-data-source>jdbc/dataSource</jta-data-source>
            <provider>org.hibernate.ejb.HibernatePersistence</provider>
            <properties>
                <property name="hibernate.transaction.manager_lookup_class"
                    value="org.hibernate.transaction.OC4JTransactionManagerLookup"/>
                <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect"/>
                <property name="hibernate.show_sql" value="false"/>
                <property name="hibernate.format_sql" value="true"/>
                <property name="hibernate.use_sql_comments" value="false"/>
            </properties>
        </persistence-unit>
    </persistence>
### jpa.dion アプリケーションサーバーで管理された永続ユニットをJNDIで取得して利用するために`JndiPersistenceUnitProvider`を定義し、永続ユニット名と永続ユニットのJNDI名を対応づけます。このコンポーネントはJNDIから永続ユニットをルックアップして返します。
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.3//EN"
        "http://www.seasar.org/dtd/components23.dtd">
    <components>
        <include path="s2hibernate-jpa.dicon"/>

        <component class="org.seasar.framework.jpa.impl.JndiPersistenceUnitProvider">
            <initMethod name="addJndiName" >
                <arg>"persistenceUnit"</arg>
                <arg>"employee-seasar2-teeda-oc4j/persistenceUnit"</arg>
            </initMethod>
        </component>

        <component name="entityManagerFactory" class="javax.persistence.EntityManagerFactory">
            jpa.persistenceUnitManager.getEntityManagerFactory("persistenceUnit")
        </component>

        <component name="entityManager" class="org.seasar.framework.jpa.impl.TxScopedEntityManagerProxy"/>

        <component class="org.seasar.hibernate.jpa.metadata.HibernateEntityDescProvider"/>

    </components>
## デプロイのための設定 アプリケーションサーバーにデプロイを行うには以下の設定が必要になります。 リソース参照名とJNDI名のマッピング クラスローディングの設定 リソース参照名とJNDI名のマッピングはWebアプリケーションからリソース参照名でリソースにアクセスするために必要です。ここでは`jdbc/dataSource`というリソース参照名を`jdbc/dataSource`というJNDI名にマッピングします。 クラスローディングの設定はOC4J上でHibernateを利用するために必要です。ここでは、OC4Jにパッケージされたantlr.jarとHibernateが依存するアプリケーションのantlr.jarのクラスの衝突を避けるため、oracle.toplink共有ライブラリを明示的に削除します。 以下は、Application Server Controlコンソールで保存したデプロイプランの内容です。
    moduleType=ear
    applicationID=employee-seasar2-teeda-oc4j
    bindWebApp=default-web-site
    webSiteBindings=
    parent=default
    moduleID=.
    doctype=orion-application
    <?xml version="1.0" encoding="UTF-8"?>
    <orion-application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/orion-application-10_0.xsd">
        <imported-shared-libraries>
            <remove-inherited name="oracle.toplink">
            </remove-inherited>
        </imported-shared-libraries>
    </orion-application>
    moduleID=employee-seasar2-teeda-oc4j.war
    doctype=orion-web-app
    <?xml version="1.0" encoding="UTF-8"?>
    <orion-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/orion-web-10_0.xsd"
        context-root="employee-seasar2-teeda-oc4j">
        <resource-ref-mapping name="jdbc/dataSource" location="jdbc/dataSource">
        </resource-ref-mapping>
        <web-app-class-loader>
        </web-app-class-loader>
    </orion-web-app>
| Copyright© 2004-2005, The Seasar Foundation and the others. All rights reserved.