GWT eclispe嵌入式码头和DBCP连接池

时间:2010-02-25 12:31:53

标签: gwt jetty apache-commons-dbcp

我正在尝试设置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数据库句柄(我在博客文章中看到)在我的环境下正常工作并使用它来确保jetty正在解析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的工作是否正确。

干杯

1 个答案:

答案 0 :(得分:0)

我认为你错过了一个'Arg'标签。

尝试:

<New id="db2test" class="org.mortbay.jetty.plus.naming.Resource">
    <Arg>java:comp/env/jdbc/db2db</Arg>
    <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>
     </Arg>
</New>