java - Apache Felix 与 Pax Web War Extender 启动 bundle 时出错

标签 java jersey osgi apache-felix pax-web

我正在使用 Osgi 和 Apache Felix 进行开发,但遇到了这个问题。 当我在 Apache Felix 上安装并启动 Jersey 项目之战时,我得到以下信息:

org.ops4j.pax.web.pax-web-extender-war[org.ops4j.pax.web.extender.war.internal.Activator] : Starting destruction process for bundle platform-component-web-rest-service-authentication
org.ops4j.pax.web.pax-web-extender-war[org.ops4j.pax.web.extender.war.internal.Activator] : Not an extended bundle or destruction of extension already finished for platform-component-web-rest-service-authentication.
Started activator
org.ops4j.pax.web.pax-web-extender-war[org.ops4j.pax.web.extender.war.internal.WebObserver] : Ignore bundle platform-component-web-rest-service-authentication [193] which is not compatible with this extender

我安装了这些 bundle :

    0|Active     |    0|System Bundle (4.4.1)
    1|Active     |    1|Apache Felix Bundle Repository (2.0.2)
    2|Active     |    1|Apache Felix Gogo Command (0.14.0)
    4|Active     |    1|Apache Felix Gogo Shell (0.10.0)
   10|Active     |    1|Apache Felix Configuration Admin Service (1.2.8)
   11|Active     |    1|Apache Felix EventAdmin (1.2.10)
   35|Active     |    1|Apache Felix Gogo Runtime (0.12.1)
   90|Active     |    1|Apache Felix Log Service (1.0.0)
   91|Active     |    1|OSGi R4 Compendium Bundle (4.0.0)
   92|Active     |    1|Apache Felix Declarative Services (1.6.0)
   93|Active     |    1|Apache Felix iPOJO (1.8.0)
   94|Active     |    1|Apache Felix Web Management Console (3.1.2)
   95|Active     |    1|Apache Felix iPOJO WebConsole Plugins (1.6.0)
   96|Active     |    1|Apache Felix Shell Service (1.4.2)
  119|Active     |    1|Servlet 2.1 API (1.0.0)
  144|Active     |    1|OSGi JAX-RS Connector (4.1.0.201407081443)
  147|Active     |    1|jersey-all (2.10.1)
  157|Active     |    1|OPS4J Pax Web - Jetty Bundle (4.0.0)
  158|Active     |    1|OPS4J Pax Web - Runtime (4.0.0)
  163|Active     |    1|http://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.7/slf4j-api-1.7.7-sources.jar (0.0.0)
  165|Active     |    1|Java Servlet API (3.0.1)
  167|Active     |    1|OPS4J Pax Logging - API (1.8.1)
  170|Active     |    1|Apache Felix Dependency Manager (3.2.0)
  171|Active     |    1|OPS4J Pax Web - Extender - WAR (4.0.0)
  174|Active     |    1|Apache Felix Dependency Manager Runtime (3.2.0)
  177|Active     |    1|ASM (5.0.3)
  178|Active     |    1|ASM commons classes (5.0.3)
  179|Active     |    1|ASM Tree class visitor (5.0.3)
  182|Active     |    1|Apache XBean OSGI Bundle Utilities (3.18.0)
  183|Active     |    1|Apache XBean :: Classpath Resource Finder (3.18.0)
  193|Active     |    1|Auth Test (2.0.0.SNAPSHOT)

我的激活器是标准的:

