Java Maven Jetty插件中的Jetty JNDI错误

Java Maven Jetty插件中的Jetty JNDI错误,java,maven-2,jetty,jndi,maven-jetty-plugin,Java,Maven 2,Jetty,Jndi,Maven Jetty Plugin,我试图配置一个JNDI数据源,该数据源可以通过调用Maven Jetty插件来使用。我尝试在WAR文件外部执行此操作,以便以后可能使用Jetty部署我们的webapp的任何人都不必在WAR的WEB-INF目录中编辑配置文件。我创建了一个jetty.xml文件,如下所示: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure/

我试图配置一个JNDI数据源,该数据源可以通过调用Maven Jetty插件来使用。我尝试在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>
 <plugin>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>maven-jetty-plugin</artifactId>
  <configuration>
   <jettyConfig>config/jetty.xml</jettyConfig>
  </configuration>
 </plugin>
如果我省略了顶层的
元素,而只是尝试通过以下方式直接创建一个新的JNDI资源:

<New id="sbeDataSource" class="org.mortbay.jetty.plus.naming.Resource">
给出了什么?

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

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

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

jdbc/myDataSource
.......

除了Pascal Thivent的答案之外,您的
jetty.xml
实际上看起来像
jetty env.xml
,因此您可以配置maven jetty插件以将其与
一起使用:


org.mortbay.jetty
maven jetty插件
config/jetty.xml

我发誓我读了50遍maven jetty插件文档,但从未见过该配置选项。我猜部分原因是因为该选项的文档仅在“运行”目标下。但它用白纸黑字清楚地说明:
jettyEnvXml可选。它是jetty-env.xml文件的位置,允许您创建满足的JNDI绑定,以及web.xml中的链接,这些链接的作用域仅限于webapp,而不与您可能同时部署的其他webapp共享(例如通过使用jettyConfig文件)。
hi Pascal,id=“Server”的用途是什么?它只是一个IoCbean对象ID(对于org.mortbay.jetty.Server),还是应该链接到任何其他特定的jetty配置中(类似于部署描述符资源引用中的ID=“sbeDataSource”?
Embedded error:
Object is not of type class org.mortbay.jetty.plus.naming.Resource
<?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>
<plugin> 
  <groupId>org.mortbay.jetty</groupId> 
  <artifactId>maven-jetty-plugin</artifactId> 
  <configuration> 
   <jettyEnvXml>config/jetty.xml</jettyEnvXml> 
  </configuration> 
</plugin>