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