- 热门文章:
- · WebLogic Portal 7.0 上开发…
- · WebLogic Platform 7.0赢得…
- · WebLogic Portal 8.1
- · WebLogic Portal 8.1 Beta系…
- · WebLogic Portal 8.1 Beta系…
- · WebLogic Portal 8.1 Beta系…
- · WebLogic Portal7.0 利用统…
- · JSR 168和Struts支持包使用…
- · 对亚洲本地的WebLogic Port…
- · WebLogic Portal7.0 利用统一用户档案(UUP) --- 下注在技术更替的关键时刻
- · WebLogic Platform 7.0赢得Web服务开发者青睐的“三大法宝”
- · WebLogic Portal 7.0 上开发小结
利用BEA WebLogic Portal 8.1进行内容管理
问题1:迁移
当内容创建在产品系统外部时,无法通过轻松的方式来将这些内容移至产品系统。很多情况下,产品系统对于内容变更有严格的规定,不允许某些特定的更改,因此有必要进行迁移。
问题2:备份/还原
如果使用默认储存库,内容管理系统的所有数据都存储在一个数据库中。使用标准数据库工具,可以以多种方式来备份和还原数据,但是需要足够了解数据库模式才能进行恰当的还原。通常,对整个数据库备份后,只允许还原至某个特定时间点一次。
问题3:数据类型修改
如果有内容与定义在内容管理系统中的数据类型相关联,则该数据类型不能更改。因此,在更改数据类型之前必须删除所有数据。这样一来,当创建大量数据后需要作一个简单的属性修改时,就会很麻烦。
问题4:大批量修改
有时需要在内容管理系统中做大批量的修改。WebLogic Portal管理用户界面很适合于内容维护和少量修改,但是很难用来进行大批量修改。
现在,这些问题中的大多数都可以通过老练的数据库权威所编写的独特SQL脚本来解决,否则的话,这会需要大量的手工工作,而这会导致高昂的维护成本。
当在构建一个复杂的基于内容管理的门户的过程中遭遇这些问题之后,我决定构建一些东西来帮忙。我开发了一个内容管理导入/导出(Content Management Import/Export)工具,并将它与我的一些同事分享,很快我就发现这是一个大家都需要的东西。您可以在dev2dev网站:http://cmimportexport.projects.dev2dev.bea.com找到该工具,包括源代码。
接下来我将介绍该工具的操作,以及如何使用它来解决以上提到的问题。
安装
您可以在此处找到安装向导:https://cmimportexport.projects.dev2dev.bea.com/ files/documents/261/192/InstallationGuide.doc。在本文中,假定CM导入/导出门户已经安装成功,不过,最常见的安装将是作为一个现有管理门户中的portlet。
要安装CM导入/导出门户,只需从此处部署适当的EAR文件:https://cmimportexport.projects.dev2dev.bea.com/ servlets/ProjectDocumentList?folderID=96&expandFolder=96&folderID=96。完成后,可以通过如下URL访问该工具:http://host:port/cmPortal/cmImportExport.portal。您安装时只需将其中的host和port替换为您的主机和端口。
使用
在登录门户后,您会看到四个选项(参见图1),其中的两个选项处理内容类型,另两个处理内容数据。该工具假定您对WLP内容管理已经有一定的了解,知道在添加内容数据之前必须定义数据类型。然而,工具并不强迫您按照特定的顺序进行操作。因此,可以在没有类型定义的情况下尝试导入数据。当然,这将引发错误。
内容类型导出
我们从内容类型开始。如果您有一个包含类型定义的现有储存库,您就可以使用内容类型导出(Content Types Export)按钮将其导出到一个XML文件。一旦选定后,您可以选择使用哪一个储存库来进行导出。当按下查看导出树(View Export Tree)按钮后,您将会看到内容类型的列表和复选框。所有被选定的项都将被导出到XML文件。
XML文件将被创建在服务器的临时目录中,最终屏幕上将显示文件的完整路径。
内容类型模式
对于WLP内容管理类型,没有正式的模式定义。所以我创建了一个(cmTypes.xsd)。该工具使用这个模式来为导入导出操作创建XML bean。该模式是简单的文本结构,支持所有数据类型和除“explicit”标记之外的所有属性(参见清单1)。WLP内容管理API没有公开该属性。因此,如果具有设置了explicit标记的类型,该信息将不会导出,相应的内容数据也不会导出。总之,因为这是一个用户自定义的数据库表格,所以通常使用一个单独的进程来维护这些信息。
清单1
<?xml version="1.0" encoding="UTF-8"?> <cmt:cmTypes xmlns:cmt="http://www.bea.com/CMTypes"> <cmt:cmDatatype name="ad_shockwave"> <cmt:cmProperty name="content"> <cmt:datatype>BINARY</cmt:datatype> <cmt:description>Content binary file</cmt:description> <cmt:isMandatory>false</cmt:isMandatory> <cmt:isReadOnly>false</cmt:isReadOnly> <cmt:isPrimary>true</cmt:isPrimary> <cmt:isMultiValued>false</cmt:isMultiValued> <cmt:isRestricted>false</cmt:isRestricted> <cmt:cmBinaryValue default="true"/> </cmt:cmProperty> . . // All properties here . <cmt:cmProperty name="adWinTarget"> <cmt:datatype>STRING</cmt:datatype> <cmt:description>If set, render will be in popup window with this ?name</cmt:description> <cmt:isMandatory>false</cmt:isMandatory> <cmt:isReadOnly>false</cmt:isReadOnly> <cmt:isPrimary>false</cmt:isPrimary> <cmt:isMultiValued>false</cmt:isMultiValued> <cmt:isRestricted>false</cmt:isRestricted> </cmt:cmProperty> </cmt:cmDatatype> . . // All datatypes here . </cmt:cmTypes>注意:WLP的未来版本可能会采用部分的JSR-170标准用于内容管理导入/导出。果真这样的话,我也将采用该标准,以便可以很轻松地将内容数据从一个版本的WLP移至另一个版本。
内容类型导入
导入操作允许向现有的内容管理系统上传一个本地XML文件。导入操作将会查找XML文件和现有内容管理类型之间的区别。如果有冲突的话,将在导入之前显示出来(参见图2)。这使您可以选择哪一种内容类型应当被导入新系统。注意,在某些情况下,修改具有关联的内容数据的数据类型可能会引发失败。现有数据可能需要导出,删除,然后重新导入。如果数据类型结构有变化,那么导出的XML文件可能需要修改以反映新的结构。有很多好的XML处理工具可以胜任这些操作。内容数据导出
内容数据要更为复杂些。结构可能是分层的,也可能包含多种不同数据类型的组合,或者可能有多个值。因此,在导出过程中出现的JavaScript树将会非常大。界面允许您选定整个分支或单个项或者取消选定。只有选定的分支才会被包含在导出的XML文件中,因此可以修改XML文件的根节点,将一整组内容移至树中的另一个位置。这是移动或复制内容管理系统的一个完整分支的一种方式。内容数据模式
同样,对于内容数据,也没有正式的模式定义,因此我不得不也创建一个(cmContent.xsd)。WLP内容管理中有两种类型的节点,content(内容)节点和hierarchy(层次)节点。您可能注意到,模式只根据所使用的节点属性进行区分(参见清单2)。这是因为这两种类型实际上是等同的。hierarchy节点下可以有内容,这是完全正确的。WLP内容管理的大多数用户并没有意识到存在着这一特性。在WLP Portal管理工具中,您可以创建一个hierarchy节点,然后为该节点定义数据类型和内容。清单2
<cmc:cmContent xmlns:cmc="http://www.bea.com/CMContent"> <cmc:cmNode name="Activities" nodeType="Hierarchy"> <cmc:createdBy>weblogic</cmc:createdBy> <cmc:creationDate>3 May 2005 21:10:57 GMT</cmc:creationDate> <cmc:modifiedBy>weblogic</cmc:modifiedBy> <cmc:modifiedDate>3 May 2005 21:10:57 GMT</cmc:modifiedDate> <cmc:cmNode name="Bookstore" nodeType="Hierarchy"> <cmc:createdBy>weblogic</cmc:createdBy> <cmc:creationDate>3 May 2005 21:11:03 GMT</cmc:creationDate> <cmc:modifiedBy>weblogic</cmc:modifiedBy> <cmc:modifiedDate>3 May 2005 21:11:03 GMT</cmc:modifiedDate> <cmc:cmNode name="Gene Wards" nodeType="Content"> <cmc:objectClass>Staff</cmc:objectClass> <cmc:createdBy>weblogic</cmc:createdBy> <cmc:creationDate>3 May 2005 21:11:03 GMT</cmc:creationDate> <cmc:modifiedBy>weblogic</cmc:modifiedBy> <cmc:modifiedDate>3 May 2005 21:11:04 GMT</cmc:modifiedDate> <cmc:cmContentProperty name="EMail"> <cmc:datatype>STRING</cmc:datatype> <cmc:value>gene@home.org</cmc:value> </cmc:cmContentProperty> <cmc:cmContentProperty name="Title"> <cmc:datatype>STRING</cmc:datatype> <cmc:value>Bookstore Assistant</cmc:value> </cmc:cmContentProperty> <cmc:cmContentProperty name="DisplayOrder"> <cmc:datatype>LONG</cmc:datatype> <cmc:value>20</cmc:value> </cmc:cmContentProperty> <cmc:cmContentProperty name="Name"> <cmc:datatype>STRING</cmc:datatype> <cmc:value>Gene Wards</cmc:value> </cmc:cmContentProperty> <cmc:cmContentProperty name="Phone"> <cmc:datatype>STRING</cmc:datatype> <cmc:value>(917) 555-1212 Ext. 111</cmc:value> </cmc:cmContentProperty> </cmc:cmNode> </cmc:cmNode> . . // More nodes . </cmc:cmNode> </cmc:cmContent>内容数据导入
内容数据导入是最有趣的。当把数据导入至一个现有的内容管理系统中时,需要考虑多种情况。当存在数据冲突时,重要的是识别它们,使操作者可以在导入和忽略某些内容之间作出合理的选择。使用导入工具时,冲突项会以感叹号来标识(参见图3),并且显示不同属性的详细信息(参见图4),然后用户就可以决定是否导入这个特定节点。需要注意的是,该工具使用内容层次结构和名称而不是ID号进行匹配。如果一个节点被重命名,将不会发现冲突。之所以不使用ID是因为各个系统的ID号很有可能不同,而层次和名称则是相同的。解决最初的问题
本文总的目的就是要展示如何使用该工具来解决最初的问题。问题1:迁移
这是开发此工具的主要目的:内容类型和数据可以通过XML文件从一个系统迁移至另一个系统。注意,不需要同时访问两个系统。可以创建导出的XML文件,然后在以后的某个时间(部署时)进行导入。问题2:备份/还原
对于该工具,数据迁移并不是它唯一的用途。利用它可以轻松地对生产系统进行复制,以便进行备份和还原。图形化工具或者自动化的脚本可以用于执行备份。XML文件名包含日期,这使得周期性备份变得容易。还原也很容易,因为可以使用最新的备份文件,还可以在还原过程中包含或者排除指定的数据。问题3:数据类型修改
解决该问题稍微困难一些。数据先导出到XML文件,然后从储存库中删除,这使得数据类型可以修改。然而,也有可能必须修改XML文件来映射数据类型的变化。有很多好的XML编辑工具可以胜任这一操作,或者也可以编写一个简单的Perl脚本。导入工具对数据类型的更改比较宽容,因此可能根本不需要修改XML文件。导入总是试图添加尽可能多的数据,例如,如果从内容管理系统中删除一个特定属性,那么导入就将在XML文件中忽略该数据,而添加其余的属性;如果添加属性,导入将让新的属性保持空白。问题4:大批量修改
WebLogic Portal提供了一种进行大批量加载的机制,但是有时通过创建XML文件来进行大批量加载更为方便。例如,为了测试,我创建了一个映射文件属性的内容管理类型:名称、大小、权限。然后我编写了一个简单的Perl脚本,它扫描我的文件系统,创建一个与文件属性相匹配的XML层次结构。将其导入到我的内容管理系统后,我便有了计算机中所有文件的完整表示。结束语
8.1中的内容管理系统是非常强大且有用的,但是它缺少重要的内容管理迁移工具。在WebLogic Portal 9.0中,将添加其中的很多特性,但是直到那时候,该工具也仍然有助于使WebLogic Portal 8.1的内容管理系统上的企业级应用程序构建更容易管理。
- · 使用WebLogic SIP Server和WebLogic Workshop驱动Cantata媒体服务器
- · 对企业级Java应用程序及其部署进行建模
- · 使用敏捷流程和建模构建企业应用程序
- · WebLogic Real Time 1.0“Trader”应用程序性能分析
- · WebLogic Real Time简介
- · 升级到WebLogic 9的十大理由
- · WebLogic Workshop集成.NET…
- · 升级到WebLogic Server 7.0
- · WebLogic Server 环境下先进…
- · WLS 6.0测试中的JNDI 和Web…
- · WebLogic 7.0平台:灵活适应…
- · 大规模的财政应用和面向服务…
- · HTTP会话对象 VS 有状态EJB
- · 使用JMX监控应用程序内、外…
- · 实体bean的承诺
- · 并行业务逻辑处理
- · 使用 EJBGen:"一个对三个"
- · HTTP会话对象 VS 有状态EJB
- · WLS 6.0测试中的JNDI 和Web应用
- · WebLogic Server 环境下先进的JMS设计模式
- · 项目推出:针对WLS 7和8.1的COMMONJ WORK MANAGER
- · JMS集群第1部分
- · WebLogic平台的Web SSO(SAML)解决方案
- · WebLogic8中的扩展JSP标签实例解析
- · 解决打开文件过多的问题
- · 使用JMS在集群应用程序中分配任务
- · WebLogic Workshop 8.1 Jav…
- · BEA Workshop8.1之Java Pag…
- · WebLogic Server8.1新功能介…
- · 总结:第一个Java控件
- · 教程:构建第一个Java控件
- · 用WebLogic Workshop开发EJB
- · 用WebLogic Workshop调试应…
- · WLS 9.1与MQ v5.3 通过JMS Bridge通信配置
- · 在Apache Xindice中保存XML文档
- · 升级到WebLogic 9的十大理由
- · 在JAVA EE环境下使用Kodo EJB
- · Weblogic Server 9新特性:J2EE Libraries 和 Optional Packages