public class WebAppContextListener implements BundleActivator, ServletContextListener {

static EventAdmin ea;

BundleContext bc;
ServiceReference eaRef;

synchronized static EventAdmin getEa() {
    return ea;
}

synchronized static void setEa(EventAdmin ea) {
    WebAppContextListener.ea = ea;
}

@Override
public void contextInitialized(final ServletContextEvent sce) {
    if (getEa() != null) {
        final String contextPath = sce.getServletContext().getContextPath();
        getEa().sendEvent(new Event("jersey/test/DEPLOYED",new HashMap<String, String>(){{
            put("context-path", contextPath);}}));
    }
}

@Override
public void contextDestroyed(final ServletContextEvent sce) {
    if (getEa() != null) {
        getEa().sendEvent(new Event("jersey/test/UNDEPLOYED",new HashMap<String, String>(){{put("context-path", sce.getServletContext().getContextPath());}}));
    }
}

@Override
public void start(BundleContext context) throws Exception {
    System.out.println("Started Activator");
    bc = context;
    eaRef = bc.getServiceReference(EventAdmin.class.getName());
    if (eaRef != null) {
        setEa((EventAdmin)bc.getService(eaRef));
    }
}

@Override
public void stop(BundleContext context) throws Exception {
    if (eaRef != null) {
        setEa(null);
        bc.ungetService(eaRef);
    }
}

}

我的 MANIFEST.MF 看起来像:

Manifest-Version: 1.0
Export-Package: com.mycompany.platform.component.web.rest.service.authent
 ication.services;uses:="org.osgi.service.event,org.osgi.framework";ve
 rsion="2.0.0.SNAPSHOT"
