カスタム検索

2008年2月6日水曜日

TomcatでJNDI in Grails

grailsから作成したwarをtomcat上でJNDIを使って動かすというのをやったので覚え書き。

・grailsからwarの作成

grails war
以上 :)
{applicationName}-0.1.war って感じのファイルが出来れば成功です。

・grailsのDataSource.groovyをJNDIへ書き換える

warした場合は production を書き換えます。

production {
  dataSource {
   pooled = true
   dbCreate = "update"
   jndiName = "java:comp/env/jdbc/oracle"
  }
}


urlがなくなってjndiNameに変わります。
java:comp/env/ までは固定で、 jdbc/oracle というのがJNDIの接続名になります。

・Tomcat側の設定

コンテキストにたいしてJNDIを設定します。

tomcat/conf/server.xml の中の <Host ...> の中に以下の内容を追加します。


<Context path="/hoge" docBase="hoge"
debug="5" reloadable="true" crossContext="true">

<Resource name="jdbc/oracle"
auth="Container"
type="javax.sql.DataSource"
username="user"
password="pass"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:hogedb"
/>

</Context>


ContextのpathとdocBaseにはプロジェクト名を、
ResourceのnameにJNDIの接続名を、
username,password,driverClassName,urlはDBに応じて設定して下さい。
必要なドライバを tomcat/common/lib にいれておきます。

・起動

作成した war を tomcat/webapps/ へいれ、tomcatを起動します。
エラー無くたちあがれば成功です。
Tomcat上のJNDIの状態を知りたい場合は、TomcatAdministratorを入れれば簡単に確認する事が出来ます。


・おまけ

上記の設定だとコンテキスト毎にJNDIの設定を書く必要がありますが、複数のコンテキストで共通のJNDIを使う場合は以下のように設定します。

tomcat/conf/server.xml 内の <GlobalNamingResources> の中に <Resource> を設定します。(内容は同じです)
Context内に <ResourceLink> を設定します。


<Context path="/hoge" docBase="hoge"
debug="5" reloadable="true" crossContext="true">

<ResourceLink name="jdbc/oracle"
global="jdbc/oracle"
type="javax.sql.DataSource"/>

</Context>


これでGlobalNamingResourcesに設定したResourceを設定できます。

0 件のコメント: