终于到了主角登场的时刻了!之前化了不少笔墨介绍有关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文件,这是Maven插件运行时生成的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工具来生成Java项目结构。

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

mvn clean install -Dmaven.test.skip=true

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

(图七)

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

(图八)

在该目录中增加了不少目录,这些目录中存放着许多Jar包,这些Jar包是我们开发框架能正确运行所必须的第三方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界面如下图所示:

(图十三)

可能你看到的并不像图十三所展示的那样,那请你点击“View Menu”,在弹出的下拉菜单中选择“Configure Working Sets...”菜单项,如下图所示:

(图十四)

在弹出的“Configure Working Sets”对话框中将“Other Projects”选项选中,最后点击Ok按钮完成。如下图所示:

(图十五)

此时,我们就能看到如“图十三”所展示的样子了。由于篇幅的关系,这里只展示了一个目录下的第三方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之间的依赖关系,只有在了解了这些内容之后,我们才能正式的进入编码阶段。

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

  1. 基于OSGi的企业级开发框架实践——发布和使用分布式OSGi服务

    随着公司业务的不断扩展,业务人员向IT部门提出了更多的需求,为了快速响应业务人员的需求,尽快的交付成果,码农们日以继夜的将代码往现有系统中不断的堆叠,直到某一天,码农们发现无法再继续往系统上堆叠新的代 ...

  2. 基于OSGi的企业级开发框架实践——序篇

    OSGi就好比达摩克利斯之剑一般,在其锋利而强大的背后却隐藏着不可预知的危险.我的形容好像有点夸张,不过大多数的研发团队基本上都认为OSGi并非像各类评论文章中介绍的那样光彩熠熠,而更多的是疑惑.怀疑 ...

  3. 基于 OSGi的企业级开发框架实践——认识OSGi和SpringDM

    一. OSGi基础 1. 什么是OSGi OSGi--Open Service Gateway Initiative,最初的目的是为各种嵌入式设备提供通用的软件运行平台.后来经过10年的发展和壮大,O ...

  4. 基于OSGi的企业级开发框架实践——运行开发框架

    在上一篇文章中我们介绍了如何创建基于OSGi的企业级开发框架,并将开发框架导入到Eclipse中.接下去,我们将在Eclipse中让开发框架运行起来,一来可以检测一下我们的开发框架是否完整无缺,二来在 ...

  5. 信创办公–基于WPS的PPT最佳实践系列 (创建自定义动画)

    信创办公–基于WPS的PPT最佳实践系列 (创建自定义动画) 目录 应用背景 操作步骤 1.动画效果创建 应用背景 动画效果能使幻灯片更加吸引人们,比单纯的文字和图片PPT更有趣味性,那该如何设置动画 ...

  6. 信创办公–基于WPS的EXCEL最佳实践系列 (创建表格)

    信创办公–基于WPS的EXCEL最佳实践系列 (创建表格) 目录 应用背景 操作步骤 1.新建空白工作簿并命名为"奖牌榜" 2.使用模板新建工作簿 3.新增一张工作表,并将工作簿的 ...

  7. 基于OSGi的企业级开发框架实践——OSGi Annotations

    我们的开发框架之所以选择使用Spring框架,是因为它提供了一个简单易用的Bean编程模型(采用IoC和AOP设计模式),通过XML配置文件简化了复杂而冗长的Bean初始化以及依赖关系的定义.不过随着 ...

  8. osgi java web_基于OSGi和Spring开发企业级Web应用

    Spring 作为一个新的事实上的工业标准,OSGi已经受到了广泛的关注,就在不久前EclipseCon也发布企业级OSGi标准,而IBM以及Eclipse也宣称将大力发展Java模块化.Spring ...

  9. 基于DDD的现代ASP.NET开发框架--ABP系列之1、ABP总体介绍

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之1.ABP总体介绍 ABP是"ASP.NET Boilerplate Project (ASP.NET样 ...

最新文章

  1. [share]PHP购物车类的源码
  2. linux mpich配置_Linux下安装MPICH
  3. VTK:Picking之HighlightPickedAct
  4. 如何在 ASP.NET Core 中为同一接口配置不同的实现
  5. 信息学奥赛一本通C++语言——1025:保留12位小数的浮点数
  6. dubbo 异步调用
  7. haproxy基于cookie实现会话绑定
  8. 《Lucene in Action》 MoreLikeThis 实例
  9. L3-008. 喊山-PAT团体程序设计天梯赛GPLT(广度优先搜索)
  10. vue项目中我的收货地址功能做法(添加地址、编辑地址、删除地址、默认地址、省市区三级联动)
  11. PWM整流器仿真。 在simulink中搭建了PWM整流器,采用电压电流双闭环控制,实现了网侧电压与电流同相位,单位功率因数运行
  12. 【C语言】案例四十八 综合案例——天生棋局(围棋棋盘)
  13. HYSBZ 1406 密码箱
  14. 在线教育需要准备好哪些直播设备?
  15. 独家食用指南系列|Android端SQLCipher的攻与防新编
  16. Android Studio报错:No key with alias xxx found in keystore xxx 解决方法
  17. 车用永磁电机的各种弱磁策略
  18. java异常面试_java中异常的面试
  19. 打开任务管理器只显示任务 不显示进程了怎么办?
  20. VUE课堂笔记1-课前准备

热门文章

  1. 诱人的Siri 开启人机交互的大门
  2. 西安交大计算机考研软件工程编程题库(二十四)
  3. STC11F04E——电子工艺实习
  4. css button自动调整位置_CSS 小技巧
  5. OPT机器视觉12月高峰论坛一览表
  6. Qt TCP/UDP局域网通信软件 模仿QQ TIM
  7. IntelliJ IDEA历史版本官网下载地址
  8. (亲测可用)修改VisualSVN Server地址为ip地址,修改svn服务端地址为ip或者域名地址的方法
  9. 华为平板M5一键刷ji教程--精简ROOT工具分享
  10. 关于APP个人信息安全和隐私合规评估,你想知道的都在这!