为什么需要“OSGi中间件”

尽管在OSGi Runtime(Felix, Equinox等)的基础上,OSGi组织又规定了Blueprint规范以实现OSGi环境下的依赖注入,

但这还不够——没有提供类似Web开发框架那样的一些“平台级”的功能。比如日志,控制台,配置文件等。

很难想象没有Tomcat这样的Web中间件,开发Java Web应用的工作量有多大。同样的,OSGi应用也需要一种“中间件”,来实现各应用共性的一些功能,并管理应用的部署。

Apache Karaf就是这样的一个”OSGi中间件”。最早,Karaf只是Apache ServiceMix的Kernel子项目,后来独立出来成为Apache的顶级项目。

目前,Apache Karaf已经用于Apache Geronimo, Apache ServiceMix, Fuse ESB等项目。

Apache Karaf的主要竞争对手是Eclipse Virgo。

Apache Karaf的功能

Apache Karaf提供了如下“开箱即用”的功能:

热部署

尽管OSGi支持热部署,但并不是自动热部署,需要调用一些API去执行插拔的动作。Karaf在运行时可以自动处理[home]/deploy文件夹中的OSGi bundle,能够自动加载并在满足依赖关系时自动启动。

动态配置

Karaf在$KARAF_HOME/etc文件夹中存储配置文件。这些配置内容可以在Karaf运行时动态修改。

日志处理

基于Log4J的日志系统,同时支持多种日志API,如JDK 1.4, JCL, SLF4J, Avalon, Tomcat, OSGi等。

系统服务

Karaf可以作为系统服务运行。

控制台

可以在控制台进行服务管理、安装bundle等操作。还可以扩展自己的控制台命令。

可以通过SSH远程访问其他服务器上的Karaf控制台。

多实例管理

一个服务器上可以运行多个Karaf实例。对实例的管理可以在Karaf控制台中进行。

Bundle仓库

Karaf中内置了Pax URL的MVN协议,可以从Maven中央仓库安装bundle。

Bundle集合(Feature)

类似于Eclipse的Feature,Karaf中也支持Feature,即bundle的集合。使用Feature可以简化OSGi应用的部署。

Karaf初体验

安装好Java环境,加压缩Karaf,执行$KARAF_HOME/bin/karaf,可以看到Karaf的启动界面:

如图的提示,使用可以列出所有可用的命令,所有的命令支持--help参数。

如果执行list命令,可以列出所有的bundles:

还有很多其他的命令,比如

bundle:install 安装bundle

feature:repo-add 安装feature库

feature:install 安装feature

等等。详情可以参考官方的Quick Start。

如果查看Karaf的目录,可以看到如下的目录结构:

/bin: 启动、停止、登录karaf控制台的脚本

/etc: 配置文件

/data: 存放运行时的工作文件,清空这个目录可以使Karaf回到初始状态

/cache: OSGi framework的bundle缓存

/generated-bundles: 开发用的临时目录

/log: 日志

/deploy: 用于bundle的热部署

/instances: 存放karaf的各个实例用到的数据

/lib: 启动Karaf时需要的一些库

/lib/ext: Karaf需要的扩展库

/lib/endorsed: Karaf对其他API的再封装(背书)的一些jar包

/system: OSGi bundles库,使用Maven 2仓库的结构

Karaf启动模式和实例常规模式(regular mode) 使用命令bin/karaf,可以在前端启动Karaf并进入控制台

服务模式(server mode) 使用命令bin/karaf server,可以在前端启动Karaf,但不进入控制台

后台模式(background mode) 使用命令bin/start,可以在后台启动Karaf。

如果安装了service-wrapper(可以在Karaf中执行feature:install service-wrapper),还可以将

Karaf安装为系统服务。

一个Karaf节点可以运行多个”Karaf实例”。实际上,默认情况下Karaf会启动一个名为root的实例。

实例是包含单独的配置文件、数据文件等信息的一个Karaf副本,每个实例可以单独启动或部署bundle。

Karaf控制台中提供了一些管理实例的命令:

instance:create 创建实例

instance:clone 从现有的实例克隆一个新的实例

instance:start 启动实例

instance:status 查看实例状态

instance:connect 连接(切换)到某个实例

instance:stop 停止实例

instance:destroy 删除实例

ssh、客户端和Web控制台

Karaf内置了一个SSHd server,可以通过ssh远程访问Karaf控制台。

