那位仁兄能解释一下什么是OSGi,还有Karaf

那位仁兄能解释一下什么是OSGi,还有Karaf,第1张

言归正传,之前在研究ODL的时候整理过OSGi的一些知识,分享一下,感谢度娘吧。

这是官方英文解释翻译版:OSGi service platform是一个开放并且提供统一接口标准的体系框架,基于这个体系框架,服务提供商,程序开发人员,软件提供商,服务网管运营商,设备提供商能够协调地联合起来开发,部署以及管理向用户提供的各种服务。

灰色部分是OSGi的基础也就是在任意一个本地 *** 作系统上安装有java虚拟器就可以运行OSGi,换言之OSGi是基于Java的架构。

其中Execution Environment、Modules、Life Cycle、Service、Security是从五个不同的角度对OSGi的架构进行划分。体系结构的最上层就是OSGi的统一接口Bundles。

Execution Environment是CVM + CDC + FP + PP组成的JVM配置,framework的modules这一方面功能将主要负责bundle的安装部署,更新和卸载,以及bundle在设备的物理存储(如果有的话)。在这个层次,每个bundle都是独立的,它的安装,升级和卸载完全不依赖任何其他bundle,这点framework提供了强大的隔离性。Life Cycle专门负责对bundle的解析(比如关联两个有相互依赖关系的bundle),启动(相当于运行应用程序)和停止(相当于停止应用程序)。这个层次中,bundle间的逻辑关系被创建起来,这些关系能否成功的创建,将会直接影响bundle的成功解析和启动。Service Registry可以认为是一个数据库,bundle启动后,可以向这个数据库注册它动态提供的服务。只要bundle不被停止,且bundle不主动撤销注册的服务,这个服务将一直保存在这个数据库中供其它bundle来查询和使用。而Services就是由bundle运行时提供的具体服务对象,这些服务对象的存在,使得framework具有极其动态的特征,并为framework运行时提供灵活强大的功能。

Jar文件是bundle的唯一格式,也就是说,我们要运行bundle,必须把代码打成jar文件。而jar文件可以带有manifest文件,这个文件对bundle是不可缺少的。OSGi规范里面,通过定义一系列适用于bundle的manifest关键字(bundle manifest header)来扩展manifest文件。

比如,开发人员在manifest中添加下面一行:

Bundle-Activator: aa.bb.cc.FamilyInfo

这样,在bundle被部署到framework后,framework就可以通过读取manifest的关键字来获得BundleActivator的具体实现类名,并通过reflection机制产生BundleActivator的实例。

依赖文件

OSGi规范里面,通过定义一系列适用于bundle的manifest关键字(bundle manifest header)来扩展manifest文件。

OpenDaylight中有的OSGi框架中的信息存放在MENIFEST.MF文件中,其中主要代码如下:

1 Manifest-Version: 1.0

2 Bnd-LastModified: 1394981967537

3 Build-Jdk: 1.7.0_25

4 Built-By: FLY_YE

5 Bundle-Activator: org.opendaylight.controller.switchmanager.internal.Act

ivator

6 Bundle-ManifestVersion: 2

7 Bundle-Name: switchmanager.implementation

8 Bundle-SymbolicName: org.opendaylight.controller.switchmanager.implement

ation

9 Bundle-Version: 0.4.1.SNAPSHOT

10 Created-By: Apache Maven Bundle Plugin

11 Import-Package:

其中,行1为manifest版本号,行3是基于的JDK版本,行5为绑定Bundle的类也就是OSGi插件的入口,在bundle被部署到framework后,framework就可以通过读取manifest的关键字来获得BundleActivator的具体实现类名,并通过reflection机制产生BundleActivator的实例。行6为用于Bundle的manifest版本,行7是Bundle的名称,行8为osgi specification 4强制要求的关键字,每个bundle都必须有唯一的symbolic name,行9为Bundle的版本,行10是Bundle的建立方式,行11是必须使用的,列出该bundle需要从其他bundle所引入的package(s)(提供该package的bundle必须在其manifest中有Export-Package:。

入口

在启动后通过Activator进入每个插件,这些Activator均继承自类ComponentActivatorAbstractBase,其中包含了初始化、销毁、配置、插件启动和停止等公共方法,每个插件都有其自身的Activator用来提供特有的服务,在Switch Manager中主要涉及到类的绑定和功能的加载。

public Object[] getImplementations() {

Object[] res = { SwitchManager.class }

return res

}

上述代码为绑定模块的方法,主要通过该入口与Switch Manager产生依赖。

configureInstance(Component c, Object imp, String containerName)用来增加相应的服务。

getGlobalImplementations()用于增加全局依赖——SwitchManagerCLI.class,该类中包含了相关的插件启动、停止,shownodes、shownodeconnectors信息。

错误初始化的TransactionManager 。不能实例TransactionConfig 。问题在配置文件中,如果用到Spring的话在Spring中配置的事务管理器,如果有配置数据源的话在检查一下,往回推!

拷贝

     net stop mysql

 cp -r /mysql  /mysql

备份还原

mysqldump -hlocalhost -uroot -p test >test.sql

mysql -hlocalhost -uroot -p test <test.sql

master/salve

ETL挖掘工具同步


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6685677.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-26
下一篇2023-03-26

发表评论

登录后才能评论

评论列表(0条)

    保存