Как мне настроить Jetty 7 pre3 для использования источника JDBC oracle? - PullRequest
1 голос
/ 10 октября 2008

Все работает под Windows XP Pro SP2 / 32-bit.

Я скачал 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.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?

1 Ответ

2 голосов
/ 10 октября 2008

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

Предполагая, что в вашем файле jetty.xml настроен WebAppDeployer (или его эквивалент), попробуйте следующее:

<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 (если exe не делает этого для вас уже). Вы будете знать, что они не загружаются, потому что вы получите ClassNotFoundException при запуске.

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

java -DOPTIONS=plus -jar start.jar 

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

Jetty-Service.exe -DOPTIONS=plus

будет работать? Если нет, то найдите что-то, что установило бы системное свойство "OPTIONS" в "plus" при запуске jetty.

...