码迷,mamicode.com
首页 > 其他好文 > 详细

用maven创建一个osgi项目-helloword级别

时间:2016-05-22 15:14:35      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:

什么是osgi ?osgi 是java模块化规范,翻译过来开放服务网关协议(Open Service Gateway Initiative) OSGI不是一个应用层面的框架,而是软件设计层面的规范

它能为我们带来什么?

1 可重用的组件积累和复用,功能解耦。(复用、内聚、藕合都能在osgi中很好地体现)

2 运行在特定的osgi容器中,启动速度快,。

3 OSGI 也能让你动态的增减服务,或者说动态的加载卸载类等资源(热插拔效果)。

osgi框架选择  我们使用felix创建一个demo

创建之前先了解几个概念

Bundle:其实就是一个带描述的jar文件。 osgi一个组件就是一个Bundle

 

来看一下Bundle的声明周期:

技术分享

 

bundle需要install到osgi framework上,这个install只是让framework用一个classloader来装载bundle里的类和资源。

接着就是resolve,检查bundle需要“引用”的package是否可用,这个后续再详细介绍。

然后,bundle就要start,也就是运行activator里的start方法,方法运行完毕,即进入"ACTIVE"的状态,这时bundle就算正式可用了。

 

构建一个osgi的helloword

首先创建一个maven工程

在maven的pom文件中添加Maven Bundle Plugin

<plugins>
  <plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <extensions>true</extensions>
    <configuration>
      <instructions>
        <Export-Package>org.foo.myproject.api</Export-Package>
        <Private-Package>org.foo.myproject.*</Private-Package>
        <Bundle-Activator>org.foo.myproject.impl1.Activator</Bundle-Activator>
      </instructions>
    </configuration>
  </plugin>
</plugins>
这段插件在felix官网可以找到。 此插件是必须的创建Bundle依赖他

还有就是需要添加一个osgi——core包的依赖
    <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <version>4.2.0</version>
            <scope>provided</scope>
      </dependency>



整理后的pom文件
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">


    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.bean.demo</groupId>
    <artifactId>osgi</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>cn :: bean :: sun :: osgi_demo</name>
    <packaging>bundle</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        
    </properties>
    <dependencies>

        <!-- osgi -->
    <dependency>
    <groupId>org.osgi</groupId>
    <artifactId>org.osgi.core</artifactId>
    <version>4.2.0</version>
</dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                        <Bundle-Description>${project.description}</Bundle-Description>
                        <Import-Package>org.osgi.framework</Import-Package>
                        <Export-Package></Export-Package>
                        <Embed-Transitive>true</Embed-Transitive>
                        <Embed-Directory>dependency</Embed-Directory>
                        <Bundle-Activator>cn.gzydt.sun.Activator</Bundle-Activator>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

现在还需实现编写一个BundleActivator接口的java类 可以实现当一个bundle启动或停止。
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class Activator implements BundleActivator {

    public void start(BundleContext context) throws Exception {
        System.out.println("cn.bean.demo  组件--> start....");
    }

    public void stop(BundleContext context) throws Exception {
        System.out.println("cn.bean.demo  组件-->  stop....");
    }

}
当osgi容器加载这个组件的时候就会触发start方法,当组件被卸载或者更新的时候就会stop,在进行start(前提是在pom文件的maven-bundle插件中添加这个激活
 <Bundle-Activator>cn.gzydt.sun.Activator</Bundle-Activator>
)

然后用maven命令 mvn compile :编译源代码 mvn package 生成一个bundle文件(pom文件中的package类型为bundle)
然后把bundle丢在osgi运行环境的容器我这里用的apache-servicemix-6.0.3 官网最新的版本已经Apache ServiceMix 7.0.0.M1 我试了一下 感觉不是很好用,
启动容器

技术分享


 

用maven创建一个osgi项目-helloword级别

标签:

原文地址:http://www.cnblogs.com/sunjiqiang/p/5516656.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!