使用Play 2.2访问JNDI

时间:2014-08-08 09:04:15

标签: scala jndi playframework-2.2

我正在尝试访问Tomcat server.xml和context.xml中指定的数据源 玩。 play应用程序在tomcat webapps中定位为war,并且在其web.xml中指定了Connection:

  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/Testconnection</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>

要查看指定连接的帽子,我使用jsp检查配置:

Context initialContext = new InitialContext();
Context componentBindings = (Context) initialContext.lookup("java:comp/env");
DataSource dataSource = (DataSource) componentBindings.lookup("jdbc/Testconnection");
Connection connection = dataSource.getConnection();
String connectionUrl = connection.getMetaData().getURL();
out.println(connectionUrl);

这表明了预期的结果。 尝试访问播放应用程序中的数据库时,它总是会导致: “找不到....的数据源:路径表达式中不允许使用令牌:' - '”指向我的播放应用中包含DB.withConnection的行。

令我困惑的是,在我的整个代码中没有' - '这样的标记。

我尝试访问以下组合:

DB.withConnection("java:comp/env/jdbc/Testconnection") { imlicit c => .......}

DB.withConnection("java:jdbc/Testconnection") { imlicit c => .......}

DB.withConnection("jdbc/Testconnection") { imlicit c => .......}

如果有人能为我提供解决方案或指出我正确的方向,那将会很棒。

非常感谢!

解决方案:


所以解决方案(感谢applicius!)可能是:

import javax.naming。{Context,InitialContext}

导入javax.sql.DataSource

[...]

var conn:java.sql.Connection =(new InitialContext).lookup(“java:/ comp / env”)。asInstanceOf [Context] .lookup(“jdbc / Testconnection”)。asInstanceOf [DataSource] .getConnection < / p>

val结果:选项[Result] = SQL(queryName).on((“variable”,“replaceValue”))。singleOpt(Result.rowMapper)(conn)

[...]

1 个答案:

答案 0 :(得分:0)

Play DB API需要一个Play数据源名称(一个对应于Play application.conf中的条目),而不是JNDI名称。

您可以使用常规JNDI查找自己连接并在Play应用程序中使用它(必须自己发布),或者将数据源设置移动/复制到Play配置中。