• Virgo简介


    <mark>Virgo</mark>简介

     由  罗俊杰 发布

    简介

    Virgo项目Web服务器是EclipseRT项目的一部分,是一个完全模块化的Java运行时。Virgo自身就是设计为在标准OSGi框架实现(Equinox)之上的一个OSGi bundle集合。Virgo可以运行企业级Java应用以及基于Spring(Spring - powered)的应用,具有很强的灵活性和可靠性,它提供了一个支持企业级Java应用开发、部署和服务的简单而强大的平台。

    历史

    2007年末作为“SpringSource Application Platform”启动,很快改名为“SpringSource dm Server”。
    SpringSource dm Server的三个基本目标:
    • 提供一个更好的OSGi平台
    • 支持Java EE应用向OSGi的平滑过渡(简化迁移)
    • 自身是模块化和可扩展的
    2008年末dm Server1.0发布;
    2009年末dm Server2.0发布,引入了独立的kernel;
    2010年1月Springsource将dm Server贡献给Eclipse基金会,改名为Vrigo;
    之后Virgo经历了2.1版本和3.0版本,其中3.0开始支持Jetty和snaps框架;
    2012年3月,发布Virgo 3.5版本,引入了p2,以及从kernel中分离出了“Nano”。

    特点

    Virgo具有以下一些特点:
    • Web管理控制台:还记得OSGi生命周期管理的API吗?基于这些API你可以自己实现一个控制台,Virgo给你提供了一个Web界面,你点点鼠标就可以部署和管理bundle了。当然,Virgo的控制台还提供了其他一些额外的信息,比如诊断性的dumps,这对于调试是非常有帮助的。
    • Gogo shell :这是apche felix项目下的一个子项目,Virgo给集成过来了,也是用于部署和管理bundle的,这回不是Web界面了,而是通过SSH或者telnet。
    • Plans - 这是Virgo在bundle基础上引入的一个概念,你可以看成是多个bundle的一个集合,这些bundle构成一个整体,因此也引入了作用域,和其他的bundle隔离开来了。
    • 供应(Provisioning) - 自动从本地或者远程的仓库中提供系统所依赖的bundle、plan、pars和配置。这些都是Virgo中的制品模型,后面会有介绍。
    • Web服务器 - 实现了OSGi Web Container规范,还记得OSGi企业规范吧,这是其中的一部分。支持原始的WAR格式,当然更支持WAB格式了。这样一个服务器对于将OSGi应 用到Web开发中来实在是太有用了。如果你有基于OSGi HttpService来开发过Web应用的经历你就更有体会了。
    • 用户空间(User region)- Virgo引入这一概念用来将用户安装的应用和Virgo的内核隔离开来。这使得开发者只需关注于应用本身的制品和依赖,不需要关注内核中的东西。
    此外Virgo还集成Spring 3,提供了强大的日志功能、JMX管理功能以及Web应用的热部署功能。
    下面这张图展示了Virgo的大部分特点。

    http://assets.osgi.com.cn/article/7289227/Virgo.png

    为什么选择Virgo?

    在遇到以下几种情况下你可以考虑选择Virgo。

    • 首先是当你需要一个可以和OSGi环境无缝融合的应用服务器时;
    • 其次是当你需要一个OSGi开发的集成工具集时,你会发现你自己配置起一个OSGi的开发环境,找到你所有需要bundle并把他们粘合起来是一件很费事的事情,现在Virgo全部给你做了,而且给你提供了Eclipse的插件,进一步简化了你的开发。
    • 最后当你想基于OSGi来构建你应用的内核时,Virog的内核依然可以成为你的选择。

    具体来说,因为Virgo除了为开发者提供了一个标准OSGi的运行环境之外,基于Virgo还可以复用传统的Java包和War包,集成Web容 器,提供强大的诊断功能和高级的开发工具。 事实上,Virgo虽然推出不久,而且也还在演化之中,但已经有不少成功案例,比如Virgo的官方文档中介绍了GME集团构建的一个大型企业应用,其中 就采用了Virgo,其中有48个service bundle,20个Web budnle,而且采用了Virgo的Snaps技术。Snaps是一种在Web层的模型化技术,后面我们会有详细的介绍。

    Virgo的基本概念

    下面介绍Virgo中的几个基本概念。

    Provisioning repositories
    包含制品和元数据,通过制品类型、命名和版本进行索引。库内容的变化不会引起制品的部署、刷新或者卸载。
    External Repositories
    扫描一个目录生成,可包含内嵌目录,生成后目录内容不影响库内容。 ext目录是External Repositories。
    Watched Repositories
    扫描一个目录生成,不包含内嵌目录。周期性扫描目录,扫描到变化会更新库。usr目录是Watched Repositories。
    Remote Repositories
    远程库,和Maven的repositories类似,周期性扫描index,基于index从远程加载bundle。
    Repository Chain
    远程库,和Maven的repositories类似,周期性扫描index,基于index从远程加载bundle。
    制品类型
    包含Bundle、Configuration、PAR、Plan和Library。PAR、Plan和Library称为Grouping bundles。
    PAR
    一个PAR中的bundle同时解析(意味着任何一个解析失败,整个PAR解析失败)。PAR中的bundle之间可以相互依赖。PAR中的bundle可以依赖外部的包或者服务,但是外部不能依赖PAR提供的包和服务。
    Plan
    一个XML文件,包含了制品(一般为bundle)列表,制品在Virgo的库中。
    Library
    一个bundle集合,用来引入(通过Import-Library)。
    Kernel
    提供了除Web方面的OSGi模块化的所有支持。
    • OSGi bundles, PARs, plans和配置等制品的部署
    • 本地仓库和远程服务仓库
    • 作用域(还记得Plan吧?)
    • 热部署Hot deployment
    • 用户控件User region
    • 自动供应(使用别的远程服务仓库)
    • 系统的跟踪
    • spring和spring DM的支持
    Kernel的好处是便于内核和应用的升级,内核的Spring版本可以和应用的Spring版本不一样。
    User region
    管理用户应用的子系统。将Kernel和应用(包括VTS的应用,比如Admin Console)隔离开来。

    Virgo的全貌

    Virog的全貌可以用下面这张图来表示。

    这张图中的内容在前面的一些介绍中已经有一些体现。注意Nano是从原来的Kernel中剥离出来的,提供了大部分的诊断(diagnostic) 功能,p2支持,提供一个single region的框架。Kernel则提供部署流水线,多种制品类型的支持,region,scoping等一些概念的实现,见基本概念。Regions将 来支持多region,应用之间也可以相互隔离。Virgo IDE工具以Eclipse插件的形式存在,支持bundle,PAR和Plan的开发和部署,同时还提供了Virgo Bundlor,一个Manifest生成工具。最上层的Snaps是在Web层实现了模块化的支持。具体的细节以后我们再展开详述。

    复用的技术

    Virgo复用了很多已有的技术、平台和工具。比如:
    • Tomcat - Gemini Web的一部分,实现Java Servlet规范。
    • Jetty - 实现了OSGi Web应用标准和Java Servlet规范。
    Gemini Web - 支持WAR和WAB的部署。
    Gemini Blueprint - 支持基于XML的服务和服务应用的申明。
    • Gemini Management - 提供Bundle的JMX管理视图,Kernel和User Region各一个实例。
    • Gogo Shell - 属于Apache Felix 项目,支持基于SSH和Telnet的shell访问。Virgo增加了一些特有的命令,如部署、检查和管理制品(artifact),以及诊断类加载问题等。
    • Logback - 支持日志。
    • Equinox OSGi Framework - OSGi框架的实现。Virgo基于Equinox一些特定的实现特征,提供了更好的解析诊断,配置类加载和资源查找。
    • Equinox Service - 其中包括:Declarative Service,Configuration Admin Service, Event Admin Service。
    • Equinox P2 - Eclipse用于安装和更新系统及插件的一个provisioning平台。
    • Equinox Region Bundle - 支持区域的概念,对OSGi框架进行隔离划分,基于OSGi标准的hooks实现。

    支持的规范

    Virgo支持的规范包括:
    • Java EE Web Profile
    • Java Servlet Specification
    • OSGi Blueprint Service
    • OSGi Configuration Admin Service
    • OSGi Core
    • OSGi Declarative Services
    • OSGi Event Admin Service
    • OSGi Log Service
    • OSGi Web Applications
    暂时还不支持OSGi Subsystem Specification

    控制台

    默认没有打开,修改osgi.console.properties,设置enabled=true可以打开控制台。 SSH或者telnet 2502(user region)或者2402(kernel),默认密码admin/springsource;可在org.eclipse.virgo.kernel.users.properties 中配置。

    bundle 管理和显示bundle信息
    clhas 显示包含某个类或者资源的所有bundle
    clexport 显示导出某个类或者包的所有bundle.
    clload 示能够加载一个类的所有bundle
    config 管理和显示配置的有关信息
    packages 显示导出包的信息
    par 管理和显示Par
    plan 管理和显示plan
    service 显示service信息
    install 安装制品
    shutdown 关闭Virgo内核

    Virgo提供了两种日志类型,其中事件日志(Event logging)记录系统中的重要事件,而跟踪日志(Trace logging)记录系统中的所有内部事件和应用的输出。

    供应仓库

    Virgo提供了一个供应仓库。这类似于Maven的仓库。所不同的是,Maven仓库是在开发时可以从仓库中获取包,而Vrigo可以基于P2在 运行时动态远程加载Bundle,很强大吧。当然Virgo也有本地的仓库。通常安装制品,拷贝到 $SERVER_HOME/repository/usr目录下即可。
    下面是一个典型的仓库配置:

    ext.type=external
    ext.searchPattern=repository/ext/{artifact}
    usr.type=watched
    usr.watchDirectory=repository/usr
    remote-repo.type=remote
    remote-repo.uri=http://my-host:8080/org.eclipse.virgo.apps.repository/my-hosted-repo
    remote-repo.indexRefreshInterval=30
    watched-repo.type=watched
    watched-repo.watchedDirectory=repository/watched
    watched-repo.watchedInterval=5
    chain=ext,usr,remote-repo,watched-repo    

    Virgo就先介绍到这里,事实上Virgo在OSGi的基础上进一步引入了一些控制系统复杂性的概念,这些概念的含义和具体的实现方法,后面我们再做介绍。

  • 相关阅读:
    ThinkPHP中的CURD操作
    安卓自写Adapter
    安卓 报错 Check the Eclipse log for stack trace.
    web开发 关于src跳转
    javascript入门学习笔记2
    javascript入门学习笔记
    最全java的读写操作(转载)
    http请求的cookie
    java 安卓开发之文件的读与写
    转 安卓控件属性大全
  • 原文地址:https://www.cnblogs.com/zouhao510/p/5156235.html
Copyright © 2020-2023  润新知