2008-10-10 22 views
1

Tout fonctionne sous Windows XP Pro SP2/32-bit.Comment dois-je configurer Jetty 7 pre3 pour utiliser la source Oracle JDBC?

J'ai téléchargé Jetty 7 pre3 de http://dist.codehaus.org/jetty/jetty-7.0.0-prereleases/jetty-7.0.0pre3/jetty-assembly-7.0.0pre3.zip>dist.codehaus .org.
J'ai extrait jetée C:\jetty-7.0.0pre3\ (donc j'ai C: \ jetée-7.0.0pre3 \ bin \ et d'autres dirs)
Je mets mes webapp dans C:\jetty-7.0.0pre3\webapps\

Je resource-ref dans mon web.xml :

<resource-ref> 
    <description>dev datasource</description> 
    <res-ref-name>jdbc/dev</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

et fait configuration jetty.xml:

<Array id="plusConfig" type="java.lang.String"> 
    <Item>org.mortbay.jetty.webapp.WebInfConfiguration</Item> 
    <Item>org.mortbay.jetty.plus.webapp.EnvConfiguration</Item> 
    <Item>org.mortbay.jetty.plus.webapp.Configuration</Item> 
    <Item>org.mortbay.jetty.webapp.JettyWebXmlConfiguration</Item> 
    <Item>org.mortbay.jetty.webapp.TagLibConfiguration</Item> 
</Array> 

<New id="dev" class="org.mortbay.jetty.plus.naming.Resource"> 
    <Arg>jdbc/dev</Arg> 
    <Arg> 
    <New class="oracle.jdbc.pool.OracleConnectionPoolDataSource"> 
     <Set name="User">username</Set> 
     <Set name="URL">jdbc:oracle:thin:@10.201.201.64:1521:DEV</Set> 
     <Set name="Password">password</Set> 
    </New> 
    </Arg> 
</New> 

<Call name="addLifeCycle"> 
    <Arg> 
    <New class="org.mortbay.jetty.deployer.WebAppDeployer"> 
     <Set name="contexts"><Ref id="Contexts"/></Set> 
     <Set name="webAppDir"><SystemProperty name="jetty.home" default="."/>/webapps</Set> 
     <Set name="parentLoaderPriority">false</Set> 
     <Set name="extract">true</Set> 
     <Set name="allowDuplicates">false</Set> 
     <Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set> 
     <Set name="ConfigurationClasses"><Ref id="plusConfig"/></Set> 
    </New> 
    </Arg> 
</Call> 

Je suis en cours d'exécution java -DOPTION=plus -jar start.jar de C:\jetty-7.0.0pre3\ et je suis gettin g erreur suivant:

2008-10-14 12:12:49.163::INFO: Logging to STDERR via org.mortbay.log.StdErrLog 
2008-10-14 12:12:49.413::WARN: Config error at <New id="dev" class="org.mortbay.jetty.plus.naming.Resource"><Arg>jdbc/dev</Arg><Arg> 
    <New class="oracle.jdbc.pool.OracleConnectionPoolDataSource"><Set name="User">username</Set><Set name="URL">jdbc:oracle:thin:@10.201.201.64:1521:DEV</Set><Set name="Password">password</Set></New> 
    </Arg></New> 
2008-10-14 12:12:49.413::WARN: EXCEPTION 
java.lang.ClassNotFoundException: org.mortbay.jetty.plus.naming.Resource 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at org.mortbay.util.Loader.loadClass(Loader.java:91) 
     at org.mortbay.xml.XmlConfiguration.nodeClass(XmlConfiguration.java:224) 
     at org.mortbay.xml.XmlConfiguration.newObj(XmlConfiguration.java:572) 
     at org.mortbay.xml.XmlConfiguration.configure(XmlConfiguration.java:256) 
     at org.mortbay.xml.XmlConfiguration.configure(XmlConfiguration.java:214) 
     at org.mortbay.xml.XmlConfiguration.main(XmlConfiguration.java:971) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
     at java.lang.reflect.Method.invoke(Unknown Source) 
     at org.mortbay.start.Main.invokeMain(Main.java:218) 
     at org.mortbay.start.Main.start(Main.java:564) 
     at org.mortbay.start.Main.main(Main.java:136) 