Embed-Directory: WEB-INF/lib
Implementation-Title: Auth Test
Bundle-ClassPath: .,WEB-INF/classes,WEB-INF/lib/hk2-api-2.3.0-b10.jar,
 WEB-INF/lib/oro-2.0.8.jar,WEB-INF/lib/jcs-1.3.jar,WEB-INF/lib/concurr
 ent-1.0.jar,WEB-INF/lib/log4j-1.2.12.jar,WEB-INF/lib/mimepull-1.8.jar
 ,WEB-INF/lib/commons-dbcp-1.4.jar,WEB-INF/lib/jersey-client-2.12.jar,
 WEB-INF/lib/osgi-resource-locator-1.0.1.jar,WEB-INF/lib/jackson-jaxrs
 -json-provider-2.4.1.jar,WEB-INF/lib/jazzy-0.5.1.jar,WEB-INF/lib/comm
 ons-beanutils-1.7.0.jar,WEB-INF/lib/bonecp-0.8.0.RELEASE.jar,WEB-INF/
 lib/json4s-core_2.11-3.2.10.jar,WEB-INF/lib/javax.servlet-api-3.0.1.j
 ar,WEB-INF/lib/snakeyaml-1.13.jar,WEB-INF/lib/swagger-annotations-1.3
 .8.jar,WEB-INF/lib/jsr305-2.0.1.jar,WEB-INF/lib/scala-library-2.11.1.
 jar,WEB-INF/lib/joda-convert-1.6.jar,WEB-INF/lib/commons-jxpath-1.2.j
 ar,WEB-INF/lib/scala-parser-combinators_2.11-1.0.1.jar,WEB-INF/lib/ja
 spell-0.3.jar,WEB-INF/lib/ant-optional-1.5.1.jar,WEB-INF/lib/platform
 -component-manager-user-2.0.0-SNAPSHOT.jar,WEB-INF/lib/platform-compo
 nent-manager-commons-2.0.0-SNAPSHOT.jar,WEB-INF/lib/metrics-core-3.1.
 0.jar,WEB-INF/lib/platform-component-manager-cache-2.0.0-SNAPSHOT.jar
 ,WEB-INF/lib/junit-4.11.jar,WEB-INF/lib/slf4j-api-1.7.5.jar,WEB-INF/l
 ib/commons-pool-1.3.jar,WEB-INF/lib/swagger-jersey2-jaxrs_2.11-1.3.8.
 jar,WEB-INF/lib/commons-beanutils-core-1.7.0.jar,WEB-INF/lib/json4s-e
 xt_2.11-3.2.10.jar,WEB-INF/lib/berkeleydb-1.5.1.jar,WEB-INF/lib/commo
 ns-lang-2.4.jar,WEB-INF/lib/validation-api-1.1.0.Final.jar,WEB-INF/li
 b/javassist-3.16.1-GA.jar,WEB-INF/lib/lib-utils-0.2.0.jar,WEB-INF/lib
 /xmlrpc-2.0.jar,WEB-INF/lib/paranamer-2.6.jar,WEB-INF/lib/jackson-cor
 e-2.4.1.jar,WEB-INF/lib/hk2-locator-2.3.0-b10.jar,WEB-INF/lib/commons
 -logging-1.1.jar,WEB-INF/lib/ojdbc6-11.2.0.4.jar,WEB-INF/lib/commons-
 io-2.4.jar,WEB-INF/lib/dom4j-1.6.1.jar,WEB-INF/lib/jackson-databind-2
 .4.1.1.jar,WEB-INF/lib/platform-component-service-authentication-comm
 ons-2.0.0-SNAPSHOT.jar,WEB-INF/lib/jackson-annotations-2.4.1.jar,WEB-
 INF/lib/platform-component-service-authentication-2.0.0-SNAPSHOT.jar,
 WEB-INF/lib/mysql-connector-java-5.1.32.jar,WEB-INF/lib/lib-utils-web
 -0.3.0.jar,WEB-INF/lib/platform-component-manager-tenant-2.0.0-SNAPSH
 OT.jar,WEB-INF/lib/scalap-2.11.0.jar,WEB-INF/lib/platform-component-w
 eb-rest-commons-2.0.0-SNAPSHOT.jar,WEB-INF/lib/postgresql-9.1-901.jdb
 c4.jar,WEB-INF/lib/jersey-guava-2.12.jar,WEB-INF/lib/jackson-jaxrs-ba
 se-2.4.1.jar,WEB-INF/lib/lib-language-en-0.1.1.jar,WEB-INF/lib/javax.
 annotation-api-1.2.jar,WEB-INF/lib/platform-component-service-commons
 -2.0.0-SNAPSHOT.jar,WEB-INF/lib/joda-time-2.3.jar,WEB-INF/lib/json4s-
 native_2.11-3.2.10.jar,WEB-INF/lib/sqljdbc4-4.0.jar,WEB-INF/lib/guice
 -3.0.jar,WEB-INF/lib/scala-xml_2.11-1.0.1.jar,WEB-INF/lib/jersey-serv
 er-2.12.jar,WEB-INF/lib/avalon-framework-4.1.3.jar,WEB-INF/lib/lib-la
 nguage-es-0.1.1.jar,WEB-INF/lib/jdom2-2.0.5.jar,WEB-INF/lib/xml-apis-
 1.0.b2.jar,WEB-INF/lib/commons-digester-1.8.jar,WEB-INF/lib/pdb-2.0.2
 .jar,WEB-INF/lib/jersey-container-servlet-2.12.jar,WEB-INF/lib/reflec
 tions-0.9.9-RC1.jar,WEB-INF/lib/lib-language-pt-0.1.1.jar,WEB-INF/lib
 /javax.inject-2.2.0-b10.jar,WEB-INF/lib/lib-language-commons-0.1.1.ja
 r,WEB-INF/lib/platform-commons-2.0.0-SNAPSHOT.jar,WEB-INF/lib/aopalli
 ance-1.0.jar,WEB-INF/lib/commons-codec-1.8.jar,WEB-INF/lib/logback-cl
 assic-1.0.13.jar,WEB-INF/lib/lucene-analyzers-common-4.5.1.jar,WEB-IN
 F/lib/commons-configuration-1.4.jar,WEB-INF/lib/scala-compiler-2.11.0
 .jar,WEB-INF/lib/jersey-container-servlet-core-2.1.jar,WEB-INF/lib/pl
 atform-component-manager-license-2.0.0-SNAPSHOT.jar,WEB-INF/lib/tomca
 t-util-3.2.1.jar,WEB-INF/lib/jackson-module-jsonSchema-2.4.1.jar,WEB-
 INF/lib/velocity-1.5.jar,WEB-INF/lib/scala-reflect-2.11.1.jar,WEB-INF
 /lib/hamcrest-core-1.3.jar,WEB-INF/lib/jersey-media-multipart-2.1.jar
 ,WEB-INF/lib/commons-logging-api-1.0.4.jar,WEB-INF/lib/logkit-1.0.1.j
 ar,WEB-INF/lib/jersey-common-2.12.jar,WEB-INF/lib/platform-component-
 manager-language-2.0.0-SNAPSHOT.jar,WEB-INF/lib/logback-core-1.0.13.j
 ar,WEB-INF/lib/platform-component-manager-database-2.0.0-SNAPSHOT.jar
 ,WEB-INF/lib/json4s-jackson_2.11-3.2.10.jar,WEB-INF/lib/javax.inject-
 1.jar,WEB-INF/lib/json4s-ast_2.11-3.2.10.jar,WEB-INF/lib/hk2-utils-2.
 3.0-b10.jar,WEB-INF/lib/guava-15.0.jar,WEB-INF/lib/commons-lang3-3.1.
 jar,WEB-INF/lib/gson-2.2.4.jar,WEB-INF/lib/jackson-module-jaxb-annota
 tions-2.4.1.jar,WEB-INF/lib/xerces-1.2.3.jar,WEB-INF/lib/liquibase-co
 re-3.2.2.jar,WEB-INF/lib/aopalliance-repackaged-2.3.0-b10.jar,WEB-INF
 /lib/swagger-core_2.11-1.3.8.jar,WEB-INF/lib/jackson-module-scala_2.1
 1-2.4.1.jar,WEB-INF/lib/swagger-jaxrs_2.11-1.3.8.jar,WEB-INF/lib/java
 x.ws.rs-api-2.0.1.jar
