Jetty run от IntelliJ не будет читать jetty-env.xml - PullRequest
2 голосов
/ 05 декабря 2011

Я отлаживаю в IntelliJ, и, поскольку мне не удается запустить JBoss (из-за проблем с контекстом и именами виртуальных хостов), я использую Jetty 6.1.26. Я смог запустить и отладить, используя строку подключения к БД, которая не включала jndi.

Теперь мне нужно использовать Jndi, и я не могу заставить Jetty найти его. Я создал файл jetty-env.xml в каталоге WEB-INF следующим образом:

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">

<Configure id="wac" class="org.mortbay.jetty.webapp.WebAppContext">
    <New id="jdbc.datasource" class="org.eclipse.jetty.plus.jndi.Resource">
        <Arg><Ref id="wac"/></Arg>
        <Arg>jdbc/datasourceArg>
        <Arg>
            <New class="oracle.jdbc.pool.OracleDataSource">
                <Set name="URL">jdbc:oracle:thin:@localhost:1521:xe</Set>
                <Set name="User">user</Set>
                <Set name="Password">password</Set>
            </New>
        </Arg>
    </New>
</Configure>

web.inf имеет эту ссылку:

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

как таковой

и затем контекст приложения создает с ним bean-компонент:

<jee:jndi-lookup id="jndiDataSource" jndi-name="jdbc.datasource"/>

Когда я запускаю jetty, он сообщает, что не может найти источник данных, поэтому не может создать компонент и приложение не запускается.

Я подозреваю, что проблема в том, что Jetty на самом деле не читает XML-файл. Я положил туда мусор, чтобы увидеть и убедиться, что при запуске вообще не было ошибок.

Я добавил плюс к моей пристани xml

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

и я ссылался на плюс xml из настройки сервера Jetty в IntelliJ.

Я в своем уме. Все в Интернете говорит мне, что Jetty автоматически сканирует этот каталог на наличие этого файла, но, похоже, для меня этого не происходит.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Более полувека спустя у меня возникла та же проблема: jetty run-war run config не получал файл jetty-env.xml, который я определил в своих ресурсах сборки.

Исправление оказалось обновляющим командную строку конфигурации запуска для включения этапа жизненного цикла compile, полностью clean compile jetty:run-war -f pom.xml.

0 голосов
/ 06 декабря 2011

Ваша проблема не выглядит как вызванная Intellij IDEA. Я бы посоветовал вам попробовать запустить Jetty с вашим артефактом и стартапом. Конфигурация без IDEA и сравнить результаты. Если есть какая-то разница, отправьте сообщение об ошибке .

Я не знаком с конфигурацией источников данных, но могу указать на некоторые Возможные проблемы с вашей конфигурацией:

  1. в файле jetty-env.xml под xpath /Configure/New/@class следует быть "org.mortbay.jetty.plus.naming.Resource" вместо "org.eclipse.jetty.plus.jndi.Resource", так как корневой пакет Jetty 6.1.26 is "org.mortbay.jetty" и он был изменен на "org.eclipse.jetty" с более поздней версией сервер. Обратите внимание, что последняя часть пакета также отличается ("naming", а не "jndi")

  2. в файле jetty-env.xml под xpath /Configure/New/@id должно быть "datasource" вместо "jdbc.datasource" (идентификатор без префикса)

  3. в файле jetty-env.xml первый <Arg> (содержащий <Ref id="wac"/>) выглядит не обязательно

  4. в файле jetty-env.xml второй <Arg> не правильно закрыт (выглядит как опечатка)

  5. в файле web.xml (не web.inf) <res-ref-name> должно содержать "jdbc/datasource" вместо "jdbc.datasource", а также в <jee:jndi-lookup> атрибут jndi-name должен быть "jdbc/datasource" вместо "jdbc.datasource", потому что "jdbc/" (не "jdbc.") является общим префиксом для имен источников данных в Jetty.

  6. Я бы рекомендовал изменить идентификатор источника данных на несколько более настроенный, чем просто "datasource", скажем, по крайней мере, "myDatasource"

Очки 2 , 3 и 5 взяты из следующих статей:

...