我正在尝试让 JNDI 资源创建与 Jetty 9 Maven 插件一起使用。相同的配置在 Jetty 8 上正常工作,但java.lang.IllegalStateException: No suitable constructor
在 Jetty 9 上产生。以下是相关文件:
pom.xml:
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>jetty-jndi</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<!-- <groupId>org.mortbay.jetty</groupId>
<version>8.1.9.v20130131</version> -->
<groupId>org.eclipse.jetty</groupId>
<version>9.0.0.RC0</version>
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<webAppConfig>
<jettyEnvXml>src/test/resources/jetty-ds-dev.xml</jettyEnvXml>
</webAppConfig>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.2.9</version>
</dependency>
</dependencies>
</project>
src/test/resources/jetty-ds-dev.xml:
<?xml version="1.0"?>
<Configure id="Server" class="org.eclipse.jetty.webapp.WebAppContext">
<New id="DSTest" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg>jdbc/test</Arg>
<Arg>
<New class="org.hsqldb.jdbc.JDBCDataSource">
<Set name="DatabaseName">mem:foo</Set>
<Set name="User">SA</Set>
</New>
</Arg>
</New>
</Configure>
和实际错误:
2013-02-20 10:22:23.464:WARN:oejx.XmlConfiguration:main: Config error at <New id="DSTest" class="org.eclipse.jetty.plus.jndi.Resource">|??<Arg>jdbc/test</Arg>|??<Arg>|???<New class="org.hsqldb.jdbc.JD
BCDataSource">|????<Set name="DatabaseName">mem:foo</Set>|????<Set name="User">SA</Set>|???</New>|??</Arg>|?</New> java.lang.IllegalStateException: No suitable constructor: <New id="DSTest" class="org
.eclipse.jetty.plus.jndi.Resource">
<Arg>jdbc/test</Arg>
<Arg>
<New class="org.hsqldb.jdbc.JDBCDataSource">
<Set name="DatabaseName">mem:foo</Set>
<Set name="User">SA</Set>
</New>
</Arg>
将注释向下更改两行(以恢复 Jetty 8),应用程序将正确启动。