osgi实战学习之路:5.生命周期及利用命令、装饰者模式实现基于socket交互Bundle命令demo

生命周期中关键3个类:

BundleActivator

入口点,类似main方法

BundleContext

Bundle上下文对象,在运行期间,为应用程序提供操作osgi框架的方法

Bundle

代表一个已安装的Bundle

接口说明:

BundleActivator:

public interface BundleActivator {
	public void start(BundleContext context) throws Exception;
	public void stop(BundleContext context) throws Exception;
}

BundleContext:

public interface BundleContext {
   ...
   String getProperty(String key);
   Bundle getBundle();
   Bundle installBundle(String location, InputStream input)
   throws BundleException;
   Bundle installBundle(String location) throws BundleException;
   Bundle getBundle(long id);
   Bundle[] getBundles();
   void addBundleListener(BundleListener listener);
   void removeBundleListener(BundleListener listener);
   void addFrameworkListener(FrameworkListener listener);
   void removeFrameworkListener(FrameworkListener listener);
   ...
}

Bundle:

...
BundleContext getBundleContext();
long getBundleId();
Dictionary getHeaders();
Dictionary getHeaders(String locale);
String getLocation();
int getState();
String getSymbolicName();
Version getVersion();
void start(int options) throws BundleException;
void start() throws BundleException;
void stop(int options) throws BundleException;
void stop() throws BundleException;
void update(InputStream input) throws BundleException;
void update() throws BundleException;
void uninstall() throws BundleException;

Bundle状态图:

源代码下载

demo:

准备:

在karaf_home下新建config、logs文件夹

将my-shell下的server.properties复制到karaf_home/config下

加入log4j日志配置,参考

部署Bundle

bundle:install -s mvn:com.demo.shell/my-shell/1.0.0-SNAPSHOT

打开window命令行输入:

telnet localhost 7080

输入help,可以查看所有命令帮助

输入install命令,部署外部Bundle:

install http://localhost:9090/testweb/bundle/user-model-0.0.1-SNAPSHOT.jar

在karaf中输入list,可以查看已经部署的bundle id

在window命令行输入命令,启动bundle

start bundle_id

在karaf中输入list,查看已部署的Bundle处于Active状态

osgi实战学习之路:5.生命周期及利用命令、装饰者模式实现基于socket交互Bundle命令demo,布布扣,bubuko.com

时间: 2024-12-25 02:12:25

osgi实战学习之路:5.生命周期及利用命令、装饰者模式实现基于socket交互Bundle命令demo的相关文章

osgi实战学习之路:8. Service-3之ServiceTracker

通过ServiceTracker可以对查找的Service进行扩展 下面的demo引入装饰器模式对Service进行日志的扩展 demo: Provider student-manage/Activator.java package com.demo.service; import java.util.Dictionary; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; import org

osgi实战学习之路:6. Service-1

什么是Service? 它是注册到osgi的一个java对象 Service注册: 通过BundleContext::registerService(java.lang.String[] clazzes, java.lang.Object service, java.util.Dictionary properties)  Service查找及使用: 通过BundleContext::getServiceReference(java.lang.String clazz),返回ServiceRef

osgi实战学习之路:7. Service-2之ServiceListener

ServiceListener三种状态: ServiceEvent.REGISTERED ServiceEvent.MODIFIED ServiceEvent.UNREGISTERING 基于ServiceListener实现服务查找的demo Provider student-manage/Activator.java package com.demo.service; import java.util.Dictionary; import java.util.HashMap; import

osgi实战学习之路:2. maven+maven-bundle-plugin+karaf搭建osgi之HelloWorld

环境准备: jdk版本 jdk:1.7 karaf: 版本:apache-karaf-3.0.1 下载地址: http://pan.baidu.com/s/1qWM4Y1u http://karaf.apache.org/ 配置本地仓库: 参考:http://blog.csdn.net/wobendiankun/article/details/25333113 启动karaf: karaf_home/bin/karaf.bat 启动成功如下: 安装 mvn-hello-provider 到本地仓

osgi实战学习之路:4.Bundle

源代码下载 Bundle是什么? Bundle是一个标准的jar,只是在META-INF/MANIFEST.MF中加入Bundle元数据的描述 Bundle元数据 标识 Bundle-ManifestVersion: 2 Bundle-Name: student-model Bundle-SymbolicName: com.demo.student-model Bundle-Version: 0.0.1.SNAPSHOT Export-Package 导出Bundle的某些包中的代码让其它Bun

osgi实战学习之路:3. osgi分层概念及相互合作demo

源代码下载 分层: modual: 主要作用于包级管理与共享代码 lifecycle: 主要作用于运行期间的模块管理与访问osgi底层框架 service: 主要作用于多模块之间的相互通信 demo: hello-provider/pom.xml <?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.or

DRP学习之路--Filter生命周期

Filter的创建 Filter的创建和销毁由WEB(例如Tomcat)服务器负责. web 应用程序启动时,web 服务器将创建Filter的实例对象,并调用其init方法,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作,filter对象只会创建一次,init方法也只会执行一次.通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象. Filter的销毁 Web容器调用destroy方法销毁Filter.destroy方法在Filter的生命周期

小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载二(生命周期)

4.1 什么是生命周期 想要真正地理解PhoneGap应用开发的内涵,首先需要理解什么是生命周期.这在字面上其实非常容易理解,一个应用从开始运行被手机加载到应用被退出之间的过程就称之为一个生命周期.为了使读者更容易理解,本节将以Android原生SDK中Activity类的生命周期结合Eclipse中的LogCat调试工具进行实战讲解. 4.1.1  Activity的生命周期 先仔细的观察图4-1的内容,这是谷歌官方给出的Activity生命周期流程图,它包括了一个安卓应用从被创建到结束时所经

JavaEE实战——Servlet入门、Servlet生命周期、绝对路径、ServletContext

前言 接下来的三篇博客我会分别介绍Servlet的以下三个方面: 1.Servlet程序编写 ----- 生命周期 2.ServletAPI Request Response 3.Cookie 和 Session Servlet的作用:Servlet 用来 动态web资源 开发 静态web资源 : 固定数据文件 动态web资源 : 通过程序动态生成数据文件 Servlet技术基于Request-Response编程模型 ---- HTTP协议也是基于请求响应 模型 * Servlet技术 用来