Liferay开发人员应了解哪些基础知识?
1 开源,强调遵循标准规范,而不是重新发明轮子。
2 基于JavaEE,大量利用OSGi和Java平台的其他流行技术。
3 基于模块化的体系结构,并为项目提供模块化的开发范例。
4 可构建web应用程序、portlet或移动APP。
5 提供成熟开发工具,同时保持开放,每个开发人员可以使用自己习惯的工具。
6 一切皆可复用,系统提供可复用的框架和库,你也可以自建一套。
感兴趣吗?更多细节看后面。
开源和标准规范
Liferay Portal基于开源构建,其本身也开源,并遵循协作开发模式。这意味着你可以一起发展,提出意见,并做出贡献!这里有一些有用的工具:
1 我们的ticketing 系统。对产品的所有更改,包括全部bug修复、改进和新特性,都通过在JIRA中创建的一个ticket 开始。我们在那里有好几个项目,跟踪Liferay门户工作情况或报告bug(尽可能的重现细节和步骤,这是必须的)的主要方法是 LPS
2 GitHub: :我们的源代码主页。您可以通过它来查看代码变化,也可以提交改进请求。这儿有许多代码仓库,但主要的是liferay-portal
3 Forums: 这是我们的社区,大家可以分享思路、进行讨论与合作。这里可以提出问题,或帮助别人解决问题。
4 Blogs: 从核心开发人员和社区活跃分子哪里获取最新的新闻、技术建议和最佳实践。
5 Participate: 学会参与。你会发现各种专家和活动。
除了开源之外,Liferay也在很大程度上基于标准规范。这对您的项目来说是个好消息,因为它显著减少了与Liferay的绑定。这也激励我们不断进步。
Here are some key standards supported by Liferay Portal:
下列为Liferay 的主要标准规范
· Portlets 1.0 (JSR-168) and Portlets 2.0 (JSR-286): Liferay Portal can run any portlets that follow these two versions of the specification. Liferay is also heavily involved in the upcoming Portlets 3.0 specification.
Portlets 1.0 (JSR-168) and Portlets 2.0 (JSR-286): Liferay门户可以运行遵循这两个版本的规范的任何portlet。Liferay也大量参与了即将到来的portlet 3.0规范。
· JSF (JSR-127, JSR-314, JSR-344): The Java standard for building component based web applications. Liferay is an active contributor to the standard and lead of the JSF-Portlet Bridge specification.
· JSF (JSR-127, JSR-314, JSR-344):构建基于组件的web应用程序的Java标准。Liferay是对jsf – portlet Bridge规范标准和领导的积极贡献者。
· EcmaScript 2015: The latest incarnation of the JavaScript standard. Liferay’s tooling provides the ability to use it in all modern browsers thanks to the integration of Babel JS.
· EcmaScript 2015: JavaScript标准的最新版本。由于Babel JS的集成,Liferay的工具提供了在所有现代浏览器中使用它的能力。
· Content Management Interoperability Services (CMIS): Liferay’s Documents and Media can behave as an interface for any external Documents Repository that supports this widely adopted standard.
· Content Management Interoperability Services (CMIS): Liferay的文档和媒体可与任何支持这个被广泛采用的标准的外部文档存储库对接。
· Java Content Repository (JSR-170): Files stored in the internal repository of Liferay’s Documents and Media can be configured to be stored in a JSR-170 compatible repository if desired.
存储在Liferay文档和媒体的内部存储库中的文件,如果需要,可以配置为存储在jsr – 170兼容存储库中。
· WebDAV: Any Documents & Media folder can be mounted anywhere WebDAV is supported, such as Windows explorer or WebDAV-specific clients.
任何文件和媒体文件夹都可以安装在WebDAV所支持的任何地方,例如Windows explorer或WebDAV-specific客户端
· SAML and OAuth 1.1: These are the most widely adopted security protocols for SSO and application sign in, supported through specific Apps that can be installed from Liferay’s Marketplace.
这些是最广泛采用的用于SSO和应用注册的安全协议,通过可以安装在Liferay的市场上的特定应用程序来支持。
· JAX-RS and JAX-WS: Incorporated since Liferay 7 as the preferred tooling to create web services.
Liferay 7成为创建web服务的首选工具
· WSRP 1 and 2: Allows execution of portlets running in a remote container.
允许调用在远程容器中运行的portlet。
· OSGi r6: Liferay supports a wide range of the OSGi family of standards through its own implementations and also integrates the high quality implementations of the Apache Felix and Eclipse Equinox projects (which we also collaborate). Here are some of the most relevant supported standards:
Liferay有一个自己的OSGi系列标准规范实现,并且集成了Apache Felix和Eclipse Equinox项目的高质量实现(我们也合作)。以下是一些最相关的支持标准:
o OSGi runtime: Allowing any OSGi module to run in Liferay Portal
运行时:允许任何OSGi模块在Liferay门户中运行
o Declarative Services: Supports a dynamic component model for Liferay development.
声明式服务:支持Liferay开发的动态组件模型。
o Configuration Admin: Lets you create highly configurable applications that can be reconfigured on the fly. Liferay provides an auto-generated UI to change the configuration of any component that leverages this standard.
配置管理:允许您创建高可配置应用程序,实现在线配置。Liferay提供了一个自动生成的UI来修改任何支持该标准的组件配置。
技术
与任何开放源码应用程序一样,Liferay也建立在巨人的肩膀上。当我们选择构建我们平台的技术时,它必须具备以下特征:
它必须平衡技术先进性与技术成熟度,以满足苛刻和重要的企业环境。
它应该被广泛采用,并有一个成熟社区。
为使用开源项目提供贡献应尽可能方便。
如果不需要所有东西,就只选用项目所需。这样,如果找到更好的方法,就更容易替换。当然,我们的目标是让我们的开发人员和用户了解最新的、易用的、稳定的平台来构建您的服务。
Liferay是建立于广泛使用,众所周知,并有良好支持的技术之上。
最底层,Liferay是一个JavaEE应用程序,还包含一个OSGi容器。这为两个领域提供了最好的服务:访问世界上最健壮、功能最丰富的企业平台,以及世界上最具特色和稳定的模块化容器。开发人员可以在动态、组件化的环境中开发和部署企业级、可伸缩的web或移动应用。
在堆栈底部的JavaEE和OSGi中,我们将我们的核心部分构建为众所周知或广泛使用的产品:
用于事务的Spring(以及核心的依赖注入)
用于数据库访问的Hibernate(以及针对优化查询的直接JDBC访问)
用于索引和搜索的ElasticSearch
Ehcache缓存.
在应用程序层中,开发人员可以访问许多经过多年使用,已非常熟悉的库:
· Xalan
· Xerces
· Apache Commons
· Tika
· dom4j
当您接触Liferay门户,您会发现,多数熟悉的工具都在那里。当您可以在Liferay的平台上自由开发,就像天空无边无垠:您可以使用任何喜欢的web框架,并且可以编写servlet和portlet的应用程序。不过,如果您需要一个建议,我们强烈推荐MVCPortlet或基于jsf的LiferayFaces框架。
在前端,Liferay跟上了那个圈子的最新进展。如果你在过去使用过Liferay,当然你可以继续使用Liferay的 Alloy UI,但是你也可以自由地选择你最喜欢的前端技术:
· Bootstrap
· SaSS
· EcmaScript 2015 (using Babel.js)
You can also use any JavaScript library, including
· Metal.js (developed by Liferay)
· jQuery (included)
· Lodash (included)
· Angular 1 or 2
· React
· Your library of choice
Liferay门户网站遵循我们Liferay的设计师创建的一个名为Lexicon的设计语言。它可以通过一组CSS类供应用程序开发人员使用,尽管使用我们的标签库更方便。
再说模板,JavaEE的JSP和FreeMarker如你所料是必须的,而且平台的通过模块化支持你使用 Google’s Soy (aka Closure Templates) 或其你喜欢的任何模板工具。
Liferay也选择了一些构建工具,这些工具可以让您自由选择任何开发环境。Gradle协调bnd一起生成产品骨架,但是project layouts是动态的,这意味着您可以使用从Maven到Ant / Ivy的任何东西来构建Liferay的应用程序。
简而言之,Liferay做了很多工作,以保证用户和开发人员能够选取最广泛、最健壮的工具,以及使用最喜欢工具的自由。Liferay尽一切努力为你提供最灵活的技术平台,这样就可以去做一些伟大工作。
架构
Liferay的设计目标是为你提供创建网站的一切工具。
为达到这一目标,实现了:
提供一个可用的缺省配置和接口·
提供优秀应用,以快速构建网站·
各种级别的UI定制,从小调整到完全替换·
各种级别的应用定制·
提供一个健壮的开发平台,在其上实现优秀应用的构建和分享
Liferay为许多不同类型的客户提供服务。
Liferay达到了历史新高度,这归功于新的模块化架构。
想一下这个环境,每个功能都是独立的模块。这些模块声明了三个重要的事情:
功能的定义与实现
模块依赖关系
功能优先级
如此,容器按照模块的定义、实现、依赖项和优先级进行启动。
开发人员的任何工作都由一个或多个模块实现的。如果是一个新应用,可以依赖现有模块并定义依赖关系。
这允许你复用现有功能,而无需重复开发。定制功能非常简单,只需要保证定制功能的优先级高于现有功能即可。
这就是架构模块化的威力。
模块
Liferay上创建新应用,扩展,定制都基于模块化方式。模块化架构体系中,分发部署的基本单位是模块。
Liferay遵循OSGi标准规范。OSGi定义了模块依赖和通信的各个方面。它还定义了模块的打包格式:OSGi包。OSGi模块是一个典型的JAR文件,这是一个ZIP文件,包含Java开发人员熟悉的编译代码、模板、资源和一些元信息。
服务
服务是现代软件架构的重要概念。这是一些独立运行的代码,当调用时提供特定功能。他们就像现实世界中的服务一样运行。例如,您可能会需要服务来修剪您的草坪。您知道如何申请服务,并提供它需要的(金钱)来接收服务(一个mown的草坪)。基于软件的服务也是如此。
Liferay服务是由OSGi联盟定义的标准服务。编写任何东西,无论是应用,还是数据库接口,甚至是你自定义的“服务”,都能很容易地实现为OSGi服务,它们强大而又开发简单。如果您了解Java接口以及它们的实现——这是Java入门知识——您已经了解了超过90%的内容。首先,定义服务的接口或契约:接口返回值以及调用者所需值。接下来,定义一个实现类。
在服务模型中,一个类调用服务以获取所需功能。该功能自动实现(通常采用注入)。这类似于Spring或ejb,其中有一个重要特点:支持运行时更改,而不需重启系统。这已得到支持,因为当服务被部署时,将成为Liferay OSGi容器维护服务注册的一部分。容器动态管理服务的生命周期,并在适当时候启动和停止服务。
当进行服务扩展时,将发挥真正威力。您可以替换现有的实现,或在高级用例中使用多个服务实现。然后,开发人员可以选择调用所有实现,或者只调用具有最高优先级的实现(使用服务级别指定)。这意味着,如果Liferay有一个服务,你可以通过自己的接口实现来定制或覆盖该服务,然后用比原始服务更高的级别来部署它。当服务被现有的代码调用时,容器就会实例化您的实现。Liferay 7大多数时候使用这种简单、干净的方法进行定制。
组件
在OSGi中,创建服务的最好和最简单的方法是通过声明服务。在声明服务(又称DS)时,您创建组件。组件是一个Java类(标记为@ componentannotation),它提供了一个服务的实现(如上所述),并且其实例化是由DS自动处理的。这与您使用Spring bean或ejb时可能使用的内容类似。DS还使用注解(@ reference)提供依赖注入。这很方便,因为组件的“连接”是由容器完成的,但是可以在服务器运行时更改(不像Spring)。
模块可以包含很多服务声明和很多组件(当然也可以没有)。
在软件工程术语中,组件是一个较大应用程序的最小构建块,应用程序由许多小组件组成。这使得开发应用程序变得更容易,因为您只需一次处理小的、良好定义的、独立代码块。
模块化开发在实际应用中的优点
接下来的问题是这个?这有什么优点?为什么我要用组件,我用它们干什么?
在两种常见开发场景会有价值:定制任务和完整应用开发。
设想一下:您有一个系统,它可以从数据库中的数据生成PDF格式的报表。
这些数据是从一个运行在Liferay的web应用中获取的。
你早上来上班,发生了些事(不管什么事,反正可能造成数据过期,例如公司已经被收购,或者是国家紧急情况)。
您需要尽快更改该报告,以便插入新的标题页,向现有的标题页面添加警告,或者其他任何内容。
在传统单体应用中,您必须先修改应用程序的报表功能,然后对整个应用程序进行重新部署。
如果这是一个临时更改,还得将应用程序恢复到原来的状态,您将不得不再次修改应用程序并重新部署。
对于模块化和基于组件的应用,您将修改一个简单的小组件——可能是一个Java类——提供您需要的功能。然后将模块部署到服务器。如果要还原,你会反向重做一次。在各种情况下,您都只需更改和重新部署需要一小部分功能,而不是整个应用。在任何时候,您都不需要重新部署整个应用或将服务器关闭。
对于完整应用程序开发,好处甚至更大。
模块化开发可以帮助开发人员在以下三个方面更加高效:
应用程序的不同组件可以由多个开发人员并行编写。
现有的应用程序可以通过编写新组件实现功能来扩展。
组件可以启用和禁用,允许管理员在生产环境中对启用哪些功能特性进行选择。
例如,Liferay的文档和媒体库是一个支持许多后台程序的文件存储库。每个后台程序可以是由不同的开发人员维护的组件。当服务器运行时,它们可以被添加和删除
类似地,应用程序提供的服务独立于前端技术。
事实上,可以有多种前端,从基于Liferay工具箱的web,到你全新开发的web或移动APP前端。
如您所见,在Liferay的OSGi容器中运行的许多组件构成了一个服务互补的生态体系。
Liferay的大部分功能都在组件中实现,当你部署代码时,它与Liferay处于相同生态体系,有着同样的扩展点。
您可以编写组件来提供新的服务,或者用自己的实现来覆盖现有的服务,而容器则管理所有的服务。