扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
最近几年,内容管理在商业中发挥的作用越来越大。能够快速有效地进行管理和提供 Web 内容是当代企业成功的关键因素之一。IBM Lotus Workplace Web Content Management 是 Lotus Workplace 解决方案的重要组成部分,可以从最初的创建到最终的 Web 表示,全过程地帮助客户管理公司内容。它提供了一种成熟的内容管理系统,非技术性用户和技术用户都可以使用该系统。目前有两个版本:Java 和 Domino。本文要介绍的是 Lotus Workplace Web Content Management 的 Java 版本。
Lotus Workplace Web Content Management 2.0 提供了新的特性来扩展其功能,其中之一是 Lotus Workplace Web Content Management API。通过这个 API,用户能够很容易地从 Web 应用程序中检索内容或者创建内容,从而更加方便灵活地管理企业 Web 内容。
本文示范了如何使用 Lotus Workplace Web Content Management API 构建 Java 应用程序。本文包括三部分:首先将简要介绍 Lotus Workplace Web Content Management API 的配置,然后讨论 Lotus Workplace Web Content Management API 的基本接口,最后通过一个例子来帮助您使用 Lotus Workplace Web Content Management API 快速创建 Web 应用程序,示例文件可以从 Sandbox 下载。本文假设您熟悉 Lotus Workplace Web Content Management,并具有 Java 应用程序开发经验。
Lotus Workplace Web Content Management API
Lotus Workplace Web Content Management 2.0 引入了 API 外化(API externalization),从而能够构建从其他产品中迁移/导入内容、实现高级的呈现功能或者完成内容的批处理的解决方案。这仅仅是 2.0 版引入的新特性之一。关于 Lotus Workplace Web Content Management 2.0 特性和增强的更多信息,请参阅 Lotus Workplace Web Content Management, Java edition Release Notes。
通过使用这种 API,可以访问 Lotus Workplace Web Content Management 的下列功能:
有关更多细节,请参阅 Lotus Workplace Web Content Management InfoCenter 和 JavaDoc。JavaDoc 位于 Lotus Workplace Web Content Management 服务器的 WebApp\api-javadocs 目录下。
|
Lotus Workplace Web Content Management API 的配置
Lotus Workplace Web Content Management 的默认安装过程将 Lotus Workplace Web Content Management Java 类放在 Lotus Workplace Web Content Management WAR 文件的 WEB-INF\lib 目录中。该安装中,这些类不能被其他应用程序访问,包括同一 Java 虚拟机中的应用程序。为了在其他应用程序中访问 Lotus Workplace Web Content Management 代码(特别是这些 API),需要在 WebSphere Application Server 中创建一个类加载程序(classloader),来加载相关的 Lotus Workplace Web Content Management 类。
请按照以下步骤配置 Lotus Workplace Web Content Management API:
如上图所示,每个 JAR 文件的路径必须是完整路径。比如,如果将所有 JAR 文件移到 ilwwcm.war\lib 目录中,那么 Classpath 区段的值将如下所示:
C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/ Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-api.jar C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/ Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-commons-properties.jar C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/ Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-commons-utils.jar C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/ Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-commons-version.jar C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/ Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-commons-xmlpersistency.jar C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/ Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-framework.jar C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/ Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-javacontentextension.jar C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/ Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-search-core.jar C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/ Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-server.jar C:/IBM/WebSphere/AppServer/installedApps/Lotus Workplace Web Content Management/ Lotus Workplace Web Content ManagementV2.ear/ilwwcm.war/lib/ilwwcm-syndication-core.jar |
这段代码可以复制并粘贴,并根据配置作适当的修改。
|
Lotus Workplace Web Content Management API 的核心类和接口
这一节将介绍 Lotus Workplace Web Content Management API 的核心类和接口。我们首先将介绍 Lotus Workplace Web Content Management 的基本对象和组件,然后用对应的应用程序编程接口将这些对象和组件联系起来。
注意:该 API 中只提供了一个类,即 WCM_API 类,其他都是接口。
WCM_API 类
WCM_API 类是使用 Lotus Workplace Web Content Management API 的入口,它提供了获得资料库的方法。
Workspace 和资料库接口
使用 Lotus Workplace Web Content Management 开发网站时,您充当一个注册用户。执行的所有工作都与该用户联系在一起。该用户必须有足够的权限执行某些功能。在 Lotus Workplace Web Content Management API 中,这是通过 Workspace 对象来表示的。Workspace 是该 API 的核心。对象的创建、保存、删除和搜索都在 Workspace 对象中完成。从本质上说,Workspace 就是与用户关联的 Lotus Workplace Web Content Management 接口。使用 Workspace 对象,任何人都可以作为该用户执行操作。
Workspace 表示特定用户的 Lotus Workplace Web Content Management 资料库的一个视图。Workspace 接口中提供了绝大多数重要功能。在 Workspace 中可用的操作包括:
要获得 Workspace 对象,用户必须从惟一资料库中请求一个对象。这是 Lotus Workplace Web Content Management 资料库的入口点。它提供了两种方法来获取 Workspace 对象,一个用于匿名用户,另一个用于注册用户。比如,注册用户要获得 Workspace 对象,可以使用下面的调用:
WCM_API.getRepository().getWorkspace(user name,password);
如果 Lotus Workplace Web Content Management 不承认该用户或者该用户未能通过身份验证,就会抛出 OperationFailedException。只有 Lotus Workplace Web Content Management 用户,包括外部 LDAP 用户(需要专门配置)才能得到承认。
文档、文档类型和文档 ID 接口
一个文档表示资料库中的一个对象或实体。它是其他多数实体接口的父接口,如 content、category、site 等,一般仅使用其子接口。
资料库中的每个实体都有惟一标识符,称为文档 ID,惟一地表示该实体。不同实体可以有相同的名字,但必须具有不同的 ID。文档 ID 在 API 中用 DocumentID 接口表示。
文档类型则表示一类文档。文档类型可以是 content、category、site 或者所有这些组件。在 Lotus Workplace Web Content Management API 中,DocumentType 和 DocumentTypes 接口处理文档类型。DocumentTypes 接口维护所有可用文档类型的列表,而 DocumentType 对象是单个的文档类型。
内容组件、库组件、内容组件容器和内容接口
Lotus Workplace Web Content Management 中有两类不同的组件:内容组件和库组件。内容组件是存储内容、站点或站点区域的组件,而库组件是直接存储在组件库中的静态组件。内容组件和库组件都可以按照页面设计检索。但是在页面设计中检索库组件时,检索的组件在任何时候都是已知的,因为它们是直接引用的。而对于内容组件,实际呈现的组件依赖于当前的内容或站点,这意味着内容呈现的时候是动态查找的。有关更多信息,请参阅 Lotus Workplace Web Content Management InfoCenter。
Lotus Workplace Web Content Management 中有一个表示内容组件的 ContentComponent 接口。Lotus Workplace Web Content Management API 也提供了一些内容组件,但不包括 JSPComponent 和 Federated 内容组件。
对于库组件,Lotus Workplace Web Content Management API 提供了 LibraryComponent 接口来表示所有库组件。此外还有 LibraryFileComponent、LibraryHTMLComponent 和 LibraryImageComponent 接口,它们分别表示 File 组件、HTML 组件和 Image 组件。但是,其他库组件(如 Navigator 组件和 Menu 组件)在 API 中没有对应的接口。
ContentComponents 可以添加到 Site、SiteArea 和 Content 对象中。ContentComponentContainer 接口提供了诸如从容器中更新和检索内容组件之类的基本功能。
内容对象存储可供其他 Lotus Workplace Web Content Management 对象引用的值。这些值包括 ID 信息、配置、安全和组件。内容用 Content 接口表示。
RenderingContext 接口
Lotus Workplace Web Content Management 中的一项基本要求是在网页中呈现内容或者组件。由于特性是动态表示的,所以在呈现组件时首先要获得呈现的上下文。RenderingContext 接口表示呈现的上下文,包含表示可呈现对象所需要的信息。其中包括当前内容、页面设计和站点、servlet 路径和应用程序路径、呈现的内容,等等。
|
安装示例应用程序
这一节将通过一个示例应用程序来示范 Lotus Workplace Web Content Management API 的用法。请从 Sandbox 下载示例应用程序,将其安装到 WebSphere Application Server 上,完成前面所述的设置。安装步骤如下:
注意:应用程序不能远程使用这种 API,比如从远程的 WebSphere Application Server 或者独立的应用程序中访问。
示例应用程序
这一节将介绍示例应用程序中的重要代码片断,说明如何使用 Lotus Workplace Web Content Management API。API Sample 应用程序要完成以下任务:
有关更多细节,请参阅实例应用程序中的描述。
ConfigUtil.java 文件中构造了核心 Workspace 对象。
// ============ /** * Create a Workspace object with user name and password stored in the resource file * and store this Workspace object. * */ private void createWorkspace() { String userName = m_resources.getString("username"); String userPassword = m_resources.getString("password"); try { // get the Workspace object with provided user name and password s_workspace = WCM_API.getRepository().getWorkspace(userName, userPassword); } catch (ServiceNotAvailableException e) { e.printStackTrace() } catch (OperationFailedException e) { e.printStackTrace(); } } // ============ |
CreateContentText.java 文件中使用了 Workspace 接口的 createContent()、getbyID() 和 save() 方法,从指定模板创建新的内容,然后保存并发布这些内容。
// ====== try { // create new content with provided template ID content = workspace.createContent(workspace.createDocumentId(publishingTemplateId)); siteArea = (SiteArea) workspace.getById(workspace.createDocumentId(siteAreaId)); siteAreaChildren = siteArea.getChildren(); DocumentId lastSiteAreaChildId = null; while (siteAreaChildren.hasNext()){ lastSiteAreaChildId = (DocumentId) siteAreaChildren.next(); } // add the newly created content to the end of this site area siteArea.addContent(content.getId()); content.setName(contentTitle); content.setDescription(contentDescription); // add an HTML component to this content if (content.hasComponent("body")){ bodyComponent = (HTMLComponent) content.getComponent("body"); bodyComponent.setHTML(body); } else{ output.append("HTMLComponent body not found"); } // save the content String[] saveErrors = workspace.save(content); output.append("<br><br>Content save attempted<br>"); if (saveErrors.length > 0) { output.append("The following errors occurred on content save<br>"); for (int i=0; i < saveErrors.length; i++) { output.append(saveErrors[i]+"<br>"); } } else { output.append("No errors reported on content save<br>"); } saveErrors = workspace.save(siteArea); output.append("<br><br>Site area save attempted<br>"); if (saveErrors.length > 0) { output.append("The following errors occurred on site area save<br>"); for (int i=0; i < saveErrors.length; i++) { output.append(saveErrors[i]+"<br>"); } } else { output.append("No errors reported on site area save<br>"); } // publish the content while (!content.isPublished()){ content.nextWorkflowStage(); index++; if (index > 50) { output.append("Content failed to publish in runPost"); break; } } output.append("Test complete in runPost"); } catch (Exception e) { output.append(HTML.getStackTrace(e) + " in runPost"); } // ====== |
RenderContentTest.java 文件中使用 Workspace 的 createRenderContext() 和 render() 方法在网页上用适当的组件表示新的内容。
//======= try { SiteArea siteArea = (SiteArea) workspace.getById(workspace.createDocumentId(siteAreaId)); Content content = (Content) workspace.getById(workspace.createDocumentId(contentId)); Map parametermap = new HashMap(); // create a rendering context RenderingContext context = workspace.createRenderingContext(request, response, parametermap); // set proper design page and content to be rendered context.setPresentationTemplateOverride(presentationTemplateName); context.setRenderedContent(content, siteArea); // render selected content in Web page output.append(workspace.render(context)); } catch (Exception e) { ….. } //======= |
SearchTest.java 文件中使用了 Workspace 的 contentSearch() 方法,详情请参见 Java 源代码。
|
结束语
本文介绍了使用 Lotus Workplace Web Content Management API 创建灵活的 Web 应用程序的配置步骤,并提供了一个示例应用程序以供参考。希望能对 Lotus Workplace Web Content Management API 的配置和开发有所帮助。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者