Как мне настроить Jetty 7 pre3 для использования исходного кода oracle JDBC?

#java #xml #jdbc #jetty #jndi

Вопрос:

Все это работает под управлением Windows XP Pro SP2/32-разрядной версии.

Я скачал 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:jetty-7.0.0pre3bin и другие папки)
я поместил свое веб-приложение в C:jetty-7.0.0pre3webapps

У меня есть ссылка на ресурс в моем 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.0pre3libplusjetty-plus-7.0.0pre3.jar находится на пути к классу. В той же консоли:

 C:jetty-7.0.0pre3>set classpath
CLASSPATH=C:Program FilesIBMWebSphere MQJavalibproviderutil.jar;C:Program
 FilesIBMWebSphere MQJavalibcom.ibm.mqjms.jar;C:Program FilesIBMWebSpher
e MQJavalibldap.jar;C:Program FilesIBMWebSphere MQJavalibjta.jar;C:Pro
gram FilesIBMWebSphere MQJavalibjndi.jar;C:Program FilesIBMWebSphere MQ
Javalibjms.jar;C:Program FilesIBMWebSphere MQJavalibconnector.jar;C:Pro
gram FilesIBMWebSphere MQJavalibfscontext.jar;C:Program FilesIBMWebSpher
e MQJavalibcom.ibm.mq.jar;.;c:Program FilesJavajdk1.5.0_05classes;C:Prog
ram FilesJavajre1.5.0_05libextQTJava.zip;C:Program FilesJavajre1.5.0_05
libspring.jar;c:jetty-7.0.0pre3libplusjetty-plus-7.0.0pre3.jar
 

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

Ответ №1:

Проблема в том, что 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>
 

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

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

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

 java -DOPTIONS=plus -jar start.jar 
 

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

 Jetty-Service.exe -DOPTIONS=plus
 

сработало бы? Если нет, то найдите что-нибудь, что установило бы системное свойство «ПАРАМЕТРЫ» в «плюс» при запуске jetty.