我正在尝试设置 GWT (2.0.3) Eclipse 插件附带的嵌入式 Jetty 以使用在 Tomcat 下完美运行的 JNDI 连接池,但没有成功。现在,由于我已经阅读了有关该问题的一些内容,因此我设法执行了以下操作:通过使用以下参数启动 jvm,将 Jetty 命名初始上下文工厂包含到类路径中:-Djava.naming.factory.initial=org.mortbay.naming.InitialContextFactory
. 我还创建了一个jetty-web.xml
看起来像这样的:
<New id="mysqltest" class="org.mortbay.jetty.plus.naming.Resource">
<Arg>java:comp/env/jdbc/mysqldb</Arg>
<Arg>
<New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
<Set name="Url">jdbc:mysql://192.168.0.5:3306/mydb</Set>
<Set name="User">testuser</Set>
<Set name="Password">testpass</Set>
</New>
</Arg>
</New>
<New id="db2test" class="org.mortbay.jetty.plus.naming.Resource">
<Arg>java:comp/env/jdbc/db2db</Arg>
<New class="org.apache.commons.dbcp.BasicDataSource">
<Set name="driverClassName">com.ibm.db2.jcc.DB2Driver</Set>
<Set name="url">jdbc:db2://192.168.0.6:50000/mydb2</Set>
<Set name="username">testuser</Set>
<Set name="password">testpass</Set>
</New>
</New>
</Configure>
并在我的构建路径中包含了必要的文件。如您所见,那里声明了两个 JNDI 资源,一个使用 MySQL 数据库的句柄MysqlConnectionPoolDataSource
(我在博客文章中看到)在我的环境下运行良好,并使用它来确保码头正在解析 jetty-web.xml正确,第二个尝试用于DBCP
连接到 DB2 数据库。问题是每当我尝试使用 DBCP 资源时,Jetty 启动时都会出现以下错误:
[WARN] Config error at <New id="db2test" class="org.mortbay.jetty.plus.naming.Resource"><Arg>java:comp/env/jdbc/db2db</Arg>...
[WARN] Failed startup of context com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload@7a74db2c{/,/home/..}
java.lang.IllegalStateException: No Constructor <New id="db2test" class="org.mortbay.jetty.plus.naming.Resource"><Arg>java:comp/env/jdbc/db2db</Arg>...
正如我所说,这些在 Tomcat 下运行良好,而且问题不是 DB2 特有的,我也无法使用 DBCP 获得 MySQL 数据源。查看错误消息,似乎 DBCP 文件不在类路径中,但我不知道如何将它们放在那里(它们当然在项目构建路径中,但这似乎与 Jetty 无关)。我可能必须向 Djava.naming.factory.initial 添加另一个参数,但我不确定 DBCP 工作的正确参数是什么。
干杯