2008-10-10 3 views
1

Все работает под управлением Windows XP Pro SP2/32-бит.Как настроить Jet3 7 pre3 на использование источника JDBC oracle?

Я загрузил Jetty 7 pre3 из http://dist.codehaus.org/jetty/jetty-7.0.0-prereleases/jetty-7.0.0pre3/jetty-assembly-7.0.0pre3.zip>dist.codehaus .org.
я извлек причалом для C:\jetty-7.0.0pre3\ (поэтому у меня есть C: \ Причал-7.0.0pre3 \ Bin \ и другие каталоги)
Я кладу в веб-приложение C:\jetty-7.0.0pre3\webapps\

У меня есть ресурс, ссылка в моем 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> 

и сделали конфигурацию в 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> 

Я бег java -DOPTION=plus -jar start.jar от C:\jetty-7.0.0pre3\ и я получаю г следующее сообщение об ошибке:

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 находится на пути к классам. В той же консоли:

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 

Что случилось? Как добавить org.mortbay.jetty.plus.naming.Resource в область видимости start.jar?

ответ

2

Проблема заключается в том, что addLifeCycle не принимает объект Resource; он принимает LifeCycle, такие как WebAppContext s или WebAppDeployer s.

Предполагая, что у вас есть WebAppDeployer (или эквивалент), установленный в вашем 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> 

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

Если вы хотите, чтобы источник данных только для определенного веб-приложение, а затем сделать подобную конфигурацию в причале -env.xml для этого webapp.

Кроме того, поскольку вы используете Jetty 7, вам нужно будет загрузить (необязательно) библиотеки plus (если exe уже не делает этого для вас). Вы узнаете, что они не загружаются, потому что при запуске вы получите ClassNotFoundException.

Запуск Jetty на Linux, я бы сделал это так:

java -DOPTIONS=plus -jar start.jar 

Однако, я не знаком с Windows. Возможно

Jetty-Service.exe -DOPTIONS=plus 

будет работать? Если нет, то найдите что-то, что установило бы системное свойство «ОПЦИИ» на «плюс», когда вы запускаете причал.