OSGI实战教程【Spring DM】编写一个简单的Bundle组件
来源:互联网 发布:视频软件 知乎 编辑:程序博客网 时间:2024/05/21 15:00
OSGI实战教程
关键字: Spring DM 、 Felix 、 Karaf 、ServiceMix 、 OSGI
本教程使用相关工具:
- 1、开发工具:Eclipse
- 2、依赖管理:Maven
- 3、OSGI容器:ServiceMix
目标:教程演示使用Maven构建,采用Spring DM开发一个最基本的OSGI组件,并将组件运行于ServiceMix容器中。
1、创建项目:
创建一个普通的Maven工程,怎么创建就不累赘了。
2、导入依赖
<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>com.micai.test</groupId> <artifactId>osgi-hello-liyong</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>bundle</packaging> <name>osgi-hello-liyong</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>4.3.12.RELEASE</spring.version> <felix.plugin.version>3.2.0</felix.plugin.version> <osgi.version>4.2.0</osgi.version> <spring.osgi.version>1.2.1</spring.osgi.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.osgi</groupId> <artifactId>spring-osgi-core</artifactId> <version>${spring.osgi.version}</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>org.springframework.core</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>org.springframework.aop</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>org.springframework.beans</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>org.springframework.context</artifactId> </exclusion> <exclusion> <groupId>org.aopalliance</groupId> <artifactId>com.springsource.org.aopalliance</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.osgi</groupId> <artifactId>spring-osgi-web</artifactId> <version>${spring.osgi.version}</version> <scope>provided</scope> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>org.springframework.core</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>org.springframework.aop</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>org.springframework.beans</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>org.springframework.context</artifactId> </exclusion> <exclusion> <groupId>javax.servlet</groupId> <artifactId>com.springsource.javax.servlet</artifactId> </exclusion> <exclusion> <groupId>org.aopalliance</groupId> <artifactId>com.springsource.org.aopalliance</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.osgi</groupId> <artifactId>spring-osgi-extender</artifactId> <version>${spring.osgi.version}</version> <scope>provided</scope> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>org.springframework.core</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>org.springframework.aop</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>org.springframework.beans</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>org.springframework.context</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <target>1.6</target> <source>1.6</source> </configuration> </plugin> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <version>${felix.plugin.version}</version> <configuration> <instructions> <Import-Package> * </Import-Package> <Karaf-Commands>*</Karaf-Commands> </instructions> </configuration> <extensions>true</extensions> </plugin> </plugins> </build></project>
依赖引入关键点:
- 2.1、引入maven-bundle-plugin插件
<plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <version>${felix.plugin.version}</version> <configuration> <instructions> <Import-Package> * </Import-Package> <Karaf-Commands>*</Karaf-Commands> </instructions> </configuration> <extensions>true</extensions></plugin>
使用这个插件后,我们就不用再配置OSGI相关的描述文件了,所有OSGI的属性该插件已经在打包的时候为我们添加完成,我们只需要开发自己的业务就行了。
- 2.2、打包类型
<packaging>bundle</packaging>
这点是与我们正常的的项目不同地方,正常项目我们都是配置pom、jar、war等
说明:如果在你的代码中报错:Project build error: Unknown packaging: bundle,那么仅需要在plugin中添加
<extensions>true</extensions>
即可
- 2.3、引入Spring OSGI相关的依赖包,该依赖配置中排除了spring-osgi中低版本的spring相关jar,手动引入了高版本的spring依赖
3、编写一个简单的Spring Bean
package com.micai.test.osgi.hello;import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;import org.springframework.stereotype.Service;@Servicepublic class HelloWorldService { @PostConstruct public void init() { System.out.println("Bean初始化"); } @PreDestroy public void destroy() { System.out.println("Bean销毁"); }}
4、编写Spring相关配置 spring-context.xml
配置文件名称没有特殊要求,但是放置的位置必须在指定位置
必须放置于classpath下面的: META-INF/spring目录中
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:osgi="http://www.springframework.org/schema/osgi" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi-1.2.xsd"> <context:component-scan base-package="com.micai.test.osgi.hello" /></beans>
该出配置没有什么特殊的配置,仅仅配置了包扫描功能。我们的简单组件就开发完成了。
5、打包
直接通过maven命令
mvn install
进行打包安装到本地,这里因为我使用 mvn build打包报错,用install反而好使了,暂时没时间纠结为什么。。。
6、发布
将打好的jar包上传到自己准备好的ServiceMix容器环境的发布目录:
发布目录:在ServiceMix的安装目录中的 deploy文件夹中。
karaf@root>Bean初始化karaf@root>bundle:list | grep "osgi-hello-liyong"265 | Active | 80 | 0.0.1.SNAPSHOT | osgi-hello-liyongkaraf@root>bundle:stop 265Bean销毁karaf@root>bundle:start 265karaf@root>Bean初始化
当上传成功后,组件就自动重启了,即spring容器也初始化了,由于我们直接使用打印命令打印内容到控制台了,那么在我们的ServiceMix的控制台上面就可以看到Bean初始化时打印的消息。
当我们使用相关命令停止该bundle时,spring容器被销毁了,bean也就销毁了,所以执行了我们bean配置中的销毁方法。
- OSGI实战教程【Spring DM】编写一个简单的Bundle组件
- 编写一个简单的OSGI bundle
- spring-dm 一个简单的实例
- Spring DM的OSGi启动类ContextLoaderListener
- OSGI:Spring DM
- osgi中org.osgi.service.cm bundle组件的使用
- Spring DM and OSGi Blueprint
- Hessian与OSGi(spring dm server) 的整合
- OSGI中启动spring dm加载的commons-logging问题
- Spring DM Server,bundle,Tiles2
- eclipse编写第一个osgi bundle的小demo,同时导出osgi化的bundle
- OSGi与Spring DM:使用Spring DataSource
- OSGi与Spring DM:使用Spring DataSource
- 编写一个简单的COM组件
- OSGI bundle的知识
- OSGI:构建Spring DM开发环境
- osgi 学习系列(五)spring dm
- OSGI:构建Spring DM开发环境
- 航天科工研发“高速飞行列车”,最高时速可达4000公里?
- 贝佐斯的焦虑:结盟微软Cortana和智能音箱的生态战
- 京东超市升级双百亿俱乐部 确立500快消品牌销售额过亿目标
- 性能优化登顶安卓阵营,vivo X20闪耀王者荣耀巅峰之战
- 从源头重塑整个机器视觉行业,这家中国公司要搞事情
- OSGI实战教程【Spring DM】编写一个简单的Bundle组件
- 57. Insert Interval
- Windows 10 秋季创作者更新将于10月17日推出,混合现实功能成亮点
- codeforces706B 【python】
- Linux基础知识
- LVS+Keepalived实现高可用负载均衡(Web群集)
- Centos中导入sql文件到mysql数据库
- linux进程管理
- 剑指offer——面试题22:栈的压入、弹出序列