OSGI简介(含电子书下载)

1999年3月,OSGi联盟(非盈利性质)成立,目标   是建立家庭网关,并通过互联网向家庭网络提供各种服务,例如通过web页面控制咖啡机等;
Eclipse V3.0采用OSGi,使得OSGi成功进入Java企业应用领域,并成为其中重要一员;同时Eclipse推出了OSGi R4 RI:Equinox,所以直接使用Eclipse即可开发OSGI框架的程序
OSGI是什么?
Dynamic Module System For Java这是OSGi最开始的定义;
意味着基于OSGi就可以模块化的开发Java应用;
意味着基于OSGi就可以模块化的部署Java应用;
还可以动态的管理模块。
Universal Middleware
这是OSGi近年来新取的名词,目标是让OSGi脱离语言限制,成为所有语言的统一模型。
在OSGi中这不是一个虚拟的概念,而是一个实体:Bundle
Bundle是一个普通的jar,只是其META-INF中的manifest.mf中描述了一些标准的模块的信息。
以下是manifest.mf文件内容示例:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: A
Bundle-SymbolicName: A
Bundle-Version: 1.0.0
Bundle-Activator: a.Activator
Bundle-Vendor: zjm
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: org.osgi.framework;version="1.3.0"
Bundle-ActivationPolicy: lazy


模块的交互方式
以package方式交互:
通过Export-Package对外提供packages;
通过Import-Package使用其他模块的packages;
Package支持版本机制;
以service方式进行交互
符合面向接口原则;
支持IoC方式注入;
面向服务的组件模型,Single VM下SOA的一种典型实现。

模块的生命周期如图:

OSGI简介(含电子书下载)

osgi下的控制台有很多命令,可通过help命令进行查看用法
安装模块,有两种方式:
1,使用目录模式,install file:/D:\work\workspace\OSGi-Bulletin\FirstBundle,注意目录名中不能有空格
2,使用jar模式,先将bundle导出成可部署的插件,然后在控制台执行install
file:/D:\Opendoc\Equinox\plugins\FirstBundle_1.0.0.jar
示例:第一个OSGI实例
新建eclipse 插件项目,选择osgi平台,将自动生成Activator类,它是启动模块的类
package a;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class Activator implements BundleActivator {

	/*
	 * (non-Javadoc)
	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
	 */
	public void start(BundleContext context) throws Exception {
		//自己写的
		System.out.println("osgi bundle started");
	}

	/*
	 * (non-Javadoc)
	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
	 */
	public void stop(BundleContext context) throws Exception {
		//自己写的
		System.out.println("osgi bundle stopped");
	}

}

项目结构图:

OSGI简介(含电子书下载)
运行 在osgi框架上,结果如下:

用ss命令可查看模块

OSGI简介(含电子书下载)

可以停止模块:


你可能感兴趣的:(eclipse,网络应用,ITeye,企业应用,osgi)