【发布时间】:2011-01-20 23:51:32
【问题描述】:
我正在尝试设置 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 资源,一个使用 MysqlConnectionPoolDataSource 的 MySQL 数据库句柄(我在博客文章中看到)在我的环境下运行良好,并使用它来确保码头正在解析码头- 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 的正确参数是什么。
干杯
【问题讨论】:
-
有什么理由必须使用嵌入式 Jetty?正如您可能知道的那样,它存在许多问题 - 特别是对于更复杂的项目。我建议使用外部服务器(因为您似乎已经拥有 Tomcat):code.google.com/webtoolkit/doc/latest/…
-
我想你是对的,问题是我希望避免另一个配置过程......
-
好吧,如果您将其视为在未来(或现在看来)配置 Jetty 来避免主要 PITA 的一种方式,那还不错;)
标签: gwt jetty apache-commons-dbcp