GWT 1.7 - 在Jetty(Hosted Mode)中配置数据源

3
我刚开始接触GWT(1.7),尝试从servlet建立到我的MySQL数据库的连接。但由于出现了一些错误,我进行了谷歌搜索,并找到了解决方法,即我需要在Jetty中配置数据源才能在Hosted Mode下运行。我按照这个教程进行操作: 教程 我创建了自己的JettyLauncher类并添加了相应的参数到运行配置中。此后,我在WEB-INF / web.xml中添加了这个条目:
    <resource-ref>      
     <description>MySQl Connection</description> 
        <res-ref-name>jdbc/skyline</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>  
    </resource-ref>

接下来我创建了以下内容的jetty-env.xml文件:

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">

<Configure class="org.mortbay.jetty.webapp.WebAppContext">

 <New id="skyline" class="org.mortbay.jetty.plus.naming.Resource">
    <Arg>jdbc/skyline</Arg>
    <Arg>
     <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
                 <Set name="Url">jdbc:mysql://localhost:3306/skyline</Set>
                 <Set name="User">root</Set>
                 <Set name="Password">admin</Set>
     </New>
    </Arg>
   </New>

</Configure>

现在,当我尝试在带有GWT插件的Eclipse(Galileo)中启动应用程序时,会出现以下错误:

[WARN] Configuration problem at <resource-ref><description>MySQl Connection</description><res-ref-name>jdbc/skyline</res-ref-name><res-type>javax.sql.DataSource</res-type><res-auth>Container</res-auth></resource-ref>
java.lang.ClassCastException: org.mortbay.jetty.plus.naming.Resource cannot be cast to org.mortbay.jetty.plus.naming.NamingEntry
    at org.mortbay.jetty.plus.naming.NamingEntry.lookupNamingEntry(NamingEntry.java:211)
    at org.mortbay.jetty.plus.naming.NamingEntry.bindToENC(NamingEntry.java:104)
    at org.mortbay.jetty.plus.webapp.Configuration.bindResourceRef(Configuration.java:73)
    at org.mortbay.jetty.plus.webapp.AbstractConfiguration.initResourceRef(AbstractConfiguration.java:262)
    at org.mortbay.jetty.plus.webapp.AbstractConfiguration.initWebXmlElement(AbstractConfiguration.java:161)
    at org.mortbay.jetty.webapp.WebXmlConfiguration.initialize(WebXmlConfiguration.java:289)
    at org.mortbay.jetty.plus.webapp.AbstractConfiguration.initialize(AbstractConfiguration.java:133)
    at org.mortbay.jetty.webapp.WebXmlConfiguration.configure(WebXmlConfiguration.java:222)
    at org.mortbay.jetty.plus.webapp.AbstractConfiguration.configure(AbstractConfiguration.java:113)
    at org.mortbay.jetty.webapp.WebXmlConfiguration.configureWebApp(WebXmlConfiguration.java:180)
    at org.mortbay.jetty.plus.webapp.AbstractConfiguration.configureWebApp(AbstractConfiguration.java:96)
    at org.mortbay.jetty.plus.webapp.Configuration.configureWebApp(Configuration.java:124)
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1217)
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:513)
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
    at skyline.frontend.server.helper.CustomJettyLauncher$WebAppContextWithReload.doStart(CustomJettyLauncher.java:412)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
    at org.mortbay.jetty.handler.RequestLogHandler.doStart(RequestLogHandler.java:115)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
    at org.mortbay.jetty.Server.doStart(Server.java:222)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
    at skyline.frontend.server.helper.CustomJettyLauncher.start(CustomJettyLauncher.java:464)
    at com.google.gwt.dev.HostedMode.doStartUpServer(HostedMode.java:365)
    at com.google.gwt.dev.HostedModeBase.startUp(HostedModeBase.java:590)
    at com.google.gwt.dev.HostedModeBase.run(HostedModeBase.java:397)
    at com.google.gwt.dev.HostedMode.main(HostedMode.java:232)

我使用jetty-naming-6.1.11.jar和jetty-plus-6.1.11.jar,它们都在WEB-INF/lib目录中。我已经尝试过这两个库的更新版本,但结果相同。请问有人能告诉我错在哪里吗?
1个回答

1

如果您在不应该出现ClassCastException的地方(比如这里,因为org.mortbay.jetty.plus.naming.Resource扩展了org.mortbay.jetty.plus.naming.NamingEntry),却遇到了这个问题,那么您可能存在类路径问题,也就是说,在Jetty实例中,由不同的类加载器从两个不同的JAR文件中加载了两个版本的org.mortbay.jetty.plus.naming.Resource

我不知道GWT,但通常您不需要在应用程序的WEB-INF/lib文件夹中包含任何Jetty JAR文件,因为它们已经存在于Jetty中。


是的,这通常是原因。 - corydoras
1
这些.jar文件不包含在Jetty中,它们是附加插件,用于启用资源的JNDI查找。 - user177800

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接