Oracle 10g AS上でSeasar2.4を動かすための設定
Seasar2.4はOracle Application Server上で動作します。
以下、動作確認に利用した環境やアプリケーションの設定についてOracle Application Serverとの連携に必要なものを中心に説明します。
動作環境の構成
動作確認に用いた環境は次の通りです。
動作確認に用いたアプリケーションは、データベースの内容を一覧取得、追加、更新、削除、照会といった一連の機能を提供する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>
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>
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>
|