Maven Jetty 插件中的 Jetty JNDI 错误

发布于 2024-09-28 00:11:09 字数 1581 浏览 3 评论 0原文

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

Embedded error: 
Object is not of type class org.mortbay.jetty.webapp.WebAppContext

如果我省略了顶部level 元素并尝试直接通过以下方式创建新的 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

什么给出了?

I am trying to configure a JNDI data source that can be used from an invocation of the Maven Jetty Plugin. I am trying to do this external to the WAR file, so that anyone who might later deploy our webapp with Jetty will not have to edit a configuration file inside the WAR's WEB-INF directory. I created a jetty.xml file as follows:

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

I then referenced this file from within the Maven plugin as follows:

 <plugin>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>maven-jetty-plugin</artifactId>
  <configuration>
   <jettyConfig>config/jetty.xml</jettyConfig>
  </configuration>
 </plugin>

However when I attempt to run the webapp via mvn jetty:run-war I get the following error:

Embedded error: 
Object is not of type class org.mortbay.jetty.webapp.WebAppContext

If I leave out the top level <Configure> element and just try to create a new JNDI resource directly via:

<New id="sbeDataSource" class="org.mortbay.jetty.plus.naming.Resource">

Then I get a similar error:

Embedded error:
Object is not of type class org.mortbay.jetty.plus.naming.Resource

What gives?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

何止钟意 2024-10-05 00:11:09

根据文档,在jetty.xml 应该是 jvmServer 范围:

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

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

因此您的 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>

According to the documentation, naming entries declared in the jetty.xml are supposed to be jvm or Server scoped:

As you can see, the most natural
config files in which to declare
naming entries of each scope are:

  • jetty.xml - jvm or Server scope
  • WEB-INF/jetty-env.xml or a context xml file - webapp scope

So your jetty.xml should contain something like this:

<?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>
倾城°AllureLove 2024-10-05 00:11:09

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

<plugin> 
  <groupId>org.mortbay.jetty</groupId> 
  <artifactId>maven-jetty-plugin</artifactId> 
  <configuration> 
   <jettyEnvXml>config/jetty.xml</jettyEnvXml> 
  </configuration> 
</plugin>

In addition to Pascal Thivent's answer, your jetty.xml actually looks like jetty-env.xml, so you can configure maven-jetty-plugin to use it with <jettyEnvXml>:

<plugin> 
  <groupId>org.mortbay.jetty</groupId> 
  <artifactId>maven-jetty-plugin</artifactId> 
  <configuration> 
   <jettyEnvXml>config/jetty.xml</jettyEnvXml> 
  </configuration> 
</plugin>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文