Built-By: jmartins
Tool: Bnd-0.0.357
Web-ContextPath: authentication
Implementation-Vendor: mycompany, Lda
Implementation-Vendor-Id: com.mycompany.platform.component.web.rest.servi
 ce
Embed-Transitive: true
Bundle-Activator: com.mycompany.platform.component.web.rest.service.authe
 ntication.services.WebAppContextListener
Specification-Title: Auth Test
Bundle-SymbolicName: platform-component-web-rest-service-authenticatio
 n
Webapp-Context: authentication
Implementation-Version: 2.0.0-SNAPSHOT
Specification-Vendor: mycompany, Lda
Bundle-Name: Auth Test
Created-By: 1.7.0_72 (Oracle Corporation)
Bundle-Vendor: mycompany, Lda
Build-Jdk: 1.7.0_72
Bundle-Version: 2.0.0.SNAPSHOT
Bnd-LastModified: 1415982968397
Bundle-ManifestVersion: 2
Embed-Dependency: *;scope=compile|runtime
Bundle-DocURL: http://mycompany.com
Import-Package: com.mycompany.platform.component.web.rest.service.authent
 ication.services;version="2.0",org.osgi.framework;version="1.5",org.o
 sgi.service.event;version="1.2"
Embed-StripGroup: true
Specification-Version: 2.0.0-SNAPSHOT
Archiver-Version: Plexus Archiver

例如,当我向 http://localhost:8080/authentication/rest/2.0.0/authentication/auth 发出请求时,我得到 404,似乎 war 甚至没有部署。 关于这可能是什么的任何想法吗?

最佳答案

不要将 servlet API 嵌入到您的应用程序中。

WEB-INF/lib/javax.servlet-api-3.0.1.j

ar 这不允许出现在 WAR 中(甚至不允许出现在标准应用程序容器中) 这可能已经是您的根本原因。

关于java - Apache Felix 与 Pax Web War Extender 启动 bundle 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26935177/

相关文章:

eclipse - 插件中何时需要 Activator 类/"Bundle-Activator",何时不需要?

java - MyBatis 查询中的参数未被替换

java - 从 JAR 运行时为 "No suitable driver found"

java - 无法使用 gwtext 运行 Web 应用程序

jersey - java.lang.IllegalArgumentException jersey.repackaged.org.objectweb.asm.ClassReader.(ClassReader.java :170)

OSGI 捆绑状态宽限期

java - 如何在开始时设置位置 - Google Maps API V2

rest - Jersey WebResource 的 PathParam

java - Restful Web 服务返回 404,错误的 web.xml?

java - 为什么我的 Karaf OSGI 包标记为不满意,当所有引用都满足时?