我正在解决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容器之外完成?
答案 0 :(得分:1)
在应用程序服务器下,服务器很可能会为您提供JNDI上下文。在独立应用程序中,您必须提供自己的JNDI上下文。为此,您可以使用javax.naming.InitialContext。
这里有一个使用Apache DBCP的好例子:http://commons.apache.org/dbcp/guide/jndi-howto.html。当然,您是否必须将Datasource对象修复为您正在使用的实现。
这对于简单的JNDI使用来说已经足够了(不是很优雅)。