osgi + felix example1编写
来源:互联网 发布:淘宝领的话费券在哪 编辑:程序博客网 时间:2024/05/18 01:35
在上篇博文中,我们搭建了osgi的整个运行环境,并将其他个别组件也整合了进来用于后续的开发,本播客系列将会将apache felix官网中example全部编写一遍,然后进行osgi后续的文章编写,如osgi command,blueprint,configAdmin等等,这些暂且放置一边,日后写博文的时候再谈。
example模块
在上回建立的maven工程中,新建文件夹命名为Application,日后编写的应用模块都将放在这个文件夹之中,新建maven module 命名为example,选择文件夹为Application,新建完成之后,改pom.xml文件中parent为Parent模块,不选择为root模块。
程序编写
首先确定pom文件中的依赖,将以下内容写入pom文件之中:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-core</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-blueprint</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxrs</artifactId> <version>${cxf.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>2.4.3</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-mybatis</artifactId> <version>${camel.version}</version> <scope>provided</scope> </dependency> <!-- Testing & Camel Plugin --> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-test-blueprint</artifactId> </dependency> </dependencies> <build> <defaultGoal>install</defaultGoal> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <configuration> <instructions> <Private-Package>cn.com.command.*</Private-Package> <Import-Package>*</Import-Package> <Bundle-Activator>cn.com.example5.Activator</Bundle-Activator> </instructions> </configuration> </plugin> <plugin> <groupId>org.apache.karaf.tooling</groupId> <artifactId>karaf-maven-plugin</artifactId> <configuration> <bootFeatures> <bootFeature>${project.artifactId}</bootFeature> </bootFeatures> </configuration> </plugin> </plugins> </build></project>
以上,maven插件中,felix插件是我们所必须使用的,karaf插件是
提供我们运行容器的。其他一些依赖的问题暂时或用不上,后续将讲解这些。
接下来src文件夹下新建Class,命名为Activator,将Apache example1中源码编写进去,为以下:
import org.osgi.framework.BundleActivator;import org.osgi.framework.BundleContext;import org.osgi.framework.ServiceEvent;import org.osgi.framework.ServiceListener;/** * Created by Administrator on 2016/6/18. */public class Activator implements BundleActivator, ServiceListener { public void start(BundleContext bundleContext) throws Exception { System.out.println("Starting to listen for service events."); bundleContext.addServiceListener(this); } public void stop(BundleContext bundleContext) throws Exception { bundleContext.removeServiceListener(this); System.out.println("Stopped listening for service events."); } public void serviceChanged(ServiceEvent serviceEvent) { String[] objectClass = (String[])serviceEvent.getServiceReference().getProperty("objectClass"); if (serviceEvent.getType() == ServiceEvent.REGISTERED) { System.out.println("Ex1: Service of type " + objectClass[0] + " registered."); } else if (serviceEvent.getType() == ServiceEvent.UNREGISTERING) { System.out.println("Ex1: Service of type " + objectClass[0] + " unregistered."); } else if (serviceEvent.getType() == ServiceEvent.MODIFIED) { System.out.println("Ex1: Service of type " + objectClass[0] + " modified."); } }}
然后改变pom.xml中felix插件中中类,启动类改写为当前编写的example类的所在包名与类名。
example feature
在上述完成之后,需要另外在配置feature,feature在上篇博客中已经提及,本文中不再讲述,在feature.xml中添加当前example feature,为以下:
<feature name="example" version="${project.version}"> <feature>http</feature> <feature>cxf</feature> <feature>camel-core</feature> <feature>camel-blueprint</feature> <feature>camel-jackson</feature> <feature>camel-cxf</feature> <bundle>mvn:com.fasterxml.jackson.jaxrs/jackson-jaxrs-base/2.4.3</bundle> <bundle>mvn:com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider/2.4.3</bundle> <bundle start-level="100">mvn:${project.groupId}/example/${project.version}</bundle> </feature>
这里面这些配置的其他feature,都是应用其他做准备的,配置cxf是用来实现restful服务的,jackson是用来序列化使用的,最开始只需配置camel-core和最下的工程bundle即可。
<bundle start-level="100">mvn:${project.groupId}/example/${project.version}</bundle>
这一个是用来将当前工程同样打包为一个bundle使用的,在后续添加子模块时,每一个feature都会添加这行内容。
运行
在mvn 编译, install 之后,intellij中运行karaf插件,如以下:
运行karaf-run,会得到以下结果:
以上,Activator成功启动并正常运行,即该示例演示成功。
总结
本文对felix官网中example1进行了编写,并成功演示,但并没有讲解其种具体的原理,example的装卸载,还有karaf输出日志中,对各个bundle的install过程,这些将在下一篇博文中做具体的讲解。
- osgi + felix example1编写
- osgi + felix example2编写
- osgi + felix example2b编写
- osgi + felix example3编写与使用服务的改进
- Felix?OSGi? -初步了解
- sca osgi felix
- OSGI--apache felix 入门
- OSGI—Felix深入研究
- [OSGI] Eclipse启动/调试Felix
- example1
- example1
- Apache Felix 的OSGi开发环境搭建
- 安装Apache Felix OSGI Framework小记
- OSGI的实现——Felix
- 第七章:OSGi框架-Apache Felix
- eclipse中利用Felix调试osgi HelloWorld
- Apache Felix 的OSGi开发环境搭建
- [OSGI] Felix基本环境搭建及操作
- listview.selection()
- 国内外PHP开源建站程序一览
- 程序员文件名的规范
- 推荐算法:基于图的算法:基于路相似度_续
- Regional 2015 - Asia EC Final - C Suffixes and Palindromes
- osgi + felix example1编写
- C programming-------exit() 函数
- 002——Filter解决乱码问题
- Reorder List
- can I read/write the routing table in C without using system() command?
- HDU 4825 Xor Sum
- Jquery+html+css实现广告条
- Android 自定义属性写法
- 【SpringMVC学习07】SpringMVC中的统一异常处理