Ошибка JNDI Jetty в плагине Maven Jetty - PullRequest
3 голосов
/ 13 октября 2010

Я пытаюсь настроить источник данных JNDI, который можно использовать при вызове подключаемого модуля Maven Jetty.Я пытаюсь сделать это внешним по отношению к файлу WAR, так что любому, кто позже сможет развернуть наше веб-приложение с Jetty, не придется редактировать файл конфигурации в каталоге WEB-INF WAR.Я создал файл jetty.xml следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
 <!-- Atomikos XA aware (but not XA capable) JDBC data source -->
 <New id="sbeDataSource" class="org.mortbay.jetty.plus.naming.Resource">
  <Arg>jdbc/myDataSource</Arg>
  <Arg>
   <New class="com.atomikos.jdbc.nonxa.AtomikosNonXADataSourceBean">
    .......
   </New>
  </Arg>
 </New> 
</Configure>

Затем я сослался на этот файл из плагина Maven следующим образом:

 <plugin>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>maven-jetty-plugin</artifactId>
  <configuration>
   <jettyConfig>config/jetty.xml</jettyConfig>
  </configuration>
 </plugin>

Однако, когда я пытаюсь запустить веб-приложение черезmvn jetty: run-war Я получаю следующую ошибку:

Embedded error: 
Object is not of type class org.mortbay.jetty.webapp.WebAppContext

Если я опускаю элемент верхнего уровня <Configure> и просто пытаюсь создать новый ресурс JNDI напрямую через:

<New id="sbeDataSource" class="org.mortbay.jetty.plus.naming.Resource">

Тогда я получаю похожую ошибку:

Embedded error:
Object is not of type class org.mortbay.jetty.plus.naming.Resource

Что дает?

Ответы [ 2 ]

3 голосов
/ 13 октября 2010

Согласно документации , записи имен, объявленные в jetty.xml, должны быть jvm или Сервер в области:

Как видите, самый естественный файлы конфигурации, в которых можно объявить именования записей каждой области видимости:

  • jetty.xml - jvm или область действия сервера
  • WEB-INF / jetty-env.xml или контекстный xml-файл - область веб-приложения

Итак, ваш jetty.xml должен содержать что-то вроде этого:

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure id="Server" class="org.mortbay.jetty.Server">
 <!-- Atomikos XA aware (but not XA capable) JDBC data source -->
 <New id="sbeDataSource" class="org.mortbay.jetty.plus.naming.Resource">
  <Arg>jdbc/myDataSource</Arg>
  <Arg>
   <New class="com.atomikos.jdbc.nonxa.AtomikosNonXADataSourceBean">
    .......
   </New>
  </Arg>
 </New> 
</Configure>
2 голосов
/ 13 октября 2010

В дополнение к ответу Pascal Thivent ваш jetty.xml на самом деле выглядит как jetty-env.xml, поэтому вы можете настроить maven-jetty-plugin для его использования с <jettyEnvXml>:

<plugin> 
  <groupId>org.mortbay.jetty</groupId> 
  <artifactId>maven-jetty-plugin</artifactId> 
  <configuration> 
   <jettyEnvXml>config/jetty.xml</jettyEnvXml> 
  </configuration> 
</plugin>
...