泛微协同商务系统Ecology系统底层包开发指南.docx

上传人:b****8 文档编号:10391224 上传时间:2023-02-10 格式:DOCX 页数:33 大小:27.91KB
下载 相关 举报
泛微协同商务系统Ecology系统底层包开发指南.docx_第1页
第1页 / 共33页
泛微协同商务系统Ecology系统底层包开发指南.docx_第2页
第2页 / 共33页
泛微协同商务系统Ecology系统底层包开发指南.docx_第3页
第3页 / 共33页
泛微协同商务系统Ecology系统底层包开发指南.docx_第4页
第4页 / 共33页
泛微协同商务系统Ecology系统底层包开发指南.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

泛微协同商务系统Ecology系统底层包开发指南.docx

《泛微协同商务系统Ecology系统底层包开发指南.docx》由会员分享,可在线阅读,更多相关《泛微协同商务系统Ecology系统底层包开发指南.docx(33页珍藏版)》请在冰豆网上搜索。

泛微协同商务系统Ecology系统底层包开发指南.docx

泛微协同商务系统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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1