我决定将最近的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
。
答案 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>