mvn-jetty-pluginでJNDI

mvn-jetty-pluginでJNDIリソースを使うには、次のdependencyをpom.xmlに追加します。これでjettyでJNDIが使えるようになります。

    <dependency>
      <groupId>org.mortbay.jetty</groupId>
      <artifactId>jetty-plus</artifactId>
      <version>[6.1.6,)</version>
    </dependency>
    <dependency>
      <groupId>org.mortbay.jetty</groupId>
      <artifactId>jetty-naming</artifactId>
      <version>[6.1.6,)</version>
    </dependency>


JNDIリソースの追加は、WEB-INF/jetty-env.xmlで行います。
こちらは、MySQLのデータソースを"jdbc/sample"という名前でJNDIリソースを設定する場合のjetty-env.xmlの例です。詳しくはこちらのドキュメントを。

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
  <New id="dataSource" class="org.mortbay.jetty.plus.naming.Resource">
    <Arg></Arg>
    <Arg>jdbc/sample</Arg>
    <Arg>
      <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
        <Set name="Url">jdbc:mysql://localhost:3306/sample</Set>
        <Set name="User">user</Set>
        <Set name="Password">password</Set>
      </New>
    </Arg>
  </New>
</Configure>


上の設定ではMySQLのドライバが必要なので、pom.xmlに次の設定を追加して、MySQLのドライバを使えるようにしておきます。

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.0.4</version>
    </dependency>

ここまでが、サーブレットコンテナ側の設定です。

ここからは、Webアプリ側の設定です。

web.xmlに次の設定を追加し、コンテナ側で用意したJNDIリソースをWebアプリから使えるようにします。

  <resource-ref>
    <res-ref-name>jdbc/sample</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

最後に、DefaultConnectionIdentifier.jndiNameを設定して、LiftにJNDIリソースの名前を教えます。これで、LiftからJNDIデータソースを使えるようになります。

    ・
    ・
    ・
class Boot {
  def boot {
    DefaultConnectionIdentifier.jndiName = "jdbc/sample"
    if (!DB.jndiJdbcConnAvailable_?) {
      DB.defineConnectionManager(DefaultConnectionIdentifier, DBVendor)
    ・
    ・
    ・