将 Wicket 从 6.20 升级到 7.0 后 JNDI 在 JUnit 中不工作

JNDI not working in JUnit after upgrading Wicket from 6.20 to 7.0

我决定将最近的一个 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

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

随着 Wicket 6.20 和 7.0 之间从 Jetty 7 到 Jetty 9 的更改,jetty-all-server jar 不再可用,因此 wicket-quickstart-archetype 取决于各个 jar。对于这些,有必要在项目的 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>