简介
Osgi是一个插件管理体系,Equinox是OsgiR4的开源实现,其最成功的产品就是Eclipse3.x。
MANIFEST.MF
META-INF/ MANIFEST.MF文件中描述所有信息。
1.Export-Package: service,导出其他Bundle或者Service需要使用的包。
2.Import-Package: service,导入其他Bundle或者Service提供的包。
3.Bundle-ClassPath:…,Bundle或者Service使用的CLASSPATH定义,其中要添加【.】。
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: com.greatbit.service Plug-in Bundle-SymbolicName: com.greatbit.service Bundle-Version: 1.0.0 Import-Package: org.osgi.framework;version="1.3.0" Export-Package: com.greatbit.service Bundle-ClassPath>: lib/jakarta-oro-2.0.8.jar, lib/jakarta-regexp-1.5.jar, . //ClassPath设置,必须加入.号 |
build.properties
source.. = src/ output.. = bin/ bin.includes = META-INF/,/ //属性文件 lib/jakarta-oro-2.0.8.jar,/ //ClassPath列表,必须加入.号 lib/jakarta-regexp-1.5.jar,/ . |
Bundle
1.每个Bundle是一个jar包;
2.Bundle之间通过Import package和Required-Bundle共享;
3.每个Bundle使用自己的Classloader
Service
1.服务注册和注销
ServiceRegistration serviceReg;
//注册服务
serviceReg=context.registerService(服务标识名,服务实例,服务实例属性);
//注销服务
serviceReg.unregister();
//获取服务
ServiceReference serviceRef=context.getServiceReference(服务标识名);
Object service=context.getService(serviceRef);
2.监听服务的状态
实现ServiceListener接口
//加入服务监听器
context.addServiceListener(ServiceListener实例,”(objectClass=服务标识名)”);
Osgi系统发布
第一种方法:
1.创建${Base}目录、并在其中建立plugins、configuration两个目录。
2.在configuration目录中建立config.ini文件
#Configuration File #Mon Jun 12 21:04:30 CST 2006 //绑定的bundles osgi.bundles=org.eclipse.equinox.common@2:start, org.eclipse.update.configurator@3:start,com.greatbit.service@4:start,com.greatbit.http@5:start #eclipse.ignoreApp=true #osgi.noShutdown=true //设置context中可读取的属性 log4j.conf=e:/Source/OSGI/demo/configuration/log4j.properties spring.conf=file:///e:/Source/OSGI/demo/configuration/applicationContext*.xml |
3.复制以下三个文件org.eclipse.osgi_*.jar、org.eclipse.equinox.common_*.jar、org.eclipse.update.configurator_*.jar包到根目录${Base},创建run.bat文件
Java –jar org.eclipse.osgi_*.jar –console |
第二种方法
1.建立configuration目录,并在configuration目录下建立config.ini,编辑config.ini文件
osgi.bundles=org.eclipse.equinox.common@2:start, org.eclipse.update.configurator@3:start eclipse.ignoreApp=true osgi.noShutdown=true |
2.复制以下jar和目录包到plugins目录,
org.eclipse.equinox.launcher.win32.win32.x86_* org.eclipse.equinox.common_*.jar org.eclipse.equinox.launcher_*.jar org.eclipse.osgi_*.jar org.eclipse.update.configurator_*.jar 【开发的Bundle JAR包】 |
3.复制eclipse.exe(如果是Linux系统需要复制eclipse.sh)到根目录,结构类似如图:
4.使用命令启动OSGI控制台:
eclipse –console |
OSGI命令
ss help |
Knopflerfish
Knopflerfish是OSGI的另一个优秀的开源实现。
官方站点:http://www.knopflerfish.org/
下载最新的Release包。
安装:
Java –jar knopflerfish_osgi_2.1.0.jar |
启动:
java –jar ${base.dir}/knopflerfish.osgi/osgi/framework.jar |
目前缺省Knopflerfish需要图形界面的支持,使用linux则需要安装vncserver服务,或者使用其他的图形桌面。
Felix
Felix是Apache的一个顶级项目,是OSGI的开源实现。
运行:
java –jar bin/felix.jar |
Spring OSGI
1.要遵循接口与实现分离规则,将所有interface发布在一个Service中。(待查)
2.使用Spring OSGI的Bundle或者Service,Import包含发布interface的 Service,
3.注册Service
使用osgi:service 必须按照Spring OSGI 文档中6.2.1.3章节。 |
4.使用Service
使用osgi:reference osgi:list osgi:listener 参照文档。 |