`
jacktanlikejava
  • 浏览: 8717 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

基于 OSGi的企业级开发框架实践——开发框架的创建

 
阅读更多

终于到了主角登场的时刻了!之前化了不少笔墨介绍有关OSGi和Spring DM框架的内容,目的就是为了我们开发框架的出场做铺垫。在序篇中我已经介绍了做为开发框架所应具备的要素。其中最为关键的是要为开发人员提供一套统一的编程模型或称其为开发模板。所有开发人员通过遵循统一的开发标准就可以极大的提高开发效率和质量。

基于OSGi的开发与普通的Java或是Web开发有着不同的项目组织结构。因为OSGi崇尚的是模块化,因此,它的项目组织结构会变得稍微复杂一点,下图展示了基于OSGi开发框架所生成的项目组织结构:


(图一)

从上图中我们可以发现,基于OSGi的开发框架是由一系列的Java项目组成的,每个项目就是一个Bundle。开发框架按照系统的一般功能预置了一些最基础的Bundle,比如,helloworld-common-dal,这个Bundle就是专门负责提供与数据库操作相关的服务(其实就是DAL层)。每个bundle都各司其职并相互协作,最终构成了整个系统的完整功能。当然,开发框架只提供了最最基本的Bundle,你也可以在此基础上追加其他功能的bundle。在下一篇文章中我会详细介绍开发框架提供的每个Bundle的具体职能。

看到这里你可能会觉得疑惑,这么复杂的项目结构每次都靠手工来创建?这种纯体力活谁愿意干!的确,如果每次都要从头创建这样一套基于OSGi的开发框架模板,那我就没必要在这里写这篇文章了。开发框架会提供工具给开发人员,自动的生成开发框架模板。自动化工具是基于Maven插件的,生成的开发框架模板除了提供Bundle的组织结构外,还提供了系统运行所必须的基本配置。

接下来我们就开始创建开发框架模板。首先你的系统中必须安装Maven工具。由于Maven的安装和使用不是我们这系列文章所关注的内容,所以请各位同学自行到网上去查看相关的文章介绍。这里我假设你已经安装了Maven并且可以熟练的操作它。

生成开发框架模板需要一个pom.xml文件,该文件中定义了插件的基本信息。点击这里可以下载它。将下载的文件解压缩,会得到一个pom.xml文件,将其放在任意目录下,比如:D:\test。然后点击这里下载一个Eclipse的workspaces目录。将下载的文件解压缩,会得到一个workspaces文件夹,将其放在与之前下载的pom.xml文件同级的目录中,最终结果如下图所示:


(图二)


接下来我们打开一个命令行窗口,并将当前目录切换到存放pom.xml文件的目录下(本例中是D:\test),如下图所示:


(图三)

最后在当前命令行下输入如下命令:

mvn storevm:gencore -Dapp.name=helloworld
其中app.name参数是应用程序的名称,还有其他几个可选参数,完整的命令行如下所示:

mvn storevm:gencore -Dapp.name=helloworld -Dpackage.name=org.storevm -Dversion=1.0.0 -Durl=http://www.storevm.org
其中package.name参数表示每个Bundle的基础package名称(默认值为org.storevm),version参数表示Bundle的版本号(默认值为1.0.0),url参数表示pom.xml文件中的url属性(默认值为http://www.storevm.org)。

当看到命令行窗口中显示如下图所示的内容时表示生成OSGi开发框架模板成功了:


(图四)

然后我们回到项目根目录下(D:\test)看一下是否真的已经生成了框架模板,如下图所示:


(图五)

从上图中我们可以发现,项目目录已经生成了(红色框中所示),另外还会生成一个velocity.log文件,这是插件运行时生成的velocity日志文件,我们可以安全的删除它。至此基于OSGi的开发框架模板就创建完成了,接下来让我们来看看框架模板中有些什么东西以及如何导入到我们的开发工具中,如:Eclipse。

当你打开框架模板目录后,会看到如下图所示的目录结构:


(图六)

整个开发框架是遵循Maven项目结构的,所以诸如打包,部署等都是依赖Maven工具的,所以这里再次提醒各位同学,如果对Maven不了解,请尽快去补习一下相关的知识。开发框架一共由4个目录组成,其中app目录是主应用程序目录,所有代码都写在这个目录中。assembly目录是应用程序的最终部署目录,当我们开发完成之后,运行Maven的打包安装命令就可以将源代码编译打包成jar文件并按照一定的组织方式自动的部署到assembly目录中,最后运行该目录中的启动脚本(startup.sh),就可以运行OSGi应用程序了。config目录中是一些Fragment类型的Bundle,用于配置应用程序的默认参数值,比如日志,分布式事务,Jetty容器等等。如果你不了解什么是Fragment Bundle,就去看看上一篇文章(认识OSGI和Spring DM)中关于Fragment Bundle的介绍。web目录是标准Web应用程序目录,用于提供OSGi应用程序的UI界面。当然如果你的应用程序不需要UI,则可以忽视它的存在。在我们的OSGi开发框架中,UI界面是独立的Web程序,它和OSGi应用程序运行在2个独立的JVM中,所以他们之间只能通过远程通讯来完成交互,目前我们使用的是Hessian。至于为什么要这么搞,你可以回过头去看看序篇中的介绍就明白了。这样做的第二个好处是,OSGi应用程序可以分布式部署,比如:应用程序的主要运算集中在OSGi上,而我的服务器可能只是区区5台(或是一台服务器上的5个虚拟机),这时我就可以把OSGi程序部署在4台服务器上,而把UI程序部署在另外1台服务器上,然后通过开发框架提供的分布式服务配置,就可以完成OSGi的分布式部署了(关于OSGi的分布式部署在后续的文章中会有介绍)。现在你可以随意的浏览各个目录或其下的子目录,看看还有什么其他令人兴奋的东西,可惜除了目录套目录,什么都没有。那这么把这一坨目录导入到我们的IDE中呢?接下去,我们就开始使用Maven工具来生成项目结构。

如果你还在浏览目录,则先将目录切换到应用程序的根目录下,例如:D:\test\helloworld。我们再次打开一个命令行窗口,并将当前目录切换到应用程序根目录下(本例中的目录为D:\test\helloworld),然后在该目录下键入如下Maven命令:

mvn clean install -Dmaven.test.skip=true
这是Maven的安装命令,今后我们会经常的使用到它,所以请同学们记住它的长相,这里我们先执行一次,目的是为了生成OSGi运行所需要的第三方Bundle(非常的多,请淡定)。接着,命令行窗口开始快速的滚屏,如果你是第一次执行Maven,可能需要从中央仓库下载JAR包,所以整个过程会比较的漫长,请耐心的等待。当看到命令行窗口中输出如下内容时表示执行成功:

(图七)

此时我们再次回到assembly目录,看看发生了什么变化,如下图所示:

(图八)

在该目录中增加了不少目录,这些目录中存放着许多Jar包,这些Jar包是OSGi应用程序正确运行所必须的第三方Bundle,之后我们需要将这些Bundle导入到Eclipse中,用于创建OSGi运行时环境。从目录名称我们大致可以知道目录中JAR包的用途,如果有兴趣,你可以自行浏览一下,这里就不再赘述了。

接下去我们要生成Eclipse项目结构了,我们在之前的命令行窗口中继续输入如下命令(不要切换目录):

mvn eclipse:eclipse
命令行窗口再次的快速滚屏,当出现和“图七”类似的内容时表示创建Eclipse项目完成,此时我们可以启动Eclipse IDE了。当出现选择workspaces的窗口时请选择之前我们下载来的那个workspaces目录(D:\test\workspaces),如下图所示:

(图九)

黄色标记出来的请不要选中(请注意,在多项目开发的情况下,我们一般都不会选中该选项)。然后点击OK按钮,Eclipse IDE开始加载启动。接下去,我们在Eclipse中先导入那一大坨第三方Bundle。在Eclipse中选择“File->Import...”菜单,会弹出Import窗体。在该窗体中选中“Plug-ins and Fragments”选项,然后点击“next”按钮。如下图所示(这里要注意,你的Eclipse必须要支持Eclipse插件的开发,否则就会看不到这个选项):

(图十)

在“Import Plug-ins and Fragments”窗体上选中“Import From”框中的“Directory”单选框,然后点击“Browse...”按钮,在弹出的“Plug-in Directory”窗体中选择assembly目录中的第三方Bundle目录,如下图所示:

(图十一)

点击“next”按钮,进入到“Selection”窗体,在该窗体中点击“Add All”按钮,将Bundle从左边窗口移到右边窗口。完成之后点击“ Finish”按钮。如下图所示:

(图十二)

到此导入第三方Bundle完成。用同样的方法,将assembly目录中的其他几个第三方Bundle也导入到Eclipse中(要导入的目录有:activemq,equinox,jetty,logging,spring,springdm,tools,web,xa。其中configuration和core中的Bundle不需要导入,切记!)。导入完成之后, Eclipse界面如下图所示:

(图十三)

由于篇幅的关系,这里只能列出一小部分。好了,第三方Bundle都已经导入了,接下去要导入我们的应用程序Bundle了。点击“File->Import...”菜单项,在弹出的Import窗体中选择“Existing Projects into Workspace”选项,然后点击“next”按钮,如下图所示:


(图十四)

在弹出的“Import Projects”窗体上选中“Select root directory”单选框,并点击“Browse...”按钮,在弹出的窗体中选择应用程序根目录,如下图所示:

(图十五)

然后会在“Projects”列表框中显示出所有可以导入的项目,接着我们选中“Add project to working sets”复选框,再点击“Select...”按钮,然后在弹出的窗体上点击“New...”按钮,在弹出的窗口中选择“Java”,然后点击“next”按钮,如下图所示:

(图十六)

最后在弹出的窗体中输入Working sets的名称,例如:helloworld。点击“Finish”按钮完成,如下图所示:

(图十七)

此时又回到“Select Working Sets”窗体,请选中刚才添加的Working Sets,然后点击“OK”按钮,如下图所示:

(图十八)

最后点击“Finish”按钮,完成项目的导入。最后结果如下图所示:

(图十九)

至此创建OSGi开发框架就算大功告成了。你可以随意的浏览一下每个项目中都包含些什么。在下一篇文章中,我们将介绍OSGi开发框架的基本结构以及各Bundle之间的依赖关系,只有在了解了这些内容之后,我们才能正式的进入编码阶段。

分享到:
评论

相关推荐

    企业级快速开发平台JXADF.zip

    基于OSGi的企业级快速开发平台——JXADF 1、基于OSGi、J2EE 2、插件集市(http://osgi.jxtech.net)中有丰富的插件。 3、前端代码(界面、CSS、JS、图片等)、后端代码(JAVA业务逻辑、SQL脚本【只需要提供一种...

    基于OSGi的轻量级动态化系统研究

    例如,可以构建一个企业级应用平台,该平台具备基本的功能模块,并支持通过插件形式扩展新的业务功能。通过这种方式,不仅能够满足当前的需求,还可以随着业务的发展轻松地进行功能扩展。 #### 结论 基于OSGi框架...

    Equinox开发OSGi应用程序

    为了开发基于OSGi的应用程序,需要使用实现了OSGi标准的框架。目前市场上有几种流行的OSGi框架: 1. **Equinox**:这是Eclipse项目中使用的OSGi框架,也是Eclipse强大插件体系的基础。由于得到了IBM的支持,Equinox...

    OSGI学习手册及实践

    它最初是为了创建智能家庭网关设备而设计的,但后来逐渐被广泛应用于各种领域,包括企业级应用开发。 - 在国内,尽管一些开发者可能更熟悉传统的SSH(Struts + Spring + Hibernate)框架,但在国际上,OSGI因其强大...

    Enterprise OSGi in Action

    整体来看,《企业OSGi实战》是为那些希望使用OSGi技术来开发企业级应用程序的Java开发者所准备的实用参考书。它不仅仅提供了理论知识,更重要的是通过丰富的示例和案例来展示如何在实际的企业项目中应用OSGi的各种...

    OSGi与Spring:Spring DM开发

    而Spring框架作为Java开发中不可或缺的一部分,它在简化企业级应用开发方面扮演着重要角色。当这两个技术结合在一起时,便诞生了一个强大的框架——Spring DM(Dynamic Modules)。本文旨在详细介绍如何配置基于...

    OSGi原理与最佳实践

    7. **案例研究**:通过实际项目案例,展示OSGi在企业级应用中的应用,比如在嵌入式系统、云计算、大数据处理等场景中的应用。 8. **源代码分析**:附带的源代码可能会包含示例应用,帮助读者更好地理解和掌握OSGi的...

    osgi学习笔记(一)

    在《OSGI进阶.pdf》这本书中,可能涵盖了更深入的话题,比如bundle的打包和部署、服务注册与查找、bundle间通信的协议(如白板模式和Declarative Services)以及如何使用OSGi进行企业级应用开发。这本书可能会详细...

    OSGI 实践 资料 pdf中文

    这种灵活性使得OSGi成为企业级应用、嵌入式系统和物联网解决方案的理想选择。 标题提到的"OSGI实践资料"可能是关于如何在实际项目中应用OSGi技术的指导文档,涵盖了从基础概念到高级实践的方方面面。PDF中文版意味...

    OSGi_Java模块化框架的实现

    主要的争议点在于OSGi被认为是复杂的,并且需要额外的工作来适应大多数企业级Java环境。另一方面,一些人认为OSGi过于强大,对于简单的应用场景来说可能显得有些冗余。例如,与Jigsaw相比,后者被认为更加“干净”、...

    org.eclipse.osgi_3.7.0.v20110613及源码

    OSGi在许多领域有着广泛的应用,包括嵌入式系统、服务器端应用、桌面应用以及企业级Java EE应用。Eclipse IDE本身就是一个基于OSGi的平台,各个插件作为独立的bundle进行管理。此外,Spring Dynamic Modules(Spring...

    osgi三本教程

    这三本教程——《OSGi进阶》、《OSGi原理与最佳实践》和《OSGi实战》是深入理解OSGi技术的宝贵资源。 《OSGi进阶》可能涵盖了高级OSGi概念和技术,包括服务注册和服务发现机制,以及如何利用OSGi的生命周期管理来...

    OSGi_Service

    **OSGi服务详解** OSGi(Open Service Gateway Initiative)是一种Java模块化系统,它为创建、部署和管理软件组件提供了一种强大而...对于大型企业级应用或需要高度可扩展性的系统,OSGi是一个值得考虑的解决方案。

    Eclipse精要与高级开发技术(PDF)

    - OSGi框架:介绍Eclipse基于OSGi的服务模型,理解模块化开发的优势。 - RCP(Rich Client Platform):讲解如何利用Eclipse的RCP框架开发桌面应用程序。 4. **Web和企业级开发** - Java EE支持:介绍Eclipse对...

    OSGi原理与最佳实践(精选版)

    - **社区支持**:持续的社区支持和技术进步将继续推动OSGi的发展,使其成为构建复杂、可扩展的企业级应用的理想选择。 综上所述,《OSGi原理与最佳实践》这本书不仅为初学者提供了全面的OSGi基础知识,还为希望深入...

    OSGI实战中文版

    7. **Equinox和Felix**:OSGi有两个主要的实现框架——IBM的Equinox和Apache的Felix。书中的实践部分可能会涉及这两个框架的使用和比较。 8. **实际应用案例**:书中可能会通过真实的案例,如企业级应用、嵌入式...

    OSGI book source

    10. **企业应用集成**:OSGi在企业级应用中扮演重要角色,如Spring DM(现在是Apache Aries)和Pax Exam等项目,提供了与现有框架和工具的集成。 通过对《OSGi原理与实践》这本书源码的探索,读者将能够深入理解...

    OSGI in Depth

    ### OSGi深入解析 #### 一、OSGi作为新的应用开发平台 OSGi(Open Service Gateway Initiative)不仅仅是一个框架,它还...对于那些希望构建复杂且易于维护的企业级应用的开发者来说,深入学习OSGi是非常有价值的。

    Getting Started with OSGi_ Part2

    OSGi技术广泛应用于企业级应用开发中,尤其是在Eclipse插件开发和Java EE应用服务器中。OSGi规范定义了如何在运行时管理Java应用程序的生命周期,包括安装、启动、停止、更新和卸载模块(称为bundle)。通过模块化,...

Global site tag (gtag.js) - Google Analytics