泛微协同商务系统Ecology系统底层包开发指南.docx
- 文档编号:10391224
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:33
- 大小:27.91KB
泛微协同商务系统Ecology系统底层包开发指南.docx
《泛微协同商务系统Ecology系统底层包开发指南.docx》由会员分享,可在线阅读,更多相关《泛微协同商务系统Ecology系统底层包开发指南.docx(33页珍藏版)》请在冰豆网上搜索。
泛微协同商务系统Ecology系统底层包开发指南
1.引言4
1.1概述4
1.2定义4
2.底层包应用及范例4
2.1最基本的继承类4
2.2怎样记录日志5
2.3怎样获取属性文件的值8
2.4怎样获取系统的运行目录10
2.5怎样访问和运行数据库脚本11
2.6如何上传一个文件15
2.7如何访问已经上传的文件19
2.8如何使用缓存提高系统效率20
2.9其它底层类基本方法29
1.引言
1.1概述
本文档为泛微协同商务系统(Ecology)程序员开发指导文档,讲述了开发底层工具包的应用,常用功能的开发。
2.底层包应用及范例
本章对ecology系统的底层工具包进行讲解,开发人员可以从这里学到怎样利用底层的工具包进行开发
2.1最基本的继承类
继承的例子如下:
javabean的继承
publicclassResourceComInfoextendsBaseBean{
publicvoiddoSomething(){//某一个方法
方法的处理………
writeLog(s);//写日志
}
}
2.2怎样记录日志
注意writeLog方法的使用:
/**
*将某个对象写入Log文件
*@paramobj被写入的对象
*/
publicvoidwriteLog(Objectobj)
2003年8月12日的日志。
当天的日志为ecology.log。
每一条日志的记录格式为:
YYYY.MM.DD-HH:
MM:
SS记录日志的类名–日志信息
比如:
20032004-01-10'andA.reportdate<='2004-03-10'andA.inputstatus>='0'andA.inputstatus<>'9'andA.modtype='0'
日志的记录有两种模式,第一种为调试模式,第二种为在线模式。
在第一种模式下,所有的java对象都会记录到日志文件中,包括调试信息,在第二种模式下,只有为Exception(异常)的对象才会记录到日志文件中。
模式的设置在/ecology/WEB-INF/log4jinit.properties属性文件中的log4j.rootLogger属性来指定,如下:
log4j.rootLogger=INFO,A2
#ifyouwanttoopenthetracefromopensource,justadd#aheadofline
#don'tmodifythefileproperty
上面的日志表明将所有的信息答应到文件日志文件中,其中日志的模式为:
#FATAL0
#ERROR3
#WARN4只有WARN,ERROR,FATAL输出
#INFO6所有的log都输出
#DEBUG7
记录日志的例子如下:
publicclassResourceComInfoextendsBaseBean{
privatevoidsetResourceInfo()throwsException{
try{
业务处理过程……….
StringdebugInfo="Thisistest";
//在调试模式下将会记入日志文件
writeLog("debuginfois"+debugInfo);
}
catch(Exceptione){
//在任何模式下出现异常,都将会记入日志文件
writeLog(e);
throwe;
}
}
}
记录的日志文件形式为:
2007-10-1516:
51:
50,125DEBUGweaver.hrm.resource.ResourceComInfo-debuginfoisThisistest
如果有异常,将会记录为:
2007-10-1516:
51:
50,125ERRORweaver.hrm.resource.ResourceComInfo-
atweaver.hrm.resource.ResourceComInfo(ResourceComInfo.java:
59)
从上面的日志信息,可以看到ResourceComInfo类的59行代码运行的时候出现错误,这个错误是执行数据库操作的脚本错误,具体的错误信息是:
形式参数'@id_1'定义为OUTPUT,但实际参数却未声明为OUTPUT。
说明调用数据库脚本的时候参数的数量有出入。
开发过程中请将日志级别设置为INFO,通过日志可检查程序在哪里出错了。
2.3怎样获取属性文件的值
getPropValue方法获取属性文件的值。
注意这里是使用,而不是调用,因为这个方法是这两个被继承类中的方法。
注意getPropValue方法的使用:
/**
*从配置文件中获取某个属性的值
*@paramfname属性文件名称
*@paramkey值
*@returnString属性值
*/
publicStringgetPropValue(Stringfname,Stringkey)
getPropValue方法指定了从某一个属性文件fname中获取键值key的值。
这里的属性文件必须存放在系统运行目录下的WEB-INF/prop目录下,文件名称为参数fname指定的文件名,不包括属性文件的后缀名,属性文件的后缀名必须为.properties。
比如:
系统的运行目录为d:
\ecology\,那么属性文件必须放在d:
\ecology\WEB-INF\prop\目录下,取名为thefilename.properties,其中thefilename是任意的。
在属性文件中某一个键值的值用等号来赋值,等号后面的值必须放在一行,如果一行不够写(或者为了查看的方便),可以用\来链接多行。
否则其它行的值不能被键值取得。
等号左右都可以有空格,对键值和键值的值没有影响。
比如:
thekeyname=thevalue
将键值的值放到多行:
thekeyname=thevalue1\
thevalue2\
thevalue3
thevalue4
这时候thekeyname的值为thevalue1thevalue2thevalue3,thevalue4取不到,因为thevalue3后面没有\
在程序中要取得上述属性文件中键值thekeyname的值,使用方法:
getPropValue(“thefilename”,“thekeyname”);
获取属性文件的值的例子如下:
publicclassResourceComInfoextendsBaseBean{
privatevoidsetResourceInfo()throwsException{
业务处理过程……….
StringkeyValue=getPropValue(“thefilename”,“thekeyname”);
//将键值thekeyname的值keyValue记入日志文件
writeLog("keyvalueis"+keyValue);
}
}
系统的主属性文件weaver.properties的文件名“weaver”作为系统常量放在weaver.general.GCONST类中,可以使用getConfigFile()方法来返回“weaver”,在编程的过程中,如果需要用到weaver.properties属性文件中的键值,请用GCONST.getConfigFile()来获取,当主属性文件名称因为需要改变得时候,不必改变所有用到这个属性文件的类,只需要改变GCONST类中常量的值
2.4怎样获取系统的运行目录
weaver.general.GCONST类提供了一个静态方法getRootPath(),返回系统的运行目录,比如系统的运行目录为d盘的ecology目录,将返回d:
\ecology\
获取系统的运行目录的例子如下:
publicclassTestBeanextendsBaseBean{
importweaver.general.GCONST;
publicvoidgetSysRunPath(){
StringsysRunPath=GCONST.GetRootPath();
//将系统的运行目录sysRunPath的值记入日志文件
writeLog("sysRunPathis"+sysRunPath);
}
}
2.5怎样访问和运行数据库脚本
Ecology系统的链接池管理请参见weaver.conn.ConnectionPool,weaver.conn.DBConnectionPool,weaver.conn.ConnCheckerTimer类的API文档,weaver.conn.ConnectionPool用于管理ecology系统中的所有数据库链接池(ecology系统可以同时链接多个数据库,每一个数据库均有一个对应的数据库链接池,由weaver.conn.DBConnectionPool负责管理,而weaver.conn.ConnectionPool则是这些链接池的大管家,负责所有链接池的协调和统一对外接口),weaver.conn.DBConnectionPool用于建立和管理对某一个数据库的链接池,weaver.conn.ConnCheckerTimer用于监控各个链接池的状况,定期对数据库链接池中不符合要求的链接进行清理,并监视是否需要在某一链接池中建立新的链接。
RecordSet执行数据库操作有两种形式,一种为调用存储过程,另一种为直接执行SQL语句。
与ConnStatement不同,RecordSet执行SQL语句不分查询和修改,都在一条语句中执行。
RecordSet执行脚本的方式如下:
1、使用默认的链接池执行SQL语句:
RecordSetrs=newRecordSet();
rs.executeSql("select*fromTB_Example");
while(rs.next()){
Stringthename=rs.getString("name");
其它处理代码....……
}
2、使用指定的链接池ecologytest执行SQL语句
RecordSetrs=newRecordSet();
rs.executeSql("updateTB_Examplesetname='thenewvalue'","ecologytest");
3、使用指定的链接池ecologytest执行存储过程PD_Example_UpdateById
存储过程PD_Example_UpdateById如下:
CREATEPROCEDURE[PD_Example_UpdateById]
(@namevarchar(100),
@idint,
@flagintegeroutput,
@msgvarchar(80)output)
AS
updateTB_Examplesetname=@namewhereid=@id
GO
RecordSetrs=newRecordSet();
Stringnewname=.......;
Stringid=......;
Stringprocpara=newname+Util.getSeparator()+id;
rs.executeProc("PD_Example_UpdateById",procpara,"ecologytest");
4、在一个客户程序多个执行之间,查询结果可以保留到下一次查询
RecordSetrs=newRecordSet();
rs.executeSql("select*fromTB_Example");
rs.executeSql("updateTB_Examplesetname='thenewvalue'");
while(rs.next()){
Stringthename=rs.getString("name");//得到修改前查询的值
其它处理代码....…….
}
rs.executeSql("select*fromTB_Example");
while(rs.next()){
Stringthename=rs.getString("name");//得到修改后查询的值
其它处理代码....……
}
访问和运行数据库脚本的例子:
publicclassResourceComInfoextendsBaseBean{
privatevoidsetResourceInfo()throwsException{
业务处理过程……….
StringsqlStr=“select*fromHrmresorce”;
RecordSetrt=newRecordSet();
rt.executeSql(sqlStr);
while(rt.next()){
Stringid=Util.null2String(rt.getString("id"));
Stringloginid=Util.null2String(rt.getString("loginid"));
Stringlastname=Util.null2String(rt.getString("lastname"));
//将数据库的值记入日志文件
writeLog("idis"+id);
writeLog("loginidis"+loginid);
writeLog("lastnameis"+lastname);
}
}
}
其它关于系统数据库信息的管理
a)、weaver.conn.ConnectionPool类的管理和设置:
所有的数据库链接池的集合,用链接池名称区别每一个链接池.支持对一个或多个由属性文件定义的数据库连接池的访问.客户程序可以调用getInstance()方法访问本类的唯一实例。
对于一个链接池集合来说,可以有多个链接池,分别链接不同的数据库。
应用程序指定链接池的名称来调用不同的链接池。
如果应用程序没有指定链接池的名称,将使用默认的链接池。
默认链接池的指定有两种方式:
1、在ApplicationServer设置的初始参数serverName的值,以Resin为例:
2、如果ApplicationServer没有相应设置,则系统使用属性文件(weaver.properties)中设置的默认链接池名称:
DefaultPoolName=ecology
对于所有的链接池,系统需要加载相应的JDBCDriver来建立与相应数据库的链接。
这些Driver在属性文件(weaver.properties)中指定,多个Driver中间用空格隔开:
对于每一个链接池需要用到的参数在属性文件(weaver.properties)中指定,属性文件中参数的名称以链接池的名称开头,中间加入小数点,比如链接池ecology的参数指定为:
10.1.1.205:
1433;DatabaseName=ecology//dburl
ecology.user=sa//dbusername
ecology.password=123456//dbuserpassword
ecology.charset=ISO_1//dbencode
ecology.maxconn=10//maxconninconnpool
ecology.minconn=2//minconninconnpool
ecology.maxusecount=30//themaxusetimesofaconn
ecology.maxidletime=30//themaxunusetimeofaconn(分)
ecology.maxalivetime=2//一个链接被调用后的最大未归回时间(分)
ecology.checktime=500//检查的频率(秒)
b)、weaver.conn.DBConnectionPool类的管理和设置:
数据库链接池,所有创建的链接存放在链接池中,在客户端链接数据库时从链接池中取出链接,客户端在完成数据库操作后将链接返回链接池。
链接池创建链接需要用到的参数在属性文件(weaver.properties)中指定,属性文件中参数的名称以链接池的名称开头,中间加入小数点,比如链接池ecology的参数指定为:
10.1.1.205:
1433;DatabaseName=AIS2002//dburl
ecology.user=sa//dbusername
ecology.password=123456//dbuserpassword
ecology.charset=ISO_1//dbencode
ecology.maxconn=10//maxconninconnpool
ecology.minconn=2//minconninconnpool
ecology.maxusecount=30//themaxusetimesofaconn
ecology.maxidletime=30//themaxunusetimeofaconn(分)
ecology.maxalivetime=2//一个链接被调用后的最大未归回时间(分)
ecology.checktime=500//检查的频率(秒)
2.6如何上传一个文件
B/S架构的文件上传采用的是multipart/form-data
/**
*进行上传一个文件的操作
*@paramuploadname需要上传的文件字段名称
*@returnString返回保存文件信息的imagefileid
*/
publicStringuploadFiles(Stringuploadname)
/**
*进行上传一个文件的操作
*@paramuploadnames需要上传的多个文件字段名称
*@returnString[]返回保存多个文件信息的imagefileid数组
*/
publicString[]uploadFiles(String[]uploadnames)
这里,需要注意两点,一个是传给uploadFiles方法的参数,是上传文件字段的名称,而不是文件的名称(这个时候你并不知道文件的名称)。
比如在jsp或者html页面中文件浏览的字段代码为:
那么这里的文件字段的名称为"accessory1"。
第二点是这个方法返回的信息是保存在数据库表ImageFile中关于这个文件信息的键值imagefileid,这个表的结构如下:
Column(s)of"ImageFile"Table
Name
Datatype
NullOption
Comment
imagefileid
int
NOTNULL
文件id
imagefilename
varchar(200)
NULL
文件名称
imagefiletype
varchar(50)
NULL
文件MIME类型
filerealpath
varchar(255)
NULL
文件存放目录
imagefileused
int
NULL
文件使用次数
iszip
char
(1)
NULL
是否压缩
0:
否
1:
是
isencrypt
char
(1)
NULL
是否加密
0:
否
1:
是
imagefile
image
NULL
文件(存在在数据库中的文件内容,现已不使用)
从表结构可以看出,我们得到了某一个文件信息的imagefileid
上传文件的例子:
这是一个文件上传的例子
—注意,这里需要用enctype="multipart/form-data"表明使用multipart/form-data协议--> 将上面这段代码保存为一个html文件FileUploadTest.htm,放在ecology运行目录下的/test/目录下。 在这个页面中,有一个输入框和两个文件框可以输入信息。 注意,在环境的配置中,需要告诉web服务器将/weaver/的请求转给应用服务器作为servlet处理,关于配置的信息,请参考Apache和Resin的配置文档。 packageweaver.test; /** *Title: 多文件上传处理类 *Description: 多文件上传测试 *Copyright: Copyright(c)2001 *Company: weaver *@authorliuyu *@version1.0 */ importweaver.file.FileUpload; publicclassMutiFileUploadextendsDynamicServlet{ publicvoiddoProcess(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ FileUploadfu=newFileUpload
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 协同 商务 系统 Ecology 底层 开发 指南