java - GWT 1.7 - 在 Jetty 中配置数据源(托管模式)

标签 java gwt jetty jndi

我是 GWT (1.7) 的新手,并试图从 servlet 建立到我的 MySQL 数据库的连接。因为我遇到了一些错误,所以我用谷歌搜索并发现,我必须在 Jetty 中配置一个 DataSource 才能让它在托管模式下工作。我遵循了本教程: Tutorial

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

现在,当我尝试在 eclipse(Galileo,使用 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)

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

任何人都可以告诉我,我哪里做错了吗?

最佳答案

如果你在不应该得到 ClassCastException 的地方(比如这里,因为 org.mortbay.jetty.plus.naming.Resource extends org. mortbay.jetty.plus.naming.NamingEntry),你有一个类路径问题,这意味着有两个版本的 org.mortbay.jetty.plus.naming.Resource 从两个不同的 JAR 加载由不同类加载器在您的 Jetty 实例中四处传播的文件。

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

关于java - GWT 1.7 - 在 Jetty 中配置数据源(托管模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1431218/

相关文章:

configuration - 使用Jetty设置HTTP header

java - 由 : org. hibernate.hql.internal.ast.QuerySyntaxException : unexpected token: order near line 1, 第 17 列引起,原因绝对不清楚

java - HTML 中的句子边界检测

java - 使用元素创建时 GWT FocusPanel clickHandler 不工作

java - GXT 3 ToggleButtonCell 不更新数据存储

java - Google App Engine Warfile 目录结构

java - Jetty WebSockets ssl == null 错误

java - jetty.xml 在 Maven 项目中的位置?

java - Spring MVC、Thymeleaf URL

java - 在 Vector 中查找包含最多元素的对象