`
e-ant
  • 浏览: 74071 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

BEA Weblogic Portal内容管理的几点开发经验

阅读更多
BEA Weblogic Portal内容管理的几点开发经验
1.BEA Weblogic Portal 8.1内容管理概述
  BEA Weblogic Platform 8.1将所有在门户中显示的内容包括文本、HTML、图形以及多媒体文件等都统一存储在内容库中,称为BEA虚拟内容库(BEA VCR)。所有的内容组织成层次结构,虚拟内容库(VCR)是内容管理系统的顶层节点,接下来是内容库,这些内容库可以是多个BEA内容库、第三方内容库以及用户自定义的内容库。再下面就是层次节点(相当于文件夹)和内容节点(相当于文件)。如下图:

图1 BEA虚拟内容库的层次结构图
BEA内容库在数据库中由CM_开头的5个表组成,其E/R图如下:

图2 BEA内容存储数据库的E/R图
  CM_NODE表存储的是各个节点(包括层次节点和内容节点)的信息及其在整个内容库中的位置。CM_OBJECT_CLASS表示的是各个节点的模式,也就是不同内容类型的定义。各种类型的内容又是由一系列属性来表示的,CM_PROPERTIY_DEFINITION 存储的就是所有内容类型的各种属性的定义。CM_PROPERTY存储的是每一个具体节点所有属性的值。
  BEA Repository是与某个特定的服务器域(Server Domain)相对应的,在配置domain时,BEA Weblogic的服务器域模板就会自动在数据库中生成内容库的各种数据表。通过Workshop开发Portal应用时会自动生成Portal管理程序,通过该管理程序可以直接完成内容类型定义,内容节点的创建、修改以及删除等基本的内容创建和管理功能。而且作为Portal管理的一部分,还可以对内容管理进行委托管理。可以说应用起来,是很方便的,但在企业级Portal的开发中,这些基本的内容管理功能是不够的。BEA还在com.bea.conten.*中提供了一系列API,这些API不仅是BEA实现内容管理的核心,也是用户二次开发的基础。但遗憾的是BEA在这方面的文档相当少,同时Platform 8.1发布时间又不长,因此本文作者在开发国家电子政务试点示范项目绵阳市电子政务门户系统的过程中,通过摸索和实践,积累了几点开发经验,现整理出来,希望能对BEA Platform 8.1开发的同好有所帮助。
2.通过Java类或JSP直接进行内容管理
  在我们的项目中,内容管理是用户使用较频繁的一部分。虽然Workshop为Portal应用自动生成的Portal管理程序中已具有内容管理模块,但是我们发现它却不能很好地满足最终用户的需求,他们需要更加直观和操作便捷、功能简练而又能最大限度地满足日常内容管理要求的Portal内容管理界面。于是,我们按照用户的实际情况对BEA的内容管理进行二次开发,现摘出其主要的开发过程与大家探讨。
  在程序中操作Repository概括起来有以下几个步骤:首先,构造一个RepositoryManager类的实例;接下来,通过分别调用getObjectClassOps()方法和getNodeOps() 方法得到该实例的ObjectClassOps接口和NodeOps接口;然后即可使用接口中相应的方法实现对ObjectClass (类型)或Node(节点)的操作了。
BEA Repository中的目录和内容条目都是以节点的形式来组织的,若是目录管理就调用操作目录节点的方法,若是内容条目管理就调用操作内容节点的方法。下面列举部分程序代码:
//得到ObjectClassOps接口和NodeOps接口
Try {
RepositoryManager rMgr = RepositoryManagerFactory.connect ( );
ObjectClassOps ocOps = rMgr.getObjectClassOps();
NodeOps nOps = rMgr.getNodeOps ( );
}
catch (Exception e) {
……
}
//以’BEA Repository’为根目录,创建自己的子目录
ID RootID = new ID ( "BEA Repository", "" );
String DirNodeName = “dir1”;
Node DirNode = nOps.getNode ( "/BEA Repository/ " + DirNodeName );
if (DirNode == null ){
Try {
DirNode = nOps.createHierarchyNode ( RootID, DirNodeName);
}
catch (Exception e) {
……
}
}
//先取得要添加内容所属Type的ObjectClassID
//假设该Type的名称为”type1”
String typeName = " type1";
ObjectClass[] objectClasses = null;
String CurObjectClassID = null;
try{
objectClasses = ocOps.getObjectClasses();
}
catch(Exception e){
……
}
int i;
for (i=0; i<objectClasses.length; i++){
if(objectClasses[ i ].getName().equals( typeName )) break;
}
if(i < objectClasses.length){
CurObjectClassID = objectClasses[ i ].getId().toString();
}
else{
//该类型不存在,另做处理并退出,return
}
//在目录下添加内容条目
/*
*假设 type1共有2个Property, 分别是:
* -----------------“title”(String)
* -----------------“content”(String)
*/
String ContentNodeName = “内容条目1”;
ID DirNodeID = DirNode.getId ( ); //取得父节点的ID
Property [ ] prp = new Property[2];
Value TitileValue = new Value ( “标题” );
Value ContentValue = new Value ( “内容” );
prp [0] = new Property ( “title”, TitleValue );
prp [1] = new Property ( “content”, ContentValue )
try{
nOps.createContentNode (DirNodeID, ContentNodeName, CurObjectClassID, prp );
}
carch(Exception e){
……
}
//删除内容条目
Node ContentNode = nOps.getNode ( "/BEA Repository/ " + ContentNodeName)
if (ContentNode != null ) {
try {
ID ContentNodeID = ContentNode.getId ( );
nOps.deleteNode (ContentNodeID );
}
catch (Exception e) {
……
}
}
//删除目录
DirNode = nOps.getNode ( "/BEA Repository/ " + DirNodeName)
if (DirNode!= null ) {
try {
ID DirNodeID = DirNode.getId ( );
nOps.deleteNode (DirNodeID );
}
catch (Exception e) {
……
}
}
3.对较大文本内容的发布
  在Bea Repository中,一般的文字内容都被存为String类型,不过String类型是有长度限制的,所以不能存储较长的内容。当然,我们可以把较长的内容先编辑成文件,再以Binary类型存入BEA Repository中进行发布。但是,如果用BEA提供的ShowBinaryServlet来显示这种Binary类型的数据,只能是在一个新打开的页面中显示,而不能在自定义页面中进行显示,这就造成了不能按自己的需要定制内容显示的界面。为解决这个问题,我们在在认真研究ShowBinarySeverlet的基础上,开发了自己的Java代码以读取这种Binary内容并在JSP中予以显示。
//"bContent"为存放文本文件的字段
Property property=node.getProperty("bContent"); 
// 将要用到Property的getPropertyBytes()方法,它必须以transaction的方式来执行
UserTransaction tx;
Context initCtx = new InitialContext();
tx = (UserTransaction)initCtx.lookup("java:comp/UserTransaction");
//通过getPropertyBytes()方法把二进制数据变成流文件
tx.begin();
RepositoryManager repositoryManager = RepositoryManagerFactory.connect();
NodeOps nodeOps = repositoryManager.getNodeOps();
InputStream is = null;
is = nodeOps.getPropertyBytes(node.getId(), property.getId());
tx.commit();
//把输入流中的数据读入缓冲区
InputStreamReader isr = new InputStreamReader(is);
StringBuffer buffer = new StringBuffer();
Reader in = new BufferedReader(isr);
int ch;
while ((ch = in.read()) > -1) {
buffer.append((char)ch);
}
in.close();
is.close();
//把缓冲区的内容转换为字符串,为了支持中文还需作编码方式的转换
String str = buffer.toString();
String newStr = new String(str.getBytes(),"gb2312");
4.对中文乱码问题的处理
  在开发BEA Portal 8.1内容管理的过程中,我们经常遇到在程序中不能正确对中文进行处理的情况。发生乱码时,中文字符就变成了一个个问号或怪字符(例如图3中的情况),确实比较令人着急。当然,这并不是BEA Portal的问题,因为java中出现中文乱码问题一般都是由于对程序中的编码/解码方式(如:UNICODE编码和其它本地的编码)使用不当所造成,而这些问题本身都是可以通过合理途径加以解决的。

图3 页面中出现了中文乱码
  要解决这些问题,首先要搞清楚的是一些常见的字符集编码方式。ISO8859系列是8位的西文字符集(如:ISO8859-1, ISO8859-2等),0~0x7F仍与ASCII字符集保持兼容,大于0x7F的是各种拉丁字符或欧洲字符的扩展;GB2312是简体中文编码方式,BIG5是繁体中文的编码方式,它们表示西文字符时用单字节,表示中文用两个字节,而GBK可以看成是GB2312的扩展;Java中为了便于国际化,它的字符数据都是16位无符号型数据??UNICODE集;而在以英文为主要信息的互联网时代,UNICODE对任何字符都采用双字节表示的方式极其浪费空间,所以在此基础上出现了UTF-8,在UTF-8中,属于US-ASCII中的字符,仍用一个字节表示,且和US-ASCII兼容,其他的字符,则用1(大于0x7F部分)到3个字节。Windows (简体中文版)一般采用GBK字符集,而BEA Weblogic Portal 8.1默认采用UTF-8字符集。
  编码(Encode)和解码(Decode)是两个相反的动作。编码是把字符按照某种映射标准(字符集),转换成字节,这时我们把执行编码动作时所采用的标准叫编码(encoding)。而解码则是将字节序列按照某种字符标准(解码,decoding),转换成字符串。如果解码的标准和编码标准不兼容,得出的字符串就是乱码。
  当出现java的中文乱码问题时,需要根据具体情况来分析解决。在开发Portal内容管理程序中我们遇到了以下几种出现中文乱码的情况:页面内的中文字符、提交到数据库中的内容、在页面中显示的从数据库中读出的内容和页面之间通过URL传递的中文参数。通过实践和总结,有下面一种比较通用的简单解决方案,即在任何地方都使用GB2312字符集进行编码和解码,可以解决绝大多数中文乱码问题。
1. 在startweblogic.cmd 文件中添加如下代码(使程序编译时按gb2312编码):
%JAVA_OPTIONS% -Dfile.encoding=gb2312;
2. 修改weblogic.xml文件(使页面向服务器发送的内容按gb2312编码):
……
<jsp-param>
<param-name>encoding</param-name>
<param-value>gb2312</param-value>
</jsp-param>
……

3. 修改web.xml文件(使页面之间通过URL方式传递的中文参数以gb2312进行编码):
……
<context-param>
<param-name>weblogic.httpd.inputCharset./*</param-name>
<param-value>gb2312</param-value>
</context-param>
……

4. 修改 .portal文件(使portal运行时采用gb2312字符集):
<portal:directive.page contentType="text/html;charset=gb2312"/>

5. 每个jsp的文件头里面都写上如下的语句(使每个页面都采用gb2312字符集):
<%@ page language="java" contentType="text/html;charset=gb2312"%>

6. 如果仍然出现乱码,可再对该乱码字符串使用如下方法进行一次编码方式的转换:
NewString = new String( OldString.getBytes(), "gb2312" );
分享到:
评论

相关推荐

    oracle RAC全攻略3

    - **BEA WebLogic Portal™**:提供了一套完整的门户解决方案,便于定制和管理企业门户,支持个性化内容和统一的用户界面设计。 - **BEA WebLogic Workshop™**:一个集成开发环境,专为WebLogic平台上的应用程序...

    Actuate--administering-iserver-system.pdf

    - **BEA Systems 的 WebLogic 产品系列**:用于集成到 BEA 的 WebLogic Portal 等环境中。 以上内容涵盖了 Actuate iServer 系统的主要方面,包括系统架构、安装配置、报表设计、性能调优及第三方集成等方面的知识...

    FLAC3D隧道台阶法施工模拟:命令操作与支护结构一体化构建

    内容概要:本文详细介绍了利用FLAC3D进行隧道台阶法施工模拟的方法和技术细节。首先解释了隧道台阶法施工的基本流程,重点在于开挖命令的应用,如'zone cmodel assign'和'zone remove'用于改变区域本构模型并执行开挖操作。接着阐述了支护结构的设置方法,包括超前加固体、初衬、二衬、锚杆和锁脚锚杆的具体配置方式。此外,还讲解了如何通过'mesh'命令直接在FLAC3D中生成符合实际工程需求的网格模型。最后展示了模拟后的围岩体位移云图和应力云图,验证了计算结果的有效性,强调了这些数据对优化施工方案的重要性。 适合人群:从事岩土工程、隧道工程及相关领域的工程师和技术人员。 使用场景及目标:适用于需要进行隧道施工模拟的专业人士,旨在提升他们对FLAC3D的理解和应用能力,确保隧道施工的安全性和高效性。 其他说明:文中提供的实例和命令操作均基于真实项目经验,有助于读者更好地理解和掌握FLAC3D的实际应用技巧。

    纤维骨料细观尺度混凝土模型:基于多有限元软件的网格划分与应用

    内容概要:本文介绍了纤维骨料细观尺度混凝土模型的设计与应用,重点在于如何通过控制骨料尺寸和体积率,在不同有限元软件(如Abaqus、Ansys、Ls-Dyna、Flac3d)中进行有效的四面体网格划分和六面体网格投影。文中提供了生成随机骨料位置和直径的Python代码片段,并详细解释了网格划分过程中需要注意的技术细节,如碰撞检测、网格转换公式以及材料属性设置。此外,还讨论了模型验证的方法及其在实际工程项目中的应用价值。 适合人群:从事土木工程、材料科学领域的研究人员和技术人员,尤其是那些需要利用有限元方法进行混凝土结构分析的专业人士。 使用场景及目标:①帮助工程师更好地理解和预测纤维混凝土的行为特性;②为实际工程项目提供理论支持和技术指导,从而优化纤维混凝土的应用;③提高仿真精度,减少实验成本和时间。 其他说明:文中提到的一些具体操作步骤和技术细节对于初学者来说可能具有一定挑战性,建议读者在实践中逐步掌握相关技能并积累经验。同时,正确设置物理量单位非常重要,错误的单位可能导致计算结果严重偏离预期。

    嵌入式八股文面试题库资料知识宝典-c++个人笔记总结.zip

    嵌入式八股文面试题库资料知识宝典-c++个人笔记总结.zip

    工业自动化领域西门子S7-1200 PLC模块、板卡及多协议通讯详解

    内容概要:本文详细介绍了西门子S7-1200 PLC在工业自动化领域的应用,重点讲解了其模块、板卡和通讯方式。首先概述了PLC模块和板卡作为基本单元的作用,接着深入探讨了支持的多种通讯协议,包括Modbus-RTU、S7通讯、Modbus-TCP和TCP/IP等。每种协议都配有具体的代码分析和调试方法。最后,介绍了博途V16编程软件的使用体验,强调了其对S7-1200 PLC编程的支持。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对西门子S7-1200 PLC有初步了解或希望深入了解的人群。 使用场景及目标:适用于需要掌握PLC模块化设计、不同通讯协议的应用场景,旨在帮助读者理解PLC的工作原理,提高编程和调试能力,从而更好地应用于实际项目中。 其他说明:文中提供的实例和代码分析有助于读者快速上手,同时推荐使用博途V16及以上版本的编程软件进行实践操作。

    Comsol仿真无模型等离子体空气反应框架:多气体反应及关键参数求解

    内容概要:本文介绍了Comsol仿真软件在等离子体空气反应领域的应用,重点探讨了其无模型反应框架的功能。该框架能模拟超过40种气体(如氧气、氮气、氦气)的详细反应过程,提供碰撞截面数据、迁移率扩散系数、速率系数和汤森系数的查询与求解功能,并通过bosig+模块实现自定义反应路径的选择。此外,文中强调了代码分析与实践应用的重要性,以及这些功能如何提升等离子体反应研究的效率和准确性。 适合人群:从事等离子体物理、化学反应动力学及相关领域研究的专业人士和技术人员。 使用场景及目标:适用于需要精确模拟复杂等离子体环境中气体反应的研究项目,旨在提高对等离子体反应机制的理解,优化实验设计,预测反应行为。 其他说明:Comsol仿真软件凭借其强大的计算能力,在等离子体研究中扮演着重要角色。随着技术的发展,该框架有望进一步推动相关领域的创新和发展。

    嵌入式八股文面试题库资料知识宝典-同方万维硬件测试工程师.zip

    嵌入式八股文面试题库资料知识宝典-同方万维硬件测试工程师.zip

    嵌入式八股文面试题库资料知识宝典-c,c++笔试.zip

    嵌入式八股文面试题库资料知识宝典-c,c++笔试.zip

    少儿编程scratch项目源代码文件案例素材-激光连接.zip

    少儿编程scratch项目源代码文件案例素材-激光连接.zip

    嵌入式八股文面试题库资料知识宝典-奔图电子-软件笔试试题v1.1(C,C++工程师).zip

    嵌入式八股文面试题库资料知识宝典-奔图电子-软件笔试试题v1.1(C,C++工程师).zip

    嵌入式八股文面试题库资料知识宝典-国科环宇有限公司.zip

    嵌入式八股文面试题库资料知识宝典-国科环宇有限公司.zip

    基于LDA主题模型对AIGC的影响力分析.pdf

    基于LDA主题模型对AIGC的影响力分析.pdf

    HG2543C1EPON天翼网关(4口单频)rootfsA

    可以自己添加应用和功能版,在/opt/upt/apps/下面添加ubin目录和ulib目录,把你想用的程序添加到ubin,支持模块添加到ulib中,就可以运行,具体刷机操作,请看《》

    遗传算法在冷链物流与多配送中心VRP车辆路径优化中的应用及改进

    内容概要:本文探讨了遗传算法在车辆路径优化问题(VRP)中的应用及其改进,特别是在冷链物流、软时间窗和多配送中心场景下的路径优化策略。文中介绍了遗传算法通过模拟自然界进化过程来寻找最优路径解决方案的能力,并详细讨论了其在冷链物流中的重要性,即确保产品运输过程中的温度稳定和时效性。此外,还提到了软时间窗概念的应用,以平衡客户满意度和运输成本。在多配送中心场景下,遗传算法能有效处理复杂路径规划问题,如外卖配送路径优化和充电桩电车车辆路径优化。除了遗传算法,蚁群算法、模拟退火算法和粒子群算法也在不同类型的路径优化问题上得到广泛应用,如旅行商问题(TSP)、容量约束的车辆路径规划(CVRP)和带距离、容量和时间窗约束的车辆路径规划(VRPTW)。最后,文章强调了遗传算法改进的研究方向,旨在提高运算速度和精度,从而提升物流效率和客户满意度。 适合人群:从事物流与运输领域的研究人员和技术人员,对车辆路径优化感兴趣的学者和从业者。 使用场景及目标:适用于冷链物流、外卖配送、充电桩电车等多种实际应用场景,旨在优化路径规划,降低运输成本,提高客户满意度。 其他说明:本文不仅介绍了现有算法的应用情况,还指出了未来可能的研究方向和发展趋势。

    物流车辆路径优化研究:基于MATLAB的VRP、VRPTW及冷链物流与充电桩优化算法

    内容概要:本文详细介绍了物流领域的车辆路径优化(VRP)及其扩展问题——带时间窗的车辆路径优化(VRPTW),并探讨了冷链物流车辆路径优化(考虑充电桩需求)。文中通过MATLAB实现了遗传算法解决这些问题的具体步骤,包括参数设置、种群初始化、适应度函数计算、遗传算法循环等。此外,还讨论了多配送中心场景下的路径优化挑战和其他优化算法(如蚁群算法、粒子群算法、节约算法和模拟退火算法)的应用。最后,针对冷链物流和电动汽车路径优化提出了具体的解决方案和技术细节。 适合人群:从事物流管理、运筹学、算法设计的研究人员和工程师,尤其是对MATLAB有一定基础的技术人员。 使用场景及目标:适用于需要优化物流配送路径的企业和个人,旨在提高配送效率、降低成本、提升服务质量。具体应用场景包括但不限于城市配送、冷链运输、电动车辆调度等。 其他说明:文中提供了完整的MATLAB代码示例,帮助读者更好地理解和实践各种优化算法。同时,强调了不同算法的特点和适用条件,便于读者根据实际情况选择最合适的算法。

    嵌入式八股文面试题库资料知识宝典-文思创新面试题2.zip

    嵌入式八股文面试题库资料知识宝典-文思创新面试题2.zip

    嵌入式八股文面试题库资料知识宝典-网络编程.zip

    嵌入式八股文面试题库资料知识宝典-网络编程.zip

Global site tag (gtag.js) - Google Analytics