我正在尝试访问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)
[...]
答案 0 :(得分:0)
Play DB API需要一个Play数据源名称(一个对应于Play application.conf
中的条目),而不是JNDI名称。
您可以使用常规JNDI查找自己连接并在Play应用程序中使用它(必须自己发布),或者将数据源设置移动/复制到Play配置中。