从IntelliJ运行的Jetty不会读取jetty-env.xml

时间:2011-12-05 10:29:49

标签: intellij-idea jetty jndi

我在IntelliJ中进行调试,因为我似乎无法运行JBoss(由于上下文和虚拟主机名称问题),我正在使用Jetty 6.1.26。我在使用不涉及jndi的数据库连接字符串时能够运行和调试。

现在,我需要使用Jndi,似乎无法让Jetty找到它。我已经在WEB-INF目录中创建了一个jetty-env.xml文件:

<?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时,它告诉我它找不到数据源,因此它无法创建bean并且应用程序无法启动。

我怀疑问题是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>

我从IntelliJ中的jetty服务器设置中引用了加号xml。

我在我的智慧结束。在线的一切都告诉我,jetty会自动扫描该目录中的这个文件,但它似乎对我来说似乎没有。

2 个答案:

答案 0 :(得分:0)

您的问题看起来不像Intellij IDEA造成的。 我建议你试着用你的神器和启动运行Jetty 没有IDEA的配置和比较结果。 如果存在一些差异,请submit a bug report

我不熟悉数据源配置,但能够指出一些 您的配置可能存在的问题:

    应该在xpath jetty-env.xml下的文件/Configure/New/@class
  1. "org.mortbay.jetty.plus.naming.Resource" 而不是"org.eclipse.jetty.plus.jndi.Resource",因为根包 码头 6.1.26 "org.mortbay.jetty" 它已被更改为"org.eclipse.jetty"以及更高版本的版本 服务器。 请注意,套餐的最后部分也有所不同("naming",而不是"jndi"

  2. xpath jetty-env.xml下的文件/Configure/New/@id中的
  3. 应该是 "datasource"代替"jdbc.datasource"(无前缀的身份证)

  4. 文件jetty-env.xml中的
  5. 第一个<Arg>(包含<Ref id="wac"/>) 看起来没必要

  6. 文件jetty-env.xml中的
  7. 第二个<Arg>未正确关闭(看起来 像一个错字)

  8. 文件web.xml(不是web.inf<res-ref-name>中应包含
  9. "jdbc/datasource"代替"jdbc.datasource", 以及<jee:jndi-lookup> jndi-name属性应该是。{ "jdbc/datasource"代替"jdbc.datasource", 因为"jdbc/"(不是"jdbc.")是数据源名称的公共前缀 码头。

  10. 我建议将数据源ID更改为更多 定制而不仅仅是"datasource",至少可以说是"myDatasource"

  11. 积分 2 3 5 取自以下文章:

答案 1 :(得分:0)

超过五年之后,我遇到了同样的问题:jetty run-war运行配置并没有获取我在构建资源中定义的jetty-env.xml。

此修复程序最终更新了运行配置的命令行,以完整compile包含clean compile jetty:run-war -f pom.xml生命周期阶段。