C:\jetty-7.0.0pre3\lib\plus\jetty-plus-7.0.0pre3.jar se trouve sur le chemin de classe. Dans la même console:

C:\jetty-7.0.0pre3>set classpath 
CLASSPATH=C:\Program Files\IBM\WebSphere MQ\Java\lib\providerutil.jar;C:\Program 
Files\IBM\WebSphere MQ\Java\lib\com.ibm.mqjms.jar;C:\Program Files\IBM\WebSpher 
e MQ\Java\lib\ldap.jar;C:\Program Files\IBM\WebSphere MQ\Java\lib\jta.jar;C:\Pro 
gram Files\IBM\WebSphere MQ\Java\lib\jndi.jar;C:\Program Files\IBM\WebSphere MQ\ 
Java\lib\jms.jar;C:\Program Files\IBM\WebSphere MQ\Java\lib\connector.jar;C:\Pro 
gram Files\IBM\WebSphere MQ\Java\lib\fscontext.jar;C:\Program Files\IBM\WebSpher 
e MQ\Java\lib\com.ibm.mq.jar;.;c:\Program Files\Java\jdk1.5.0_05\classes;C:\Prog 
ram Files\Java\jre1.5.0_05\lib\ext\QTJava.zip;C:\Program Files\Java\jre1.5.0_05\ 
lib\spring.jar;c:\jetty-7.0.0pre3\lib\plus\jetty-plus-7.0.0pre3.jar 

Qu'est-ce qui ne va pas? Comment dois-je ajouter org.mortbay.jetty.plus.naming.Resource à la zone de visibilité de start.jar?

Répondre

2

Le problème est que addLifeCycle ne prend pas un objet Resource; il faut LifeCycle des implémentations telles que WebAppContext ou WebAppDeployer s.

En supposant que vous avez un WebAppDeployer (ou équivalent) mis en place dans votre jetty.xml, essayez ceci:

<Array id="plusConfig" type="java.lang.String"> 
    <Item>org.mortbay.jetty.webapp.WebInfConfiguration</Item> 
    <Item>org.mortbay.jetty.plus.webapp.EnvConfiguration</Item> 
    <Item>org.mortbay.jetty.plus.webapp.Configuration</Item> 
    <Item>org.mortbay.jetty.webapp.JettyWebXmlConfiguration</Item> 
    <Item>org.mortbay.jetty.webapp.TagLibConfiguration</Item> 
</Array> 

<Call name="addLifeCycle"> 
    <Arg> 
    <New class="org.mortbay.jetty.deployer.WebAppDeployer"> 
     .... 
     <Set name="ConfigurationClasses"><Ref id="plusConfig"/></Set> 
     .... 
    </New> 
    </Arg> 
</Call> 


<New id="dev" class="org.mortbay.jetty.plus.naming.Resource"> 
    <Arg>jdbc/dev</Arg> 
    <Arg> 
    <New class="oracle.jdbc.pool.OracleConnectionPoolDataSource"> 
     <Set name="User">username</Set> 
     <Set name="URL">jdbc:oracle:thin:@10.201.201.64:1521:DEV</Set> 
     <Set name="Password">password</Set> 
    </New> 
    </Arg> 
</New> 

Si vous voulez que la source de données que pour un webapp particulier, puis effectuez une configuration similaire au sein d'une jetée -env.xml fichier pour cette application Web.

De plus, puisque vous utilisez Jetty 7, vous devrez charger les bibliothèques (facultatives) plus (si l'exe ne le fait pas déjà pour vous). Vous saurez qu'ils ne sont pas chargés, car vous obtiendrez une exception ClassNotFoundException au démarrage.

Démarrage jetée sur Linux, je le ferais comme ceci:

java -DOPTIONS=plus -jar start.jar 

Cependant, je ne suis pas familier avec Windows. Peut-être

Jetty-Service.exe -DOPTIONS=plus 

fonctionnerait? Si ce n'est pas le cas, recherchez quelque chose qui définirait la propriété système "OPTIONS" sur "plus" lorsque vous exécutez jetty.