如何在使用mvn scala:console时解决JNDI配置问题

时间:2010-11-04 12:31:30

标签: maven-2 scala scala-2.8 lift

我正在解决Mapper问题,我遇到了一个问题,试图在Scala / Lift控制台中使用Mapper类。我们的MetaMappers通过ConnectionIdentifier配置其数据源,该ConnectionIdentifier指向在JNDI中配置的JDBC数据源。这在通过Jetty引导时效果很好。

加载控制台并运行(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 个答案:

答案 0 :(得分:1)

在应用程序服务器下,服务器很可能会为您提供JNDI上下文。在独立应用程序中,您必须提供自己的JNDI上下文。为此,您可以使用javax.naming.InitialContext

这里有一个使用Apache DBCP的好例子:http://commons.apache.org/dbcp/guide/jndi-howto.html。当然,您是否必须将Datasource对象修复为您正在使用的实现。

这对于简单的JNDI使用来说已经足够了(不是很优雅)。