将初始上下文与Play Framework一起使用而不是Tomcat

时间:2014-11-12 21:02:51

标签: java spring scala tomcat playframework-2.0

所以我有一个基本的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]

是否仍然使用初始上下文查找功能,同时仍然使用播放框架?

1 个答案:

答案 0 :(得分:3)

Play的JNDI环境由in-memory JNDI service provider提供。您可以使用Play助手类来获取名为play.api.libs.JNDIInitialContext。您可以使用它来查找数据源。

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