2011-09-12 21 views
1

我使用xsbt v.0.10.1,它的web插件,lift v2.4-M4,Scala 2.9.1,Jetty 8.0.0.v20110901。Eclipse Jetty v8.0 JNDI DataSource在scala lift應用程序中不可用

在Boot.scala我補充這樣的代碼:

DefaultConnectionIdentifier.jndiName = "jdbc/db" 
logger.warn("JNDI connection availbale ? " + DB.jndiJdbcConnAvailable_?) 

而在碼頭日誌中我看到:

08:39:06.562 [Scanner-0] WARN bootstrap.liftweb.Boot - JNDI connection availbale ? false 

我使用的web.xml V2.5:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

    <filter> 
     <filter-name>LiftFilter</filter-name> 
     <display-name>Lift Filter</display-name> 
     <description>The Filter that intercepts lift calls</description> 
     <filter-class>net.liftweb.http.LiftFilter</filter-class> 
    </filter> 

    <resource-ref> 
     <description>My DataSource Reference</description> 
     <res-ref-name>jdbc/db</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
    </resource-ref> 

    <filter-mapping> 
     <filter-name>LiftFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

</web-app> 

和我的應用程序的context.xml:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> 

<!-- ================================================================== 
Configure and deploy the test web application in $(jetty.home)/webapps/test 

Note. If this file did not exist or used a context path other that /test 
then the default configuration of jetty.xml would discover the test 
webapplication with a WebAppDeployer. By specifying a context in this 
directory, additional configuration may be specified and hot deployments 
detected. 
===================================================================== --> 

<Configure class="org.eclipse.jetty.webapp.WebAppContext"> 
    <Array id="plusConfig" type="java.lang.String"> 
    <Item>org.eclipse.jetty.webapp.WebInfConfiguration</Item> 
    <Item>org.eclipse.jetty.webapp.WebXmlConfiguration</Item> 
    <Item>org.eclipse.jetty.webapp.MetaInfConfiguration</Item> 
    <Item>org.eclipse.jetty.webapp.FragmentConfiguration</Item> 
    <Item>org.eclipse.jetty.plus.webapp.EnvConfiguration</Item> <!-- add --> 
    <Item>org.eclipse.jetty.plus.webapp.PlusConfiguration</Item> <!-- add --> 
    <Item>org.eclipse.jetty.webapp.JettyWebXmlConfiguration</Item> 
    <Item>org.eclipse.jetty.webapp.TagLibConfiguration</Item> 
    </Array> 

    <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> 
    <!-- Required minimal context configuration :      --> 
    <!-- + contextPath             --> 
    <!-- + war OR resourceBase           --> 
    <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> 
    <Set name="contextPath">/</Set> 
    <Set name="war"><SystemProperty name="jetty.home" default="."/>/test.war</Set> 
    <Set name="configurationClasses"><Ref id="plusConfig"/></Set> 

    <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> 
    <!-- Optional context configuration         --> 
    <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> 
    <Set name="extractWAR">true</Set> 
    <Set name="copyWebDir">false</Set> 


    <New id="ds" class="org.eclipse.jetty.plus.jndi.Resource"> 
    <Arg></Arg> 
    <Arg>jdbc/db</Arg> 
    <Arg> 
    <New class="com.jolbox.bonecp.BoneCPDataSource"> 
       <Set name="driverClass">org.h2.Driver</Set> 
       <Set name="jdbcUrl">jdbc:h2:~/test</Set> 
       <Set name="username">sa</Set> 
       <Set name="password">sa</Set> 
    </New> 
    </Arg> 
    </New> 

</Configure> 

我嘗試一個簡單的Java應用程序,檢查JNDI的可用性和它的工作,似乎問題在SBT。

也許有人已經有這樣的問題?

謝謝。

回答

1

這是電梯的一個bug V2.4-M4

這在Boot.scala的begining:

DefaultConnectionIdentifier.jndiName = "jdbc/db" 
logger.warn("JNDI connection available (manyally) ? " + (((new InitialContext).lookup("java:/comp/env/jdbc/db").asInstanceOf[DataSource]) != null)) 
logger.warn("JNDI connection available (lift) ? " + DB.jndiJdbcConnAvailable_?) 

打印:

16:43:52.937 [main] WARN bootstrap.liftweb.Boot - JNDI connection available (manyally) ? true 
16:43:53.015 [main] WARN bootstrap.liftweb.Boot - JNDI connection available (lift) ? false 

作爲一個臨時的解決方法我實施的ConnectionManager並添加到DB.defineConnectionManager。

相關問題