2010-02-25 50 views
0

我正在尝试设置GWT(2.0.3)Eclipse插件附带的嵌入式Jetty,以使用JNDI连接池,该Tomcat在Tomcat下完美工作,但没有成功。现在,因为我已阅读了有关此问题的一些内容,所以我设法执行了以下操作: 通过使用以下参数启动jvm,将Jetty命名初始上下文工厂包括在类路径中:-Djava.naming.factory.initial=org.mortbay.naming.InitialContextFactory。 我还创建了一个jetty-web.xml,看起来像这样:GWT eclispe嵌入式码头和DBCP连接池

<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> 

,并已列入我的构建路径的neccessary文件。正如你所看到的那样,在那里声明了两个JNDI资源,一个使用MysqlConnectionPoolDataSource(我在博客文章中看到)在我的环境下正常工作的MySQL数据库句柄,并用它来确保jetty正在解析jetty-web。 xml正确,第二个尝试使用DBCP连接到DB2数据库。问题是,每当我试图在码头开始为使用DBCP资源我得到以下错误:

[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.shel[email protected]{/,/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正确的工作。

Cheers

+0

有什么理由,你必须使用嵌入式码头?正如你可能知道的那样,它有很多问题 - 特别是对于更复杂的项目。我建议使用外部服务器(因为您已经拥有Tomcat):http://code.google.com/webtoolkit/doc/latest/FAQ_DebuggingAndCompiling.html#How_do_I_use_my_own_server_in_hosted_mode_instead_of_GWT%27s – 2010-02-25 12:57:14

+0

我想你是对的,是我希望避免另一个配置过程... – nvrs 2010-02-25 13:46:04

+0

好吧,如果你将它看作是避免将来(或现在,看起来)配置Jetty的主要PITA的一种方式,那就不是那么糟糕了;) – 2010-02-25 20:39:35

回答

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>