寻找扩展点
Liferay Portal提供了许多帮助用户完成任务的功能。然而,有时候您可能会发现需要定制内置功能。找到想要自定义的区域很容易,但要弄清楚如何对其进行自定义似乎是一项艰巨的任务。Liferay Portal是为了轻松定制而开发的,这意味着您可以使用许多扩展点来添加自己的风格。
这个过程可以让你轻松找到扩展点。
- 找到提供您想要更改的功能的bundle (module模块)。
- 查找模块中可用的组件。
- 发现所选组件的扩展点。
在本教程中学习如何找到扩展点。将介绍一个简单的示例,该示例定位用于导入LDAP用户的扩展点。这需要使用Liferay Portal的 Application Manager和Felix Gogo Shell。
找到相关模块和组件
您首先得考虑被更改应用程序的名词。使用正确的关键字,您可以轻松追踪所需的模块及其组件。考虑导入LDAP用户的例子。一些用于查找组件的候选关键字是import,user和LDAP。
发现Liferay Portal中特定功能模块的最简单方法是使用Application Manager。Application Manager将应用程序套件及其包含的模块/组件列入易于使用的界面中。它甚至列出第三方应用程序!您将使用关键字来定位适用的组件。
- 导航到Control Panel → Apps → App Manager,打开 App Manager。一级列表列出了应用程序套件,独立应用程序和独立模块。
- 浏览应用程序套件,应用程序和模块,或者使用搜索查找可能提供所需扩展点的组件。请记住检查元素名称和说明中的关键字。关键字LDAP驻留在Liferay Foundation应用程序套件下; 选择它。
图1:Liferay Foundation应用套件包含LDAP认证应用程序。
- 从应用列表中选择LDAP应用程序。
- LDAP应用程序只有一个模块,但通常应用程序有多个模块要检查。选择Liferay Portal Security LDAP模块。
图2:App Manager列出了module, package name, version, and status。
- 搜索组件,将您的关键字作为指导。复制你认为最适合你要自定义功能的组件名称; 您稍后将使用Gogo shell进行检查。
图3:可以使用App Manager找到组件名称。
注意:以后使用Gogo shell时,可能需要多次尝试才能找到您正在查找的组件; 命名约定应该允许您在可管理的时间范围内找到您想要的扩展点。
接下来,您将开始使用Gogo shell来检查组件的扩展点。
在组件中查找扩展点
一旦你的组件与你想扩展的功能相关,你可以使用Gogo shell的Service Component Runtime(SCR)命令来检查它。您可以使用Liferay Blade CLI执行SCR命令,也可以通过telnet在Gogo shell中执行SCR命令。本教程假定您通过telnet使用Gogo shell。
执行以下命令:
对于先前复制的LDAP示例组件,该命令如下所示:
输出包含大量信息。这儿您对组件引用的服务感兴趣。这些是扩展点。例如,以下是导入LDAP用户的服务的参考:
这LDAPUserImporter
是定制用LDAP导入用户的过程所需的扩展点!如果没有任何引用符合您的要求,请从App Manager搜索其他组件。
如果您打算重写引用的服务,则需要了解引用的策略和策略选项。如果策略是static
和策略选项reluctant
,则绑定一个新的更高级别的服务来代替绑定的服务需要重新激活组件或更改目标。有关其他策略和策略选项的信息,请访问OSGi规范,特别是第112.3.5和112.3.6节。如果您想了解如何覆盖组件的服务参考,请访问以下教程。
重要并非Liferay Portal中的所有扩展点都可用作引用服务。引用服务常使用声明式服务(DS)发布扩展点,但扩展点不是都以这种方式公开。如果您的工程不使用DS组件框架,则需要从OSGi注册表中查找描述其服务使用情况的API。以下是Liferay Portal中其他潜在扩展点的简要列表:
- Instances of
org.osgi.util.tracker.ServiceTracker<S, T>
- Uses of Liferay’s
Registry.getServiceTracker
- Uses of Liferay’s
ServiceTrackerMap
orServiceTrackerCollection
- Any other component framework or whiteboard implementation (e.g., HTTP, JAX-RS) that supports tracking services; Blueprint, Apache Dependency Manager, etc. could also introduce extension points.