将Wicket从6.20升级到7.0后,JNDI无法在JUnit中工作

时间:2015-08-30 16:22:01

标签: junit jetty wicket embedded-jetty

我决定将最近的Wicket项目从6.20升级到7.0。这对于主代码来说非常顺利,但我在JUnit环境中遇到了JNDI的设置代码问题。我正在使用:

try {                                                   
    // create and bind JNDI resource for database connection

    InitialContext ic = new InitialContext();

    ic.createSubcontext("java:comp/env");
    ic.createSubcontext("java:comp/env/jdbc");

    SQLServerConnectionPoolDataSource ds = new SQLServerConnectionPoolDataSource();
    ds.setURL("jdbc:sqlserver://localhost:1433;databaseName=myProject;userName=myUser;password=myPassword");

    ic.bind("java:comp/env/jdbc/MyProject", ds);
} catch (Exception e) {
    e.printStackTrace();
}

这适用于Wicket 6.20,但在调用createSubcontext()时会抛出javax.naming.NoInitialContextException

1 个答案:

答案 0 :(得分:1)

经过无果实验,关键信息在http://www.eclipse.org/jetty/documentation/current/jndi-embedded.html

随着从Wicket 6.20和7.0之间从Jetty 7到Jetty 9的变化,一个码头全服务器jar不再可用,因此wicket-quickstart-archetype取决于各个罐子。为此,必须在项目的pom.xml中为jetty-plus(后者加载jetty-jndi)添加依赖项:

<dependencies>
    ...
    <!--  JETTY DEPENDENCIES FOR TESTING  -->
    ...
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-plus</artifactId>
        <version>${jetty9.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>