OSGI的实现——Felix
Apache Felix
Felix是一个OSGi版本4规范的Apache实现。
OSGi是一个基于Java的服务平台规范,其目标是被需要长时间运行、动态更新、对运行环境破坏最小化的系统所使用。有许多公司(包括Eclipse IDE,它是第一个采用OSGi技术的重要项目)已经使用OSGi去创建其微内核和插件架构,以允许在运行时刻获得好的模块化和动态组装特性。几个其他项目如Apache Directory、Geronimo、Jackrabbit、Spring以及JOnAS也都正在转向采用OSGi。
目前Felix已经实现了OSGI R4规范中的大部分内容。
felix的官方地址为
http://felix.apache.org/site/index.html
想下载felix及它的子工程可以到
http://felix.apache.org/site/downloads.cgi
下载最新版本的felix
安装插件,插件的安装地址是
http://www.ops4j.org/pax/eclipse/update
Felix环境配置
下载felix的最新版本,并且将最新的felix解压到本地路径。
新建一个Java工程
工程名为felix,这个工程名可以随意设置
选择下一步,修改输出路径
复制解压后的felix目录中的内容到工程中。完成后的目录如下所示:
将felix.jar添加到工程的目录中,选择Build Path->Add to Build Path
然后配置Run Configuration
修改配置
点击Run,就可以运行felix,启动后结果如下:
发布应用到Felix中
新建插件工程HelloFelix
完成后修改Activator类,加入两段输出:
1 /*
2 * (non-Javadoc)
3 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
4 */
5 public void start(BundleContext bundleContext) throws Exception {
6 Activator.context = bundleContext;
7 System.out.println("hello felix应用启动!");
8 }
9
10 /*
11 * (non-Javadoc)
12 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
13 */
14 public void stop(BundleContext bundleContext) throws Exception {
15 Activator.context = null;
16 System.out.println("hello felix应用停止!");
17 }
完成后选择Export,选择Plug-in Development的Deployable plug-ins and fragments
选择要导出的插件,Destination选项卡的Directory选择Felix环境的物理地址,导出后,会在Felix工程的根目录自动创建一个felix-cache和plugins目录,bundle会默认导出这个目录,单击Finish按钮。
点击完成,得到结果,然后到工程中已经搭建好的环境felix项目中进行刷新,可以看到多出pluglins目录
环境和工程都已经完成,下面安装和卸载一下工程在felix中
启动Felix,在Console中先使用install命令安装bundle,接着使用start命令启动bundle。
启动的时候,start命令后接着那个bundle的启动ID就可以启动bundle。
停止的时候,stop命令后接着那个bundle的ID就可以停止bundle。
最后卸载工程HelloFelix,使用命令uninstall
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python zip,lambda,map函数代码实例
- python实现控制台输出彩色字体
- Mysql免安装版的使用
- jvm源码解析(八)动态代理是如何实现的,JDK Proxy于CGLib有什么区别
- jvm源码解析(五)synchronized和ReentrantLock
- 手把手教你构建自定义的Mimikatz二进制文件
- APACHE OFBIZ XMLRPC远程代码执行漏洞分析
- Intelspy:一款功能强大的自动化网络侦察扫描工具
- Prometheus入门教程(二):Prometheus + Grafana实现可视化、告警
- WAF代码剖析之初识openresty
- 树义带你学 Prometheus(四):PromQL 快速入门
- 树义带你学 Prometheus(五):Prometheus 的关键概念
- 树义带你学 Prometheus(六):Spring Boot Actuator 实现应用监控
- 树义带你学 Prometheus(七):SpringBoot 实现自定义指标监控
- 布尔型盲注的PY交易