Maven Jetty插件中的Jetty JNDI错误

时间:2010-10-13 16:17:26

标签: java maven-2 jetty jndi maven-jetty-plugin

我正在尝试配置可以从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运行webapp时: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 个答案:

答案 0 :(得分:3)

根据documentationjetty.xml中声明的命名条目应该是 jvm Server 作用域:

  

正如你所看到的,最自然的   配置要声明的文件   每个范围的命名条目是:

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

答案 1 :(得分: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>