liferay 7.0 开发基本概念

来源:互联网 发布:网络爬虫怎么用 编辑:程序博客网 时间:2024/06/05 03:05

谷歌翻译来源

模块

Liferay上构建的所有新应用程序,扩展和自定义均以模块化方式构建。模块是模块化体系结构中的单个分发和部署单元。


本着遵循现有标准的精神,Liferay利用了一套非常强大的OSGi标准。除其他外,OSGi定义了模块如何相互依赖和通信。它还定义了模块的打包格式:OSGi包。 OSGi模块只是一个典型的JAR文件,Java开发人员熟悉它是一个包含编译代码,模板,资源和一些元信息的ZIP文件。


服务

现代软件体系结构的一个方面是服务的概念。这些独立运行的代码在调用时提供特定的功能。他们的运作就像现实世界中的服务一样。例如,你可以叫一个服务来修剪你的草坪。你知道如何打电话给服务,并给它什么需要(金钱),以获得服务(割草坪)。基于软件的服务以同样的方式工作。


Liferay的服务是由OSGi联盟定义的标准服务。编写任何东西,无论是应用程序,数据库接口还是定义的“服务”,都很容易实现为OSGi服务,因为它们都非常强大,易于开发。如果您了解Java接口以及它们是如何实现的,那么您已经了解了90%以上的知识。首先,定义接口或为服务订立合同:返回什么,以及为了此返回需要什么。接下来,您将定义一个实现合同的实现类。


在服务模型中,一个类请求提供所需功能的服务。这个功能是自动提供的(经常注入)正确的实现。它与Spring或EJB相似,但有一个重要的补充:可以在运行时更改实现,而无需重新启动系统。这是因为当部署服务时,它成为Liferay的OSGi容器维护的服务注册表的一部分。容器动态管理服务的生命周期,并在适当的时候启动和停止服务。


服务的真正的力量,在它们被扩展时。您可以替换现有的实现,或者在高级用例中有几个服务的实现。然后开发人员可以选择调用所有的实现,或者只调用具有最高优先级的实现(用所谓的服务排名来指定)。这意味着,如果Liferay有一个服务来做某事,那么您可以通过自己实现它的接口来自定义或覆盖该服务,然后使用比原始服务更高的级别进行部署。当服务被现有的代码调用时,容器然后实例化你的实现。这个简单,干净的方法是对Liferay 7进行大多数定制。


组件

在OSGi中,创建服务的最好也是最简单的方法是通过声明式服务。在声明式服务(又名DS)中,您可以创建组件。 Component是一个Java类(用@Component注释标记),提供Service的实现(如上所述),其实例由DS自动处理。这与您使用Spring Bean或EJB时可能使用的类似。 DS还使用注释提供依赖注入(@Reference)。这很方便,因为组件的“接线”是由容器完成的,但可以在服务器运行时进行更改(与Spring不同)。


模块可以包含尽可能多的服务声明和所需的许多组件(或没有)。


在软件工程方面,组件是大型应用程序的最小构建块,应用程序本身由许多小型组件组成。这使得开发一个应用程序变得更容易,因为你只需要一次处理小的,明确定义的,一口大小的代码块。

模块化开发的好处

接下来的问题就变成了什么?为什么这是一个大问题?为什么要有组件,我需要什么?


它有助于检查两个常见的开发情况:一个定制任务和一个成熟的应用程序。想象一下:你有一个系统可以从数据库中的数据生成PDF格式的报告。数据从Liferay中运行的Web应用程序捕获。你早上进来工作,发生了什么事情(不管它是什么,可能是腐败的数据,公司被收购,或是国家的紧急情况)。您需要尽快更改该报告,可以插入新的标题页面,在现有的标题页面添加警告或其他任何内容。


在整体模型中,您必须修改应用程序以更改报告,然后您必须重新部署完整的应用程序。如果这是一个暂时的改变,为了将应用程序恢复到原来的状态,你将不得不修改应用程序并重新部署它。


使用模块化和基于组件的应用程序,您可以修复一个简单的小组件(可能只有一个Java类),它提供了您所需的功能。然后,您将其模块部署到服务器。如果你以后需要回滚这个变化,你只需要做相反的事情。在每种情况下,您只需更改和重新部署需要更改的小部分功能,而不是整个应用程序。在任何时候你都不需要重新部署整个应用程序或把服务器关闭。


对于一个完整的应用程序,好处更大。模块化开发有助于开发人员在三个重要方面提高效率:


由组件组成的应用程序可以由多个开发人员在不同的组件上进行并行编写。
现有的应用程序可以通过编写新的组件来以不同的方式实现功能。
可以启用和禁用组件,允许管理员选择在生产中启用哪些功能。
例如,Liferay的文档和媒体库是一个支持很多后端的文件库。每个后端都是可由不同开发人员维护的组件。在服务器运行时,可以随时添加和删除它们。


同样,应用程序提供的服务独立于前端技术。实际上,可以有多个前端,从Liferay提供的基于Web的前端开始,到可能为网络或移动开发的新前端。


正如你所看到的,在Liferay的OSGi容器中运行的许多组件构成了一个互补服务的生态系统。 Liferay的大部分功能都在组件中,当您部署代码时,它与Liferay位于同一个生态系统中,具有相同的扩展点。您可以编写组件来提供新的服务,或者使用您自己的实现来覆盖现有的服务,而容器管理这些服务。 Liferay是一个令人兴奋的平台,使开发人员能够提高工作效率。

原创粉丝点击