精华内容
下载资源
问答
  • OSGI框架

    2015-06-30 11:12:01
    Eclipse 的 OSGi 框架 Equinox OSGi 是目前动态模块系统的事实上的工业...而 Equinox 则是的 Eclipse 所使用的 OSGi 框架,是 Eclipse 强大的插件体系的基础,Eclipse 的稳定可靠性也为该框架带来了声誉。 OSGi ...

    Eclipse 的 OSGi 框架 Equinox

    OSGi 是目前动态模块系统的事实上的工业标准,虽然一开始只是作为嵌入式设备和家庭网关的框架来使用,但是实际上它适用于任何需要模块化、面向服务、面向组件的 应用程序。而 Equinox 则是的 Eclipse 所使用的 OSGi 框架,是 Eclipse 强大的插件体系的基础,Eclipse 的稳定可靠性也为该框架带来了声誉。

    OSGi 框架 Apache Felix

    Felix是一个OSGi版本4规范的Apache实现。OSGi是一个基于Java的服务平台规范,其目标是被需要长时间运行、动态更新、对运行环境破 坏最小化的系统所使用。有许多公司(包括Eclipse IDE,它是第一个采用OSGi技术的重要项目)已经使用OSGi去创建其微内核和插件架构,以允许在运行时刻获得好的模块化和动态组装特性。几个其他项 目如Apache Directory、Geronimo、Jackrabbit、Spring以及JOnAS也都正在转向采用OSGi。

    基于OSGi的运行环境 Karaf

    Karaf是Apache旗下的一个开源项目.Karaf同时也是一个基于OSGi的运行环境,Karaf提供了一个轻量级的OSGi容器,可以用于部署 各种组件,应用程序.Karaf提供了很多特性用于帮助开发者和用户更加灵活的部署应用,例如:热部署,动态配置,几种日志处理系统,本地系统集 成,可编程扩展控制台,ssh远程访问,内置安装认证机制等等.同时Karaf作为一款成熟而且优秀的OSGi运行环境以及容器已经被诸多Apache项 目作为基础容器,例如:Apache Geronimo, Apache ServiceMix, Fuse ESB,由此可见Karaf在性能,功能和稳定性上都是个不错的选择。


    OSGi 框架 JBoss OSGi

    JBoss OSGi 是 JBoss 组织实现的 OSGi 框架,其主要的目的包括如下两个方面:

    1. 为第三方的 OSGi 框架提供一个集成的平台;
    2. 基于 JBoss 微容器提供一个 OSGi 兼容框架。


     

    展开全文
  • osgi框架

    2019-10-12 15:07:37
    一、osgi的特点: 1.可以动态加载、更新和卸载模块而不用停止服务 2.servcie model允许模块/插件相互依赖但松耦合,分享服务更简单 3.osgi允许把应用分解成多个模块,然后管理各个模块之间的关系 二、实现osgi...

    一、osgi的特点:

    1.可以动态加载、更新和卸载模块而不用停止服务

    2.servcie model允许模块/插件相互依赖但松耦合,分享服务更简单

    3.osgi允许把应用分解成多个模块,然后管理各个模块之间的关系

    二、实现osgi模块通信

    例子:HelloWorld模块调用HelloService的bundle

    1.HelloService模块创建接口和实现类

    2.然后在MANIFEST.MF配置文件中,暴露接口,对外只暴露接口

    3.在bundle中,注册暴露的实现类:这个时候,才真正对外暴露了接口

    3.在HelloWorld模块的配置文件中,导入接口

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    4.在HelloWorld中调用HelloServcie模块的接口

    为什么OSGI容器能让jar包中的class文件可见而有些又不可见?

    答案:OSGI容器自定义了java class loader来有选择的加载类,bundle可见的class包括

         1 boot classpath:所有的java基础类

         2 framework classpath:OSGI框架级别的classloader加载的类

         3 bundle classpath:bundle本身引用的关系紧密的jar的路径

         4 import packages:就是在配置文件中声明的导入包,一旦声明,在bundle内就可见

     

     

     

     

    展开全文
  • OSGi框架

    千次阅读 2018-05-04 18:35:21
    Bundle是个独立概念,在OSGi框架中对于每个Bundle采用的是独立的classloader机制,这也就意味着不能采用传统的引用其他Bundle工程来实现Bundle间的协作, 3.1.1 定义输出的包以及引用的包 每个Bundle可以定义输出的...

    1.简介

    1.1 what

    Open Service Gateway Initiative(OSGi服务平台ServicePlatform)

    一个Java框架,可扩展部署和下载的应用程序(bundle)。模块化,可插拔,可动态改变行为,

    1.2 advance

    Java平台的独立性和动态代码加载能力

    1.3 parts
    1.3.1 安全层

    定义了如何签名和验证一个Bundle

    1.3.2 模块层

    OSGI的核心层次,定义了Bundle模型,Bundle如何Import和Export代码,以及如何定义和解析Bundle之间的依赖关系

    1.3.3 生命周期层
    定义了Bundle的生命周期包括的状态以及状态之间如何转换,并且定义了接口支持Bundle的生命周期操作,包括Install, start, stop, update和uninstall。OSGi提供了Bundle库(BundleRepository)
    1.3.4 服务层

    定义了如何将一个Java对象注册发布在某个/某些接口下面成为由这些接口表示的服务,获取服务,以及监听某些服务的启动和停止事件等

    1.4 application
    1.4.1 应用一

    一个服务可以是一个网络中的设备,如果一个设备被监测到,则服务可以动态注册;如果设备被移除,则服务能够动态注销。在这样的影响环境汇总编程将耗费大量开销来处理动态性,但是OSCi帮助开发者处理了绝大多数动态性方面的工作。

    1.4.2 应用二

    用户登录验证模块:要求可动态的替换(系统运行期)用户登录验证的方式。

    例如目前有三种验证方式:LDAP验证,DB验证以及配置文件验证;同事要求可随时增加新的验证方式,如CA验证方式等。

    1.5 知名OSGi框架

    Equinox,成功案例是Eclipse IDE,还有Oscar(不活跃),Knopflerfish


    2.Hello World

    2.1 New工程
     
    附:这是稍微复杂一点的应用
            

    Zzhello:

    public interface Hello {
    	public void syaHello();
    }
    public class HelloImpl implements Hello{
    	final String helloString;
    	
    	public HelloImpl(String helloString) {
    		this.helloString = helloString;
    	}
    	
    	@Override
    	public void syaHello() {
    		System.out.println(this.helloString);
    	}
    	
    }
    Export-Package: zzhello;version="1.0"
    public class Activator implements BundleActivator {
    	
    	private List<ServiceRegistration> registrations = 
    			new ArrayList<>();
    
    	public void start(BundleContext context) throws Exception {
    		registrations.add(context.registerService(Hello.class.getName(), 
    				new HelloImpl("Hello, OSGi"), null));
    		System.out.println("OSGi-服务注册成功");
    	}
    	
    	public void stop(BundleContext context) throws Exception {
    		for(ServiceRegistration registration: registrations){
    			registration.unregister();
    			System.out.println("取消服务注册:"+registration);
    		}
    	}
    
    }

    ZzhelloClient:

    Bundle-Activator: zzhelloclient.HelloUser
    Import-Package: org.osgi.framework;version="1.3.0",
     zzhello;version="1.0.0"
    public class HelloUser implements BundleActivator{
    	@Override
    	public void start(BundleContext ctx) throws Exception {
    		ServiceReference reference = ctx.getServiceReference(Hello.class.getName());
    		if (reference != null) {
    			Hello hello = null;
    			try {
    				hello = (Hello)ctx.getService(reference);
    				if(hello != null)
    					hello.syaHello();
    				else
    					System.out.println("Services:Hello---object null");
    			} catch (Exception e) {
    				e.printStackTrace();
    			}finally {
    				ctx.ungetService(reference);
    				hello = null;
    			}
    		}else {
    			System.out.println("Service:Hello---not exists");
    		}
    	}
    
    	@Override
    	public void stop(BundleContext arg0) throws Exception {
    		
    	}
    	
    }
    2.2 Debug环境Configuration设置(全选的话会报错)

    2.3 结果


    类似的命令还有install,uninstall等

    3.Bundle

    OSGi中所有模块的部署都必须以Bundle方式来进行部署,Bundle以jar包形式存在的一个模块化物理单元,里面包含了代码、资源文件和元数据(metadata),并且jar包的物理边界也同时是运行时逻辑模块的封装边界。

    这个jar和普通jar唯一不同点就是MANIFEST.MF,关于Bundle的所有信息都在其里面进行了描述(如Bundle名称、需要导入的包,输出的包等),官方称为bundle的元数据。

    3.1 类加载机制
    在使用一个bundle之前,必须对共享的包之间的约束关系进行解析。解析过程就是确定导入包如何连接到导出包。解析过程必须在bundle中任何代码加载或运行之前。
    在多数Java应用中,通常是由一个Class Loader来加载所有的类和资源文件,而在OSGi模块层中(一个模块就是一个Bundle)则为每个模块提供了各自的Class Loader,从而保证了模块的闭合,同时为模块的关联提供控制

    3.2 生命周期

    Bundle通过实现BundleActivator接口去控制其生命周期

    3.2.1 Bundle六种状态
    1)installed:Bundle已经成功安装
    2)resolved:Bundle所需要的类都已经可用了,该状态表明Bundle已经准备好了用于启动或者说Bundle已经被停止
    3)starting:Bundle正扎起启动中,BundleActivator的start方法已经被调用不过还没返回
    4)active:Bundle已启动,并在运行中
    5)stopping:Bundle正在停止中,BundleActivator的stop方法已经被调用,不过还没返回
    6)uninstalled:Bundle已经被卸载了

    API由以下三个核心接口组成
    1) BundleActivator:捕捉到bundle的start和stop事件
    2) BundleContext:一个bundle在框架中的执行时上下文,当启动或停止一个bundle的时候,框架将它发送到一个bundle的激活器
    3) Bundle:包含bundle基本信息和bundle生命周期的控制接口

    3.3 Bundle引用

    Bundle是个独立概念,在OSGi框架中对于每个Bundle采用的是独立的classloader机制,这也就意味着不能采用传统的引用其他Bundle工程来实现Bundle间的协作,

    3.1.1 定义输出的包以及引用的包

    每个Bundle可以定义输出的包以及引用的包,这样在Bundle间就可以共享包中的类,但在OSGi、框架中更推荐采用Service方式。

    3.1.2 Service方式

    Bundle通过BundleContext注册对外提供的服务,同事也可以通过BundleContext来获得需要引用的服务。

    3.1.3 Bundle相互调用

    两个bundle互相引用对方的包会报错(循环引用),项目会出现红色感叹号

    3.4 三种特殊的Bundle
    3.4.1 Require Bundles

    并不特殊,只是可以直接被其他Bundle通过Require-Bundle来使用的Bundle

    3.4.2 Fragment Bundles

    本身不拥有独立的classloader,可以看成是Bundle的一种附属,片段。片段的关键用途是提供不同区域的翻译文件,这样就可以实现翻译文件从主要应用的bundle中独立出来。可以用来夸张host bundle的功能,做一些bundle的依赖类
    --> New Fragment Project


    启动后会发现片段不能够自己启动

    主Bundle代码:

    public class Activator implements BundleActivator {
            // 去读配置文件,默认就是读主啊,为什么网上会说从会覆盖掉主呢???
    	public void start(BundleContext context) throws Exception {
    		InputStream is = Activator.class.getResourceAsStream("/META-INF/myConfig.properties");
    		Properties properties = new Properties();
    		properties.load(is);
    		System.out.println("name"+properties.getProperty("name"));
    	}
    	
    	public void stop(BundleContext context) throws Exception {
    		System.out.println("Goodbye World!!");
    	}
    }






    展开全文
  • 1.1 OSGi框架 OSGi框架规范中定义了框架的正确行为;而核心框架可有多种实现方式。 OSGi框架是根据OSGi规范中定义的三个概念层设计的:   1.1.1 1)模块层 模块层关注于打包、共享代码。 模块层定义了OSGi...

    1.1   OSGi框架

    OSGi框架规范中定义了框架的正确行为;而核心框架可有多种实现方式。

    OSGi框架是根据OSGi规范中定义的三个概念层设计的:

     

    1.1.1         1)模块层

    模块层关注于打包、共享代码。

    模块层定义了OSGi模块的概念(bundle,即包含一个元数据MANIFEST.MF的JAR文件)。

    bundle比标准JAR文件更强大,它可以声明哪些包对外可见(Export-Package);所以说它扩展了Java的访问修饰符。

    bundle还可以明确声明依赖哪些外部包(Import-Package),这样就可以自动地管理和验证依赖包的一致性(这个过程称为bundle解析),确保了bundle版本和其他方面约束的一致性。——这样就能清楚地看到类路径上有什么,不用到处搜寻文档了!

     

    基于已有的JAR文件构建OSGi bundle是一个非侵入式的过程,只需要添加MANIFEST.MF:


    1.      //MANIFEST.MF 

    2.      Bundle-ManifestVersion:2 

    3.      Bundle-Name:Greeting API 

    4.      Bundle-SymbolicName:com.alpha.interface 

    5.      Bundle-Version:1.0 

    6.       

    7.      //导入包, 

    8.      Import-Package:org.log4j;version="2.0", 

    9.      ..... 

    10.    

    11.   //导出包,只有这些包对外可见 

    12.   Export-Package:com.alpha.interface;version="1.0", 

    13.   ..... 

    14.     

     

    1.1.2         2)生命周期层

    生命周期层关注于提供执行时模块管理、和对底层OSGi框架的访问。

    生命周期层定义了在OSGi框架中是如何动态安装和管理的。目的:

    在应用程序外部,生命周期层精确地定义了bundle生命周期的操作(安装、更新、启动、停止、卸载),使得你可以用一种明确的方式动态地提供、管理、改进你的应用程序,意味着可以安全滴在框架中安装和卸载bundle,而不用重启应用程序。

    在应用程序内部,生命周期层定义了bundle如何访问它的执行环境。

     

    bundle中可以将一个指定的类声明为激活器Activator,作为该bundle进行自身生命周期管理的钩子。


    1.      publicclass MyActivator implements BundleActivator { 

    2.       

    3.        public void start(BundleContext context){ 

    4.            Greeting.instance = new Greeting(); 

    5.        } 

    6.       

    7.        public void stop(BundleContext context){ 

    8.            Greeting.instance = null; 

    9.        } 

    10.   } 

    然后将Activator通知给OSGi框架:


    1.      //MANIFEST.MF 

    2.      Bundle-Activator:com.alpha.MyActivator 

     

    上例中,

    在bundle启动时,会构造MyActivator实例,调用其start()方法,初始化Greeting实例;

    在bundle停止时,会调用stop()方法,清除该Greeting实例。使用者可以直接使用预先配置好的实例,而不需要自己创建。

     

    1.1.3         3)服务层

    服务层关注于模块,特别是模块内的组件间的交互和通信。

    服务层支持和促成了一个灵活的应用编程模型。涉及面向服务的发布、查找和绑定的交互模式:服务提供者将服务发布到服务注册中心,服务客户端搜索服务注册中心,查找可供使用的服务。

    其实就是面向接口编程,不同之处在于:

    1.      如何使服务的实例在程序的其他部分可用。——注册服务

    2.      如何使程序的其他部分发现这个可用的服务。——检索服务


    1.      //注册服务 

    2.      publicclass Activator implements BundleActivator { 

    3.        //在start()中用BundleContext.registerService()注册服务 

    4.        public void start(BundleContext context){ 

    5.           context.registerService(Greeting.class.getName(), new GreetingImpl(),null); 

    6.        } 

    7.        //无需在stop()中注销服务,因为bundle停止时会自动注销该bundle中已注册的服务 

    8.        public void stop(BundleContext context){} 

    9.      } 

     


    1.      //检索服务 

    2.      public  class Client implements BundleActivator{ 

    3.        public void start(BundleContext context){ 

    4.            // 1、从服务注册表中检索间接的“服务引用” 

    5.            ServiceReference ref =context.getServiceReference(Greeting.class.getName()); 

    6.            // 2、使用“服务引用”去访问服务对象的实例 

    7.            ((Greeting)context.getService(ref)).sayHello(); 

    8.        } 

    9.        public void stop(BundleContext context){} 

    10.   } 

     

    1.2   创建OSGi程序的通用方法

    1.      设计:将应用程序分解为一些服务接口、和这些接口的客户端。——基于接口的编程

    2.      用选定的工具和方法来实现服务提供者、和客户端组件。

    3.      将服务提供者、和客户端组件打包为独立的JAR,用合适的OSGi元数据扩展每个JAR。

    4.      启动OSGi框架。

    5.      安装启动3)中的JAR。

    展开全文
  • OSGI 框架搭建

    2016-09-09 21:16:56
    osgi框架搭建
  • OSGi 框架 JBoss OSGi

    2012-09-23 20:56:00
    JBoss OSGi 是 JBoss 组织实现的 OSGi 框架,其主要的目的包括如下两个方面: 为第三方的 OSGi 框架提供一个集成的平台; 基于 JBoss 微容器提供一个 OSGi 兼容框架。 ...
  • OSGI基础与OSGI框架

    2018-08-01 17:14:05
    OSGI(Open Service Gateway Initiative)  通过OSGI,可以进行模块化管理,模块之间真正的解藕,能实现硬件的“热插拔”功能。能够更加规范项目化管理(不同开发人员可以单独做自己...OSGi框架规范中定义了框架...
  • OSGI框架实战

    2011-12-14 20:47:44
    OSGI框架实战 一. 序..5 二. 体验OSGI..7 2.1. 需求实现..7 2.2. 技术角度..9 三. OSGI带来什么..11 四. OSGI案例..13 五. OSGI框架..15 5.1. Equinox..15 5.2. Oscar..15 5.3. Knopflerfish..15 六. 基于OSGI框架...
  • OSGI框架概念

    2018-03-30 23:12:15
    1.OSGI的定义OSGI(open sevice getway initiative)即开放的服务网关协议。...2.OSGI框架osgi理论上可以分为三层即模块层(Module Layer)主要是包及共享的代码生命周期层(Lifecycle Layer)主要是Bundle的生...
  • Osgi框架简介

    2015-12-11 18:07:00
    Osgi框架简介(待完善……)
  • OSGI框架学习

    2016-04-18 23:31:00
    OSGI框架三个重要概念OSGi框架是根据OSGi规范中定义的三个概念层设计的:模块、模块生命周期、服务。模块层定义了OSGi模块的概念(bundle,即包含一个元数据MANIFEST.MF的JAR文件)。bundle比标准JAR文件更强大,它...
  • OSGi框架 OSGi框架规范中定义了框架的正确行为;而核心框架可有多种实现方式。 OSGi框架是根据OSGi规范中定义的三个概念层设计的: 1)模块层 模块层关注于打包、共享代码。 模块层定义了OSGi模块的概念...
  • IBM官方的文档 看起来受益匪浅 简述OSGI框架的类加载机制:探索 OSGi 框架的组件运行机制 转载于:https://www.cnblogs.com/CanWork/p/3867157.html
  • OSGi框架的三个层次

    2016-07-01 21:53:45
    OSGi框架 OSGi框架规范中定义了框架的正确行为;而核心框架可有多种实现方式。 OSGi框架是根据OSGi规范中定义的三个概念层设计的: 1)模块层 模块层关注于打包、共享代码。 模块层定义了OSGi模块的概念...
  • 之前工作都是用的Spring框架,现在换了一个工作用的OSGI框架从来没接触过,今天第一次把项目拉下来启动之后,不知道去哪里看浏览器打开项目的地址(项目组刚成立还没人,项目经理去甲方公司谈需求了,就我一个人在...
  • OSGi 框架事件

    2013-01-09 10:01:04
    OSGi 框架支持以下生命周期层事件: l BundleEvent — 报告bundle的生命周期改变 l FrameworkEvent — 报告框架的启动、启动级别的改变、包的更新或者是捕获的错误。 事件的实际类型可以通过ge
  • 转自:http://www.osgi.com.cn/article/7289458 ...包括了 OSGi 框架和标准的服务,同时也提供并且支持其他的 OSGi 相关技术。Felix 终的目标是要提供和 OSGi 框架和标准服务完全兼容的一个实现。目前 Felix...
  • 了解OSGi框架的工作方式对于开发Eclipse插件和许多其他分子式应用程序很有用。在本文中,将解释该体系结构的高级概述。 OSGi框架体系结构包含三个概念层。每层均取决于其下面的层。下面描述每个层的概述。 模块层 ...
  • OSGi正在成为一种趋势,越来越多的项目采用了OSGi,越来越多的中间件都开始采取了OSGi的标准。身为一名Java开发人员,如果你还对OSGi结构一无所知,那你真的有点Out了。什么是OSGiOSGi的名称来源于其开源组织的名称...
  • 1.3 Spring-DM 1.3.1 简介 Spring-DM 指的是 ...Spring-DM 的主要目的是能够方便地将 Spring 框架 和OSGi框架结合在一起,使得使用Spring的应用程序可以方便简单地部署在OSGi环境中,利用 OSGi 框架提供的...
  • OSGI框架父类委派清单

    2015-06-26 21:05:27
    父类委派清单:org.osgi.framework.bootdelegation OSGI框架允许用户用户自行指定一些Package委派给父类加载器加载 参考:http://book.2cto.com/201301/15406.html
  • OSGI框架搭建常见问题即错误
  • 转自:http://www.osgi.com.cn/article/7289456 ...B/S 结构应用程序的开发,可有两个选择:一个是在 OSGi框架中嵌入 Http 服务器,另外一个是在 Servlet 容器中嵌入 OSGi 框架。下面分别介绍这两种方式的实现。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,582
精华内容 632
关键字:

osgi框架