|
我修改后的server.xml
<Connector port="8081" maxHttpHeaderSize="8192" maxThreads="300" minSpareThreads="150" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"/>
<Resource name="x3stat" url="jdbc racle ci ghstat" username="x3stat" password="x3" driverClassName="oracle.jdbc.driver.OracleDriver" maxActive="100" maxIdle="15" maxWait="5000" validationQuery="select count(*) from dual" auth="Container" type="javax.sql.DataSource"/>
-------------------------------
怀疑有问题的代码
type
TINFOAUTOCALC = class(TInfo)
DataSetReadyCalc: TSQLDataSet;
DataSetNewCalc: TSQLDataSet;
FIELD_ReadyCalc_FApplyDate: TUserDataField;
FIELD_ReadyCalc_FApplicant: TUserDataField;
FIELD_ReadyCalc_FApplication: TUserDataField;
FIELD_ReadyCalc_FState: TUserDataField;
FIELD_ReadyCalc_FCalcDate: TUserDataField;
FIELD_ReadyCalc_FCostTime: TUserDataField;
FIELD_ReadyCalc_FRefDate1: TUserDataField;
FIELD_ReadyCalc_FRefDate2: TUserDataField;
FIELD_ReadyCalc_FRef1: TUserDataField;
FIELD_ReadyCalc_FRef2: TUserDataField;
DataSetQueryCalc: TSQLDataSet;
FIELD_QueryCalc_FApplyDate: TUserDataField;
FIELD_QueryCalc_FApplicant: TUserDataField;
FIELD_QueryCalc_FApplication: TUserDataField;
FIELD_QueryCalc_FState: TUserDataField;
FIELD_QueryCalc_FCalcDate: TUserDataField;
FIELD_QueryCalc_FCostTime: TUserDataField;
FIELD_QueryCalc_FRefDate1: TUserDataField;
FIELD_QueryCalc_FRefDate2: TUserDataField;
FIELD_QueryCalc_FRef1: TUserDataField;
FIELD_QueryCalc_FRef2: TUserDataField;
procedure InfoCreate(Sender: TObject);
private
FInfoCore: TInfoCore2;
procedure CreateNewCalc;
procedure DoCalculate(No, Total: Integer; TargetName, TargetCode: string;
CalcTime: TDateTime);
public
procedure CalcReady;
function CalcOne(ADataSetCalc: TDataSet): Boolean;
procedure ViewCalcInfo(ADataSetBroker: TDataSetBroker);
end;
implementation
procedure TINFOAUTOCALC.ViewCalcInfo(ADataSetBroker: TDataSetBroker);
begin
with TFormCalcInfo.Create(Context) do
try
DataSetBroker.InfoBroker := ADataSetBroker.InfoBroker;
DataSetBroker.DataSetID := ADataSetBroker.DataSetID;
ShowModal;
finally
Free;
end;
end;
procedure TINFOAUTOCALC.DoCalculate(No, Total: Integer;
TargetName, TargetCode: string; CalcTime: TDateTime);
begin
Business.Forms.Forms.Application.ProcessMessages;
end;
procedure TINFOAUTOCALC.CalcReady;
begin
DataSetNewCalc.Close;
DataSetNewCalc.Open;
with DataSetReadyCalc do
begin
Close;
Open;
while not Eof do
begin
if not CalcOne(DataSetReadyCalc) then
CreateNewCalc;
Next;
end;
end;
end;
function TINFOAUTOCALC.CalcOne(ADataSetCalc: TDataSet): Boolean;
var
lBeginDate, lEndDate, lTime: TDateTime;
lInternal, lFilter, lLog: string;
lInfoCore: TInfoCore2;
lLogLists: TStrings;
begin
with ADataSetCalc do
begin
lBeginDate := FieldByName('FRefDate1').AsDateTime;
lEndDate := FieldByName('FRefDate2').AsDateTime;
lInternal := FieldByName('FRef1').AsString;
lFilter := FieldByName('FRefFilter').AsString;
Edit;
FieldByName('FCalcDate').AsDateTime := Business.Data.SysSrv.SysService.Time;
FieldByName('FState').AsString := 'running';
Post;
ApplyUpdates;
end;
FInfoCore.TargetFilter := lFilter;
FInfoCore.Logs.Logs := TStringList.Create;
try
Result := FInfoCore.Calculate(lBeginDate, lEndDate, lInternal);
lLog := FInfoCore.Logs.Logs.Text;
finally
FInfoCore.Logs.Logs.Free;
end;
with ADataSetCalc do
begin
Edit;
FieldByName('FCostTime').AsDateTime :=
Business.Data.SysSrv.SysService.Time - FieldByName('FCalcDate').AsDateTime;
FieldByName('FLog').AsString := lLog;
if Result then
FieldByName('FState').AsString := 'complete'
else
FieldByName('FState').AsString := 'failed';
Post;
ApplyUpdates;
end;
end;
procedure TINFOAUTOCALC.CreateNewCalc;
begin
DataSetNewCalc.Open;
DataSetNewCalc.Append;
DataSetNewCalc.FieldByName('FApplyDate').AsDateTime := DataSetReadyCalc.FieldByName('FApplyDate').AsDateTime;
DataSetNewCalc.FieldByName('FApplicant').AsString := DataSetReadyCalc.FieldByName('FApplicant').AsString;
DataSetNewCalc.FieldByName('FApplication').AsString := DataSetReadyCalc.FieldByName('FApplication').AsString;
DataSetNewCalc.FieldByName('FState').AsString := 'ready';
DataSetNewCalc.FieldByName('FRefDate1').AsDateTime := DataSetReadyCalc.FieldByName('FRefDate1').AsDateTime;
DataSetNewCalc.FieldByName('FRefDate2').AsDateTime := DataSetReadyCalc.FieldByName('FRefDate2').AsDateTime;
DataSetNewCalc.FieldByName('FRef1').AsString := DataSetReadyCalc.FieldByName('FRef1').AsString;
DataSetNewCalc.FieldByName('FRefFilter').AsString := DataSetReadyCalc.FieldByName('FRefFilter').AsString;
DataSetNewCalc.Post;
DataSetNewCalc.ApplyUpdates;
end;
procedure TINFOAUTOCALC.InfoCreate(Sender: TObject);
begin
//此处创建了计算的业务信息(这个里面有近10个数据集),没有发现释放,此类创建是否需要手工释放,是不是因为它没有释放造成的连接数越来越多引起的服务中断,但是调用此业务信息的窗体是需要一直开启的
FInfoCore := TInfoCore2.Create(Context);
FInfoCore.OnCalculate := DoCalculate;
end; |
|