将Struts2 OSGi插件与GlassFish一起使用

将Struts2 OSGi插件与GlassFish一起使用,struts2,glassfish,osgi,Struts2,Glassfish,Osgi,我试图了解Struts2 OSGi插件是如何工作的,因此我首先尝试部署随附的测试应用程序。我已从WEB-INF/classes/bundles/2文件夹中删除了所有捆绑包,并尝试一次添加一个,以便更好地解决问题。我面临的问题如下: (1) 当我尝试包含MyOsgi.jar捆绑包(它是一个空捆绑包,只包含一个实现BundleActivator的类)时,我在应用程序部署过程中遇到以下错误: [#|2013-01-07T18:32:14.425+0200严重的glassfish3.1.2 | java

我试图了解Struts2 OSGi插件是如何工作的,因此我首先尝试部署随附的测试应用程序。我已从WEB-INF/classes/bundles/2文件夹中删除了所有捆绑包,并尝试一次添加一个,以便更好地解决问题。我面临的问题如下:

(1) 当我尝试包含MyOsgi.jar捆绑包(它是一个空捆绑包,只包含一个实现BundleActivator的类)时,我在应用程序部署过程中遇到以下错误:

[#|2013-01-07T18:32:14.425+0200严重的glassfish3.1.2 | javax.enterprise.system.std.com.sun.enterprise.server.logging | u ThreadID=105;| u ThreadName=Thread-2;| java.lang.ClassCastException: myosgi.Activator不能强制转换为org.osgi.framework.BundleActivator 位于org.apache.felix.framework.felix.createBundleActivator(felix.java:3548) 位于org.apache.felix.framework.felix._startBundle(felix.java:1666) 位于org.apache.felix.framework.felix.startBundle(felix.java:1588) 位于org.apache.felix.framework.felix.setFrameworkStartLevel(felix.java:1180) 位于org.apache.felix.framework.startevelimpl.run(startevelimpl.java:265) 运行(Thread.java:722) |#][#|2013-01-07T18:32:14.513+0200严重glassfish3.1.2 | javax.enterprise.system.std.com.sun.enterprise.server.logging | u ThreadID=105;| u ThreadName=Thread-2;| at org.apache.felix.framework.felix.createBundleActivator(felix.java:3548)|#][2013-01-07T18:32:14.513+0200 | SEVERE | glassfish3.1.2 | javax.enterprise.system.std.com.sun.enterprise.server.logging | u ThreadID=105;| u ThreadName=Thread-2;| at org.apache.felix.framework.felix.|startBundle(felix.java:1666)| |][| | 2013-01-07T18:32:14.513+0200 | SEVERE | glassfish3.1.2 | javax.enterprise.system.std.com.sun.enterprise.server.logging | | | | ThreadID=105;| ThreadName=Thread 2;| at org.apache.felix.framework.felix.startBundle(felix.java:1588)|#][2013-01-07T18:32:14.513+0200 | SEVERE | glassfish3.1.2 | javax.enterprise.system.std.com.sun.enterprise.server.logging | u ThreadID=105;| u ThreadName=Thread-2;| at org.apache.felix.framework.felix.setFrameworkStartLevel(felix.java:1180)|#]
[#|2013-01-07T18:32:14.514+0200 |严重| glassfish3.1.2 | javax.enterprise.system.std.com.sun.enterprise.server.logging | u ThreadID=105;| u ThreadName=Thread-2;| at org.apache.felix.framework.startevelimpl.run(startevelimpl.java:265)|#]
[#|2013-01-07T18:32:14.514+0200 |严重| glassfish3.1.2 | javax.enterprise.system.std.com.sun.enterprise.server.logging | u ThreadID=105;| u ThreadName=Thread-2;| at java.lang.Thread.run(Thread.java:722)|#]

根据上述错误,这是因为JVM中加载了多个BundleActivator类,这是有道理的,因为包含它的felix.jar已经在GlassFish中可用,并且我的应用程序中包含了许多felix jar作为Struts2 OSGi插件的依赖项。我已经尝试从插件中排除felix依赖项(我正在使用Maven构建应用程序),但这不起作用,因为作为依赖项包含的felix jar还包括felix.jar中不存在的其他类

(2) 当我尝试包含struts2-osgi-demo-bundle-2.3.1捆绑包时,我得到了一个完全不同的错误,我不知道可能的原因是什么:

[#|2013-01-07T18:30:02.897+0200严重的glassfish3.1.2 | javax.enterprise.system.container.web.com.sun.enterprise.web | u ThreadID=42;| u ThreadName=Thread-2;| WebModule[/osgi PWC1270: 启动筛选器struts2 java.lang.LinkageError时出现异常:loader 约束冲突:加载程序(的实例) org/apache/felix/framework/searchpolicy/ContentClassLoader) 已为名称为的其他类型启动加载 “org/osgi/framework/BundleContext”位于 位于的java.lang.Class.getDeclaredMethods0(本机方法) privateGetDeclaredMethods(Class.java:2442)位于 privateGetPublicMethods(Class.java:2562)位于 getMethods(Class.java:1427)位于 org.apache.struts2.convention.PackageBasedActionConfigBuilder.getActionAnnotations(PackageBasedActionConfigBuilder.java:792) 在 org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildConfiguration(PackageBasedActionConfigBuilder.java:605) 在 org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:335) 在 org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:53) 在 org.apache.struts2.osgi.OsgiConfigurationProvider.loadConfigFromBundle(OsgiConfigurationProvider.java:146) 在 org.apache.struts2.osgi.OsgiConfigurationProvider.loadPackages(OsgiConfigurationProvider.java:96) 在 com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:215) 在 com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66) 在 org.apache.struts2.dispatcher.dispatcher.init\u预配置(dispatcher.java:390)位于org.apache.struts2.dispatcher.dispatcher.init(dispatcher.java:436) 在 org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69) 在 org.apache.struts2.dispatcher.ng.filter.strutspreadexecutefilter.init(strutspreadexecutefilter.java:51) 在 org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:264) 在 org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:120) 在 org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4685) 在 org.apache.catalina.core.StandardContext.start(StandardContext.java:5377) 位于com.sun.enterprise.web.WebModule.start(WebModule.java:498) org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:917) 在 org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:901) 在 org.apache.c
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-osgi-plugin</artifactId>
    <version>2.3.1</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.main</artifactId>
         <exclusion>
    </exclusions>
</dependency>