3

我正在尝试配置可以通过调用 Maven Jetty 插件来使用的 JNDI 数据源。我正在尝试在 WAR 文件外部执行此操作,以便以后可能使用 Jetty 部署我们的 webapp 的任何人都不必编辑 WAR 的 WEB-INF 目录中的配置文件。我创建了一个 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 运行 webapp 时,出现以下错误:

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

是什么赋予了?

4

2 回答 2

3

根据文档,在 中声明的命名条目jetty.xml应该是jvm服务器范围:

如您所见,在其中声明每个范围的命名条目的最自然的配置文件是:

  • jetty.xml - jvm 或服务器范围
  • WEB-INF/jetty-env.xml 或上下文 xml 文件 - webapp 范围

所以你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>
于 2010-10-13T17:55:16.620 回答
2

除了 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>
于 2010-10-13T18:00:57.687 回答