要启动远程控制台服务,需要在控制台中启动bundle: bundle:restart -f org.apache.karaf.shell.ssh。此时,远端可以使用ssh远程访问控制台,比如: ssh -p 8101 karaf@localhost。默认karaf用户的密码也是karaf。ssh的用户、密码、端口等都可以在etc/org.apache.karaf.shell.cfg中配置。

Karaf的客户端’bin/client’即可以连接本地控制台,也可以通过ssh连接远程控制台,甚至可以执行单个的命令。比如:

1bin/client -u karaf -p karaf -a 8101 hostname osgi:shutdown

Karaf还可以安装Web控制台(feature:install webconsole)。通过Web控制台能够管理

Karaf的bundle、feature、实例、配置以及查看日志。启动web控制台后,默认可以通过http://localhost:8181/system/console

访问web控制台,默认的用户名/密码为karaf/karaf。Web控制台的配置文件位于etc/org.ops4j.pax.web.cfg。

bundle URL和bundle仓库

Karaf在安装bundle时,可以使用多种URL来定位bundle,比如:

http http://repo1.maven.org/maven2/org/apache/servicemix/nmr/org.apache.servicemix.nmr.api/1.0.0-m2/org.apache.servicemix.nmr.api-1.0.0-m2.jar

file file:base/bundles/org.apache.servicemix.nmr.api-1.0.0-m2.jar

maven库 mvn:org.apache.servicemix.nmr/org.apache.servicemix.nmr.api/1.0.0-m2

其中,maven库方式是使用maven库作为bundle仓库,从其中检索需要的bundle。与maven类似,可以自动解决bundle之间的依赖问题。

Karaf提供了OBR (OSGi Bundle Repository),能够管理bundle仓库。在控制台使用命令feature:install obr安装OBR之后,就可以:

增加新的bundle仓库

obr:url-add file:///user/.m2/repository/repository.xml

查看已安装的bundle仓库

obr:url-list

刷新仓库

obr:url-refresh

删除仓库

obr:url-remove

列出所有可用的bundle

obr:list

查找bundle

obr:find

OSGi应用,Karaf Feature和KAR

OSGi运行的基本单元是bundle,bundle之间有依赖关系。一组满足依赖关系的bundle集合,加上相关的配置信息,称为一个“OSGi应用”。

将OSGi应用部署到Karaf的行为称为“provisioning”。

为了简化OSGi应用的部署,Karaf定义了feature,用于描述OSGi应用的部署信息,包括:

名称

版本号

描述信息

bundle集合

配置文件信息

依赖的其他feature

可以看出,Karaf中的feature与Eclipse Feature非常类似。

Karaf控制台中提供了一系列的feature和feature库的管理命令,包括:

feature:info

feature:install

feature:list

feature:repo-add

feature:repo-list

feature:repo-refresh

feature:repo-remove

feature:uninstall

feature:version-list

由于feature中可能使用远端的bundle,Karaf提出了KAR格式,可以把一个bundle相关的所有资源打包在一起。

这类似于使用maven定义的web工程,和最终打包的war文件之间的关系。

Karaf控制台中,可以打包(kar:create)、安装(kar:install)、卸载(kar:uninstall)或列出(kar:list)KAR文件。

企业级特性

Karaf提供了一系列的功能,以支持企业级应用的开发,包括:

日志

Karaf提供了灵活的日志系统,支持

OSGi Log Service

Log4j

Commons Logging

Logback

SLF4J

java Util Logging

等日志框架。不管应用中使用了上述哪种日志框架,Karaf中都可以进行统一的管理,如log level, appender等。

安全

Karaf提供了基于JAAS(Java Authentication and Authorization Service)的安全框架,可以控制对OSGi service、控制台命令、JMX、Web控制台等资源的访问。并且在应用中也可以使用Karaf的安全框架。

Web

Karaf可以作为Web容器使用,完全支持JSP/Servlet规范。

Karaf的Web容器同时支持WAR和WAB的部署。

JDBC、JPA和JTA

Karaf中即可以使用JDBC直接连接数据库,

也可以使用JPA作为持久层框架。Karaf可以通过Blueprint管理JPA的persist Unit。

Karaf支持JTA,以实现容器管理的事务。

其他

Karaf还支持EJB、CDI、JMX、JMS等企业级特性。

Karaf内置支持主备方式的部署,以保证高可用。使用Apache Karaf Cellar可以实现Karaf的集群部署。

