2009-09-16 5 views
3

Je suis nouveau sur GWT (1.7) et j'ai essayé d'établir une connexion à ma base de données MySQL depuis le servlet. Parce que j'ai eu quelques erreurs, je les ai googlé et j'ai découvert que je dois configurer une source de données dans Jetty pour que cela fonctionne en mode hébergé. J'ai suivi ce tutoriel: TutorialGWT 1.7 - Configuration d'une source de données dans Jetty (mode hébergé)

J'ai créé ma propre classe JettyLauncher comme décrit et ajouté le paramètre correspondant à la configuration Exécuter. Après cela, j'ai ajouté cette entrée à mon 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> 

Après que j'ai créé la jetée-env.xml avec le contenu suivant:

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

Et quand je maintenant essayez de démarrer l'application dans Eclipse (Galileo, avec GWT Plugin) Je reçois l'erreur suivante:

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

J'utilise la jetée nommage-6.1.11.jar et la jetée-plus-6.1.11.jar . Les deux sont dans le répertoire WEB-INF/lib. J'ai déjà essayé une version plus récente des deux bibliothèques avec le même résultat.

Quelqu'un pourrait-il me dire où je me suis trompé?

Répondre

1

Si vous obtenez ClassCastException s où vous ne devriez pas (comme ici, comme org.mortbay.jetty.plus.naming.Resource étend org.mortbay.jetty.plus.naming.NamingEntry), vous avez un problème de classpath, ce qui signifie qu'il existe deux versions de org.mortbay.jetty.plus.naming.Resource chargées à partir de deux fichiers JAR différents par différents chargeurs de classes qui volent autour dans votre instance de Jetty. Je ne connais pas GWT, mais vous ne devez généralement pas inclure de fichiers JAR Jetty dans le dossier WEB-INF/lib de votre application, car ils sont présents dans Jetty de toute façon.

+0

Oui, c'est généralement la cause. – corydoras

+1

Ces fichiers .jar ne sont pas inclus dans Jetty, ils sont ajoutés pour permettre à JNDI de consulter les ressources. –

Questions connexes