Java 在Play框架中使用初始上下文而不是Tomcat
因此,我有一个基本的DAO类,它使用Tomcat和Spring的InitialContext查找来建立连接,它工作得非常好:Java 在Play框架中使用初始上下文而不是Tomcat,java,spring,scala,tomcat,playframework-2.0,Java,Spring,Scala,Tomcat,Playframework 2.0,因此,我有一个基本的DAO类,它使用Tomcat和Spring的InitialContext查找来建立连接,它工作得非常好: Context initCtx = new InitialContext(); initialize((DataSource) initCtx.lookup(resourceName)); 现在,我已经扩展了这个基本DAO,并在一个play框架应用程序中使用了子类。但是,初始上下文查找在播放应用程序上不起
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]
原因:javax.naming.NotContextException:comp不是子文本
在tyrex.naming.EnvContext.internalLookup(未知源)~[tyrex-1.0.1.jar:1.0.1 2003年11月11日1703]
在tyrex.naming.EnvContext.lookup(未知源)~[tyrex-1.0.1.jar:1.0.1 2003年11月11日1703]
在tyrex.naming.java.JavaContext.lookup(未知源)~[tyrex-1.0.1.jar:1.0.1 2003年11月11日1703]
在javax.naming.InitialContext.lookup(InitialContext.java:417)~[na:1.8.0]
在DatabaseFactory。(DatabaseFactory.java:63)~[Utilities SNAPSHOT.jar:na]
在仍然使用play框架的情况下,是否仍然可以使用初始上下文查找功能?play的JNDI环境由一个提供。有一个Play helper类可用于获取调用的
InitialContext
。您可以使用它来查找数据源
使用作为示例并添加以下操作:
public Application extends Controller {
...
public static Result getDataSource() throws NamingException {
DataSource dataSource = (DataSource) play.api.libs.JNDI.initialContext().lookup("DefaultDS");
return ok(dataSource.toString());
}
}
将在中查找绑定到名称DefaultDS
的数据源
查看您的异常,您似乎正在查找
InitialContext
,然后在实用程序库中使用java:comp/../resourceName
查找资源。这不会在你的play应用程序中很好地发挥(请原谅双关语)。我建议您按照上面的示例,以特定于播放的方式查找数据源。目前,我有一个通用的数据库访问对象,它使用javax.naming.InitialContext对象获取数据源,但这不适用于播放。那么如何检索spring和play对象的数据源呢?