Java 在Play框架中使用初始上下文而不是Tomcat

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框架应用程序中使用了子类。但是,初始上下文查找在播放应用程序上不起

因此,我有一个基本的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]
原因: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对象的数据源呢?