【问题标题】:How to address JNDI configuration when using mvn scala:console使用 mvn scala:console 时如何处理 JNDI 配置
【发布时间】:2011-05-05 01:01:42
【问题描述】:

我正在对 Mapper 问题进行故障排除,但在尝试在 Scala/Lift 控制台中使用 Mapper 类时遇到了问题。我们的 MetaMapper 的数据源通过 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 容器之外实现的最佳方式是什么?

【问题讨论】:

    标签: maven-2 scala scala-2.8 lift


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复。不过,我真的在寻找一种方法,可以在不修改应用程序源代码的情况下交换不同的 JNDI 提供程序。
    猜你喜欢
    • 1970-01-01
    • 2010-12-23
    • 2020-11-23
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 2023-03-14
    相关资源
    最近更新 更多