所以我有一个基本的DAO类,它使用Tomcat和Spring的InitialContext查找进行连接,并且它运行良好:
Context initCtx = new InitialContext();
initialize((DataSource) initCtx.lookup(resourceName));
现在,我已经扩展了基本的DAO并在play框架应用程序中使用了子类。但是,初始上下文查找不适用于播放应用程序。错误说:
Caused by: javax.naming.NotContextException: comp is not a subcontext
at tyrex.naming.EnvContext.internalLookup(Unknown Source) ~[tyrex-1.0.1.jar:1.0.1 November 11 2003 1703]
at tyrex.naming.EnvContext.lookup(Unknown Source) ~[tyrex-1.0.1.jar:1.0.1 November 11 2003 1703]
at tyrex.naming.java.JavaContext.lookup(Unknown Source) ~[tyrex-1.0.1.jar:1.0.1 November 11 2003 1703]
at javax.naming.InitialContext.lookup(InitialContext.java:417) ~[na:1.8.0]
at DatabaseFactory.<init>(DatabaseFactory.java:63) ~[Utilities-SNAPSHOT.jar:na]
是否仍然使用初始上下文查找功能,同时仍然使用播放框架?
答案 0 :(得分:3)
Play的JNDI环境由in-memory JNDI service provider提供。您可以使用Play助手类来获取名为play.api.libs.JNDI的InitialContext
。您可以使用它来查找数据源。
以this benchmark test app为例,添加以下操作:
public Application extends Controller {
...
public static Result getDataSource() throws NamingException {
DataSource dataSource = (DataSource) play.api.libs.JNDI.initialContext().lookup("DefaultDS");
return ok(dataSource.toString());
}
}
将查找绑定到application.conf
DefaultDS
的数据源
查看您的例外情况,您似乎正在查找InitialContext
,然后在实用程序库中查找java:comp/.../resourceName
的资源。这在开箱即用的Play应用程序中不会发挥(请原谅双关语)。我建议您按照上面的示例以Play特定方式查找DataSource
。