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

什么是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 我试了一下 感觉不是很好用,启动容器

				
时间: 2024-11-05 18:29:59

用maven创建一个osgi项目-helloword级别的相关文章

Maven创建一个Web项目

我们可以通过命令行或者直接使用Eclipse创建一个maven webapp项目:通过命令行创建在命令行中输入如下格式的命令将会创建一个新的maven webapp项目:mvn archetype:generate -DgroupId=moonlit-group -DartifactId=test-wepapp -DarchetypeArtifactId=maven-archetype-webapp这里的:groupId对应的是maven项目的组名:artifactId对应的是项目名:arche

如何在IntelJ下用Maven创建一个Web项目

相信一开始做Web项目的同学都是直接把项目包放在WEB-INF/lib目录下,然后就开始做项目了.但是之后接触了一些使用了Maven进行包管理的项目,我们就不得不学一学如何用Maven做包管理. 在网上看了很多的文章,发现都不是很全面,因此就把自己摸索的过程记录下来,希望对大家有帮助.本文主要记录如何从无包管理的项目开发模式转到使用Maven进行项目包管理. 做编程的,对于新的知识,先运行起来再说,而不是去深究其原理.我们这里用Maven搭建一个简单的Web项目,让其可以运行起来.这可以让我们对

在eclipse中,用maven创建一个web项目工程

1.在eclipse中用maven创建项目,右键new>>Maven Project 2.点击next继续 3.点击next继续,选择maven-archetype-webapp, 4.点击next继续,填写Group id和Artifact id, Version默认,Package可以不填 5. 然后点击finish,完成web项目的创建: 在创建web项目完成后,可能出现的问题及其解决方法: Q1:项目忽然出现 The superclass "javax.servlet.htt

IntelliJ IDEA 中配置Maven以及创建一个Web项目

IntelliJ IDEA 中配置Maven Step.1 File-Settings Step.2 使用Maven创建一个Web项目 Step.1 File-New-Project Step.2

使用Maven创建一个Spring MVC Web 项目

使用Maven创建java web 项目(Spring MVC)用到如下工具: 1.Maven 3.2 2.IntelliJ IDEA 13 3.JDK 1.7 4.Spring 4.1.1 released 5.Tomcat7 6.Logback 1.0.13 日志输出组件 接下来开始演示如何用Maven模板创建web项目 1.使用maven-archetype-webapp模板快速创建web项目的骨架结构 打开控制台,进入到你想要创建web项目的目录,然后运行如下命令: 1 $ mvn ar

如何用Maven创建一个普通Java项目

一下内容包括:用Maven创建一个普通Java项目,并把该项目转成IDEA项目,导入到IDEA,最后把这个项目打包成一个jar文件. 有时候运行mvn命令失败,重复运行几次就OK了,无解. 1.用Maven模板创建一个项目 打开控制台,进入到想要创建项目的目录,然后运行如下命令,参数自由填写: 1 mvn archetype:generate -DgroupId={project-packaging} 2 -DartifactId={project-name} 3 -DarchetypeArti

使用IntelliJ IDEA 14和Maven创建java web项目

原文:使用IntelliJ IDEA 14和Maven创建java web项目 http://mark.leanote.com/post/%E4%BD%BF%E7%94%A8IntelliJ-IDEA-14%E5%92%8CMaven%E5%88%9B%E5%BB%BAjava-web%E9%A1%B9%E7%9B%AE 安装Maven 下载安装 去maven官网下载最新版. 解压到安装目录. 配置 右键桌面的计算机图标,属性–>高级系统设置–>环境变量,添加M2_HOME的环境变量,然后将该

Maven 创建java Web项目,配置Spring,CXF

1.搭建Maven环境 参考文章 Maven3路程(一)环境搭建 http://www.cnblogs.com/leiOOlei/p/3359561.html Maven3路程(二)Eclipse集成Maven http://www.cnblogs.com/leiOOlei/p/3361379.html Maven3路程(三)用Maven创建第一个web项目(1) Maven3路程(三)用Maven创建第一个web项目(2)servlet演示 Maven 配置Spring 参考 http://b

Android官方入门文档[1]创建一个Android项目

Android官方入门文档[1]创建一个Android项目 创建一个Android项目 这节课教你1.创建与Android Studio中的一个项目2.创建使用命令行工具项目 你也应该阅读?管理项目 Creating an Android Project This lesson teaches you to1.Create a Project with Android Studio2.Create a Project with Command Line Tools You should also