Pregunta

Estoy tratando de configurar una fuente de datos JNDI que se puede utilizar de una invocación del embarcadero Maven Plugin. Estoy tratando de hacer esto externa para el archivo WAR, por lo que cualquier persona que más tarde podría desplegar nuestra aplicación web con embarcadero no tendrá que editar un archivo de configuración dentro del directorio WEB-INF de la guerra. He creado un archivo jetty.xml de la siguiente manera:

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

Entonces referencia a este archivo desde el plugin de Maven de la siguiente manera:

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

Sin embargo, cuando intenta ejecutar la aplicación Web a través de embarcadero mvn: gestión guerra me sale el siguiente error:

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

Si dejo el elemento de nivel superior <Configure> y sólo trato de crear un nuevo recurso JNDI directamente a través de:

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

A continuación, aparece un error similar:

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

Lo que da?

¿Fue útil?

Solución

Además de la respuesta de Pascal Thivent, su jetty.xml en realidad parece jetty-env.xml, para que pueda configurar Maven-embarcadero-plugin para usarlo con <jettyEnvXml>:

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

Otros consejos

De acuerdo con la documentación , las entradas de nombres declarado en el jetty.xml se supone que es < em> JVM o servidor de ámbito:

  

Como se puede ver, la más natural   archivos de configuración en la que asignar   nombrando entradas de cada ámbito de aplicación son:

     
      
  • jetty.xml - JVM o alcance del servidor
  •   
  • WEB-INF / embarcadero-env.xml o un contexto XML archivo - ámbito de aplicación web
  •   

Así que su jetty.xml debe contener algo como esto:

<?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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top