2009-09-16 50 views
3

我是GWT(1.7)的新手,并尝试从servlet建立到我的MySQL数据库的连接。因为我有一些错误,所以我搜索了他们并发现,我必须在Jetty中配置一个DataSource以使其在托管模式下工作。我遵循本教程: TutorialGWT 1.7 - 在Jetty中配置数据源(托管模式)

我按照所述创建了自己的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> 

之后,我创建了码头-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插件)的应用程序,我得到以下错误:

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

我用码头命名-6.1.11.jar和码头加6.1.11.jar 。两者都在WEB-INF/lib目录中。我已经尝试了两个库的更新版本,结果相同。

是否可以告诉我,我哪里出错了?

回答

1

如果您收到ClassCastException S其中,你不应该(喜欢这里,因为org.mortbay.jetty.plus.naming.Resource延伸org.mortbay.jetty.plus.naming.NamingEntry),你有一个类路径问题,意思也有org.mortbay.jetty.plus.naming.Resource两个版本不同的类加载器飞来飞去从两个不同的JAR文件加载在你的Jetty实例中。

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

+0

是的,这通常是原因。 – corydoras 2010-07-28 07:14:20

+1

这些.jar文件不包含在Jetty中,它们添加到插件中以启用资源的JNDI查找 – 2011-03-16 20:02:48