2012-04-18 17 views
5

Estoy tratando de implementar una aplicación para Apache Felix. Era una aplicación gwt, pero he estado simplificando el problema hasta que apareció un archivo hello world html, así que mi problema es implementar cualquier tipo de aplicación web en un archivo war. También intenté desplegar las guerras generadas en Apache Karaf y funcionaron sin problemas (una vez que install feature war).¿Implementar archivos de guerra en Apache Felix?

Por lo tanto, ahora tengo esto:

[email protected]:~/devel/webapp $ tree 
. 
├── pom.xml 
├── src 
   └── main 
    ├── resources 
    └── webapp 
     ├── foobar.html 
      └── WEB-INF 
      └── web.xml 

El pom.xml es bastante sencillo, la parte interesante está relacionado con el plugin Felix, pero para esta guerra sin ningún código compilado no importa. ..

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.mycompany</groupId> 
<artifactId>webapp</artifactId> 
<packaging>war</packaging> 
<version>1.0-SNAPSHOT</version> 
<name>webapp Maven Webapp</name> 
<url>http://maven.apache.org</url> 
<dependencies> 
    <dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>servlet-api</artifactId> 
    <version>2.5</version> 
    <scope>provided</scope> 
    </dependency> 
</dependencies> 
<build> 
    <finalName>webapp</finalName> 

    <plugins> 
    <plugin> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     <version>2.3.7</version> 
     <extensions>true</extensions> 
     <executions> 
     <execution> 
      <id>bundle-manifest</id> 
      <phase>process-classes</phase> 
      <goals> 
      <goal>manifest</goal> 
      </goals> 
     </execution> 
     </executions> 
     <configuration> 
     <supportedProjectTypes> 
      <supportedProjectType>jar</supportedProjectType> 
      <supportedProjectType>bundle</supportedProjectType> 
      <supportedProjectType>war</supportedProjectType> 
     </supportedProjectTypes> 
     <instructions> 
      <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
      <Bundle-Version>${project.version}</Bundle-Version> 
      <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency> 
      <Embed-Directory>WEB-INF/lib</Embed-Directory> 
      <Embed-Transitive>true</Embed-Transitive> 
      <Import-Package>*;resolution:=optional</Import-Package> 
      <Web-ContextPath>/sample</Web-ContextPath> 
      <Webapp-Context>/sample</Webapp-Context> 
      <_wab>src/main/webapp</_wab> 
     </instructions> 
     </configuration> 
    </plugin> 


    <plugin> 
     <groupId>org.ops4j</groupId> 
     <artifactId>maven-pax-plugin</artifactId> 
     <configuration> 
     <provision> 
      <param>--platform=felix</param> 
      <param>--profiles=compendium,web,war,log</param> 
      <param>--log=debug</param> 
     </provision> 
     </configuration> 
    </plugin> 

    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.1.1</version> 
     <executions> 
     <execution> 
      <phase>compile</phase> 
      <goals> 
      <goal>exploded</goal> 
      </goals> 
     </execution> 
     </executions> 
     <configuration> 
     <webappDirectory>${webappDirectory}</webappDirectory> 
     <archive> 
      <!-- add the generated manifest to the war --> 
      <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile> 
     </archive> 
     </configuration> 
    </plugin> 

    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.3.2</version> 
     <configuration> 
     <source>1.6</source> 
     <target>1.6</target> 
     </configuration> 
    </plugin> 
</plugins> 
</build> 
</project> 

la pax plugin también está allí porque he tratado de ejecutar la aplicación con eso, pero me dio el mismo resultado. El web.xml es un uno vacío:

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" > 

<web-app> 
    <display-name>Archetype Created Web Application</display-name> 
    <welcome-file-list> 
    <welcome-file>foobar.html</welcome-file> 
    </welcome-file-list> 
</web-app> 