java中间件karaf_Apache Karaf:OSGi中间件相关推荐

  1. java数据库中间件实现,分布式数据库中间件DDM的实现原理

    随着数据量不断增大,传统的架构模式难以解决业务量不断增长所带来的问题,特别是在业务成线性.甚至指数级上升的情况.此时我们不得不通过水平扩展,把数据库放到不同服务器上来解决问题,也就是我们说的数据库中间 ...

  2. 常见的中间件以及什么是中间件

    常见的中间件以及什么是中间件 1. 中间件是什么 2. 为什么要用中间件 3. 中间件的使用场景 4. 主要的中间件的分类 1. 中间件是什么 中间件顾名思义就是系统软件和应用软件之间连接的软件,以便 ...

  3. 什么是中间件,常用的中间件有哪些?

    什么是中间件? 顾名思义,中间件就是处于中间的软件,处于操作系统.数据库等系统软件和应用软件之间的一种起连接作用.中间件是一种独立的系统软件平台,为网络应用软件提供综合的服务和完整的计算环境,借助这种 ...

  4. karaf + osgi +maven 框架搭建

    配置环境: maven:3.6 jdk:1.8 karaf-osgi 首先我们需要新建一个总项目,此项目里面没有任何的代码,只是在pom文件中进行版本控制 新建项目的时候不需要选择任何的框架,需要的时 ...

  5. laravel 中间件不生效_laravel中间件实战(luke)

    简介 HTTP 中间件提供了为过滤进入应用的 HTTP 请求提供了一套便利的机制.例如,Laravel 内置了一个中间件来验证用户是否经过授权,如果用户没有经过授权,中间件会将用户重定向到登录页面,否 ...

  6. 东方通 中间件_东方通:中间件国产替代进程中的艰难领军者

    引言 东方通自1992年成立以来,一直深耕基础软件中间件的产品及相关技术研发,为国产中间件的开创者,连续十几年保持中间件市场占有率国内厂商第一.其时,国外的中间件也才开始起步,可以说与国际厂商站在了同 ...

  7. koa2 mysql 中间件_Koa2 和 Express 中间件对比

    koa2 中间件 koa2的中间件是通过 async await 实现的,中间件执行顺序是"洋葱圈"模型. 中间件之间通过next函数联系,当一个中间件调用 next() 后,会将 ...

  8. {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证...

    Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学会了 ...

  9. python中间件有哪些_python 中间件

    中间件 一.什么是中间件 中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django 的输入和输出.每个中间件组件都负责做一些特定的 ...

最新文章

  1. 计算机公式or,【转载】 odds、OR和RR的计算公式和实际意义
  2. Java日期格式转换
  3. 石头剪子布蜥蜴史波克python_C++字符串——石头剪刀布
  4. xampp如何上传文件到服务器,xampp安装到云服务器
  5. 以鶸ice为例,手撸一个解释器(一)明确目标
  6. Maven运行时异常java.lang.UnsupportedClassVersionError的解决方案
  7. Kibana:在 Kibana 中对数据进行深入分析 (drilldown)
  8. html点中弹出选择框,javascript点击弹出选择框
  9. 广域网的应用场景是什么?
  10. androidnbsp;网络联接nbsp;CMWAPnbsp;CTWAP
  11. 如何搞定你喜欢的美术妹纸?
  12. 计算机硬件 OR CX 1,计算机硬件复习提纲
  13. DDOS压力测试平台源码
  14. Linux红帽RHEL 7/8 系统重置root用户密码
  15. 【jiasuba】分享:键盘失灵烦恼多 教你轻松禁用原键盘
  16. Spring MVC框架——Web开发框架
  17. 计算机上如何配置扫描设置,在 MF Toolbox 中配置扫描设置
  18. Windows安装RabbitMQ
  19. 深度学习之Bottleneck Layer or Bottleneck Features
  20. 一款很好用的,免费的外网映射工具Ngrok 国内版,可以满足基本的开发测试需求

热门文章

  1. The Flatmates - 1
  2. Java标识符命名规则
  3. keras:5)fit_generator
  4. Linux 命令xxd功能
  5. 弹性盒子(Flex)相关属性全解析
  6. Live Consciously
  7. 目前见过的最好的开源OA(自动化办公系统)
  8. 佛祖说出的爱情箴言【转载】
  9. 低代码开发平台有哪些 【最新】低代码开发平台排名
  10. 驾校练车总结 -- 科二 -- 直角