当前位置: 首页 > 知识库问答 >
问题:

如何在Equinox OSGi容器中部署Spring Boot应用程序。获取BundleException:加载捆绑激活器时出错

邹书
2023-03-14
package com.package.actprovider;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceListener;
import org.osgi.framework.ServiceRegistration;
import com.package.Application;
import org.osgi.framework.ServiceEvent;

/**
* This class implements a simple bundle that utilizes the OSGi
* framework's event mechanism to listen for service events. Upontting 
* receiving a service event, it prints out the event's details.
**/

public class Activator implements BundleActivator , ServiceListener{
private ServiceRegistration registration;
//private Application application;

/**
 * Implements BundleActivator.start(). Prints
 * a message and adds itself to the bundle context as a service
 * listener.
 * @param context the framework context for the bundle.
**/

@Override
public void start(BundleContext context)
{
    System.out.println("Starting to listen for service events.++++");
    context.addServiceListener(this);

}

/**
 * Implements BundleActivator.stop(). Prints
 * a message and removes itself from the bundle context as a
 * service listener.
 * @param context the framework context for the bundle.
**/
@Override
public void stop(BundleContext context)
{
    context.removeServiceListener(this);
    System.out.println("Stopped listening for service events.");
}

/**
 * Implements ServiceListener.serviceChanged().
 * Prints the details of any service event from the framework.
 * @param event the fired service event.
**/
public void serviceChanged(ServiceEvent event)
{
    String[] objectClass = (String[])
        event.getServiceReference().getProperty("objectClass");

    if (event.getType() == ServiceEvent.REGISTERED)
    {
        System.out.println(
            "Ex1: Service of type " + objectClass[0] + " registered.");
    }
    else if (event.getType() == ServiceEvent.UNREGISTERING)
    {
        System.out.println(
            "Ex1: Service of type " + objectClass[0] + " unregistered.");
    }
    else if (event.getType() == ServiceEvent.MODIFIED)
    {
        System.out.println(
            "Ex1: Service of type " + objectClass[0] + " modified.");
    }
}

}
Manifest-Version: 1.0
Bundle-Description: A bundle that displays messages at startup and whe
n service events occur
Bundle-Name: Service listener example
Bundle-Version: 1.0.0
Bundle-Activator: com.package.actprovider.Activator
Bundle-Vendor: Apache Felix
Import-Package: org.osgi.framework
Created-By: 1.8.0_101 (Oracle Corporation)

http://maven.apache.org/xsd/maven-4.0.0.xsd“>4.0.0

<groupId>com.package</groupId>
<artifactId>myfoo</artifactId>
<version>0.1.0</version>
<packaging>bundle</packaging>



<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.0.RELEASE</version>
    <relativePath />
</parent>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
            <execution>
                <phase>none</phase>
            </execution>
        </executions>
        </plugin>
        <!-- tag::plugin[] -->
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.4.9</version>
            <configuration>
                <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                <dockerDirectory>src/main/docker</dockerDirectory>
                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>


        <!-- <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> 
            <configuration> <archive> <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile> 
            </archive> </configuration> </plugin> -->
        <plugin>
\
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>

            <configuration>
                <archive>
                    <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
                </archive>
            </configuration>
        </plugin>

    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
    </dependency>
    <dependency>
        <groupId>sdp-api-java</groupId>
        <artifactId>sdp-api-java</artifactId>
        <version>1.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jersey</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.framework</artifactId>
        <version>2.0.4</version>
    </dependency>
</dependencies>

请建议我如何在osgi容器中添加spring-boot包

共有1个答案

郎思远
2023-03-14

Spring boot和OSGi是相互排斥的。你可以在一定程度上使用spring,但即使它也不能正常工作。

因此最佳实践是基于声明性服务或Blueprint构建OSGi应用程序。您还可以看看Apache Karaf对JPA、servlets等技术的支持...

这会比spring boot多做一点努力,但您应该能够解决相同的问题。

 类似资料:
  • 问题内容: 我陷入了Eclipse 4 RCP应用程序的一个问题。我需要记录一些事件。我需要以某种方式获得对记录器的引用。我知道如何使用来做到这一点,但是我仍然找不到在没有依赖注入的情况下如何获得的方法,而依赖注入无法在激活器中使用。有人知道吗,请问如何解决这个问题? 非常感谢 问题答案: 令人遗憾的是,没有注射就无法获得。关于如何在未附加到应用程序模型的类中使用eclipse 4 DI的答案中写

  • 问题内容: 我正在尝试在Eclipse中创建一个简单的插件。运行应用程序时,我在日志文件中看到此错误: org.osgi.framework.BundleException:捆绑包org.xy的激活器捆绑包org.xy的激活器无效。 您对此错误有任何想法吗? 问题答案: 检查你的 部分 如果未正确指定最终二进制结果中应包含的内容,它将无法正常工作。检查.class文件是否在MANIFEST.MF所

  • 我正在开发一个简单的应用程序来演示Apache Karaf的使用。我在eclipse.Now开发了一个简单的基于maven的动态Web项目,我想在apache中部署它karaf.Following代码- POM中的家属。可扩展标记语言 MANIFEST.MF 自定义清单文件的给定路径 现在每当我试图在karaf中安装应用程序时,使用- 我得到错误作为- 执行命令时出错:安装软件包时出错:无法安装软

  • 在LXD容器中,应用程序应该如何编写脚本/自动部署? 例如,在LXD容器中部署应用程序的最佳方法是使用bash脚本(它部署应用程序)?如何通过在主机上执行命令在容器内执行此bash脚本? 有没有任何工具/方法可以以类似于Docker食谱的方式做到这一点?

  • 我正在尝试将.war、.aar、.xml和.properties文件部署到tomcat docker容器。我使用了下面的Dockerfile和基本的tomcat docker映像。 到目前为止一切正常。它提取war文件并启动容器内的应用程序。 但是现在我需要像这样添加/编辑“/usr/local/tomcat/webapps/root/web-inf//”和“/usr/local/tomcat/w

  • 我刚刚启动了一个新的应用程序,但当我点击欢迎登船页面上的“关于您的应用程序的环境”链接时,会出现这个错误。 启动应用程序时出错当Pow试图运行时,您的Rack应用程序引发了异常。 Bundler::,但找不到任何源代码 我的应用正在运行: 轨道3.2。6 Ruby 1.9。3p194 Rubygems 1.8。24 RVM 1.14。5 战俘0.4。0 我发现了类似的问题,问题在于如何让乘客安静下