Una vez que ejecute mvn package para generar el archivo de la guerra, si puedo implementar en Apache Felix consigo ningún error, el estado de paquete está activa, pero solo me dan 404 errores al intentar acceder/muestrear rutas. Intenté poner tanto muestra como muestra como valores de ruta de contexto. El mismo comportamiento ocurre al ejecutar mvn pax: ejecutar. Si despliego la guerra en Apache karaf, funciona, así que supongo que estoy haciendo algo realmente malo con Felix.

Mi lista actualizada de paquetes es:

g! lb 
START LEVEL 1 
ID|State  |Level|Name 
0|Active  | 0|System Bundle (4.0.2) 
1|Active  | 1|JXSE (2.7.0) 
2|Active  | 1|Apache Felix Bundle Repository (1.6.6) 
3|Active  | 1|Apache Felix Configuration Admin Service (1.2.8) 
4|Active  | 1|Apache Felix EventAdmin (1.2.14) 
5|Active  | 1|Apache Felix File Install (3.2.0) 
7|Resolved | 1|Apache Felix Security Provider (2.0.1) 
8|Active  | 1|Apache Felix Gogo Command (0.12.0) 
9|Active  | 1|Apache Felix Gogo Runtime (0.10.0) 
10|Active  | 1|Apache Felix Gogo Shell (0.10.0) 
11|Active  | 1|Apache Felix Http Api (2.2.0) 
12|Active  | 1|Apache Felix Http Base (2.2.0) 
13|Active  | 1|Apache Felix Http Bridge (2.2.0) 
14|Active  | 1|Apache Felix Http Bundle (2.2.0) 
15|Active  | 1|Apache Felix Http Jetty (2.2.0) 
16|Active  | 1|Apache Felix Log Service (1.0.1) 
17|Active  | 1|Apache Felix Shell Service (1.4.2) 
18|Active  | 1|OPS4J Pax Logging - API (1.6.3) 
19|Active  | 1|OPS4J Pax Logging - Service (1.6.3) 
20|Active  | 1|OPS4J Pax Url - mvn: (1.2.8) 
21|Active  | 1|OPS4J Pax Url - war (1.2.8) 
22|Active  | 1|OPS4J Pax Url - wrap: (1.2.8) 
23|Active  | 1|OPS4J Pax Web - API (1.0.9) 
24|Active  | 1|OPS4J Pax Web - FileInstall Deployer (1.0.9) 
25|Active  | 1|OPS4J Pax Web - Extender - WAR (1.0.9) 
26|Active  | 1|OPS4J Pax Web - Extender - Whiteboard (1.0.9) 
27|Active  | 1|OPS4J Pax Web - Jetty Bundle (1.0.9) 
28|Active  | 1|OPS4J Pax Web - Jsp Support (1.0.9) 
29|Active  | 1|OPS4J Pax Web - Runtime (1.0.9) 
30|Active  | 1|OPS4J Pax Web - Service SPI (1.0.9) 
+0

Lo que verificaría a continuación en la consola es si su paquete (que no parece estar incluido en la lista anterior, pero supongo que acaba de ser corregido por concisión) está usando un servicio HTTP. Si es así, tienes un puerto o una URL equivocados. Si no es así, pax-web no está notando su WAB por una razón u otra. –

+1

También sugiero probar en un contenedor de equinoccio (--platform = equinox) para confirmar que el contenedor OSGi no es el problema. Sospecho que verás el mismo comportamiento con el equinoccio, sugiriendo que es un paquete de pax-web faltante o un problema pax-runner o un error pax-web o un puerto en cuclillas, pero no Félix. –

Respuesta

3

Los paquetes que estaban haciendo el trabajo eran los OPS4J- *, pero los que ejecutan el embarcadero eran org.apache.felix.http *.. Una vez que eliminé org.apache.felix.http. * todo comenzó a funcionar.

+2

Deberías aceptar tu propia respuesta =) – earcam

Cuestiones relacionadas