2010-11-04 50 views
1

故障排除映射的問題,我遇到一個問題試圖使用斯卡拉/升降臺的內部映射類。我們的MetaMapper通過一個ConnectionIdentifier來配置他們的數據源,這個ConnectionIdentifier指向一個在JNDI中配置的JDBC數據源。這在通過Jetty引導時非常有用。如何使用MVN斯卡拉時解決JNDI配置:我控制檯

當加載控制檯並運行(new bootstrap.liftweb.Boot).boot進行初始化時,Schemifier.schemify失敗JNDI配置不可用。

scala> (new bootstrap.liftweb.Boot).boot 
java.lang.NullPointerException: Looking for Connection Identifier ConnectionIdentifier(jdbc/svcHub) but failed to find either a JNDI data source with the name jdbc/svcHub or a lift connection manager with the correct name 
    at net.liftweb.mapper.DB$$anonfun$7$$anonfun$apply$12.apply(DB.scala:141) 
    at net.liftweb.mapper.DB$$anonfun$7$$anonfun$apply$12.apply(DB.scala:141) 
    at net.liftweb.common.EmptyBox.openOr(Box.scala:465) 
    at net.liftweb.mapper.DB$$anonfun$7.apply(DB.scala:140) 
    at net.liftweb.mapper.DB$$anonfun$7.apply(DB.scala:140) 
    at net.liftweb.common.EmptyBox.openOr(Box.scala:465) 
    at net.liftweb.mapper.DB$.newConnection(DB.scala:134) 
    at net.liftweb.mapper.DB$.getConnection(DB.scala:230) 
    at net.liftweb.mapper.DB$.use(DB.scala:581) 
    at net.liftweb.mapper.Schemifier$.schemify(Sche... 

本質上,我想從控制檯中獲得完整的MetaMapper功能。我的問題是:從控制檯引導Lift應用程序的最佳方式是什麼,以便基於JNDI的依賴關係也可以在具有JNDI功能的Web容器之外實現?

回答

1

下很可能是服務器將提供一個JNDI上下文爲您的應用程序服務器。在獨立應用程序中,您必須提供一個JNDI上下文。爲此,您可以使用javax.naming.InitialContext

有使用Apache的DBCP這裏一個很好的例子:http://commons.apache.org/dbcp/guide/jndi-howto.html。當然,您是否需要將數據源對象修復爲您正在使用的實現。

這將是足夠的(不是很優雅,雖然)進行簡單的JNDI使用。

+0

感謝您的回覆。不過,我非常期待能夠在不修改應用程序的源代碼的情況下交換不同的JNDI提供程序。 – Collin 2010-11-05 11:44:21