起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 250|回复: 13

【结帖】请教(请看看服务器报的什么错误)**

[复制链接]
发表于 2008-5-27 10:02:53 | 显示全部楼层 |阅读模式
[BeginTransactionAction] com.justep.service.action.transaction.BeginTransactionAction@17313b0
Start Action..BAB7BDC6-4BA6-41D0-13AF-916034226267
Start Action..BAB7BDC6-4BA6-41D0-13AF-916034226267
Start Action..BAB7BDC6-4BA6-41D0-13AF-916034226267
Start Action..BAB7BDC6-4BA6-41D0-13AF-916034226267
Start Action..BAB7BDC6-4BA6-41D0-13AF-916034226267
Start Action..BAB7BDC6-4BA6-41D0-13AF-916034226267
Action Exception...
java.sql.SQLException: Cannot get connection for URL jdbcraclecizbm : ORA-00020: maximum number of processes (150)
exceeded

        at org.enhydra.jdbc.standard.StandardDataSource.getConnection(StandardDataSource.java:216)
        at org.enhydra.jdbc.standard.StandardPooledConnection.<init>(StandardPooledConnection.java:65)
        at org.enhydra.jdbc.standard.StandardXAConnection.<init>(StandardXAConnection.java:81)
        at org.enhydra.jdbc.standard.StandardXADataSource.getXAConnection(StandardXADataSource.java:109)
        at com.justep.transaction.SourceGen.getConnection(Unknown Source)
        at com.justep.connection.ConnectionManager.get(Unknown Source)
        at com.justep.service.action.base.SQLAction.doExec(Unknown Source)
        at com.justep.service.action.base.SupportAction$1.execute(Unknown Source)
        at com.justep.transaction.TransactionThread.run(Unknown Source)
2008-5-27 9:58:12 com.caucho.hessian.server.HessianSkeleton invoke
警告: java.lang.Exception: java.sql.SQLException
java.lang.Exception: java.sql.SQLException
        at com.justep.service.BizServiceImp.execute(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor121.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:157)
        at com.justep.hessian.HessianServlet.service(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:831)
        at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:652)
        at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1203)
        at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.ClassCastException: java.sql.SQLException
        at com.justep.service.action.base.SupportAction.execute(Unknown Source)
        ... 19 more
Time out BAB7BDC6-4BA6-41D0-13AF-916034226267
Rollback Action...BAB7BDC6-4BA6-41D0-13AF-916034226267
Time: 2008-5-27 9:58:32


这个事务的代码是这样的
procedure TMainForm.Button1Click(Sender: TObject);
var
  count:Integer;
  count2:Integer;
  wzbm:string;
  gsbm:string;
  IHandle:TTransactionHandle;
  datasetwzkc:TSQLDataSet;
  datasettz: TSQLDataSet;
  datasetjb: TSQLDataSet;
  datasetxb: TSQLDataSet;
begin
  InfoBrokerFprkd.Info.DataSetByID('xb').Connection.Transaction:= InfoBrokerFprkd.Info.DataSetByID('jb').Connection.Transaction;
  InfoBrokerFprkd.Info.DataSetByID('tz').Connection.Transaction:= InfoBrokerFprkd.Info.DataSetByID('jb').Connection.Transaction;
  InfoBrokerFprkd.Info.DataSetByID('wzkc').Connection.Transaction:= InfoBrokerFprkd.Info.DataSetByID('jb').Connection.Transaction;
  datasetwzkc:=TSQLDATASet(InfoBrokerFprkd.Info.DataSetByID('wzkc'));
  datasettz:=TSQLDATASet(InfoBrokerFprkd.Info.DataSetByID('tz'));
  datasetjb:=TSQLDATASet(InfoBrokerFprkd.Info.DataSetByID('jb'));
  datasetxb:=TSQLDATASet(InfoBrokerFprkd.Info.DataSetByID('xb'));
  IHandle:= InfoBrokerFprkd.Info.DataSetByID('jb').Connection.Transaction.Start(True);
  wzbm:= datasetxb.FieldByName('wzbm').AsString;
  gsbm:= datasetjb.FieldByName('gsbm').AsString;
  count2:=datasetxb.RecordCount;
  Showmessage(SysUtils.IntToStr(count2));
  try
    InfoBrokerFprkd.Info.DataSetByID('jb').ApplyUpdates;
    //Showmessage('after updatejb');
    InfoBrokerFprkd.Info.DataSetByID('xb').First;
    while not(InfoBrokerFprkd.Info.DataSetByID('xb').Eof) do
    begin
      count:=count+1;
      InfoBrokerFprkd.Info.DataSetByID('xb').ApplyUpdates;
      InfoBrokerFprkd.Info.DataSetByID('xb').Next;
      datasettz.Open;
      datasettz.Append;
      datasettz.FieldByName('pzbm').AsString:= datasetjb.FieldByName('rkdbm').AsString;
      datasettz.FieldByName('wzbm').AsString:= datasetxb.FieldByName('wzbm').AsString;
      datasettz.FieldByName('sfbz').AsString:= '0';
      datasettz.ApplyUpdates;

      //打开要更新的物资库存信息表(d)
      datasetwzkc.Close;
      //输入sql语句  查看物资库存里是否有详表(b)中所输入的物资
      datasetwzkc.SQL.Clear;
      datasetwzkc.SQL.Text:='select * from zbmroler.wzkcxxb where wzbm='''+wzbm+''' and gsbm='''+gsbm+'''';
      //datasetwzkc.Execute;
      datasetwzkc.Open;
      //判断返回的物资条数是否为0  如果为0则在(d)中插入一条新的记录
      if (datasetwzkc.RecordCount<>1) and (datasetwzkc.RecordCount=0) then
      begin
        //提示操作者  在物资库存信息表中插入了一条新的记录
        //showmessage('物资'+wzbm+'在公司编码为'+gsbm+'的数据库中没有记录,现已在该公司数据库中插入一条记录,如有不妥请联系系统管理员!');
        //d表中插入数据的代码
        datasetwzkc.Append;
        datasetwzkc.FieldByName('wzbm').AsString:=wzbm;
        datasetwzkc.FieldByName('gsbm').AsString:=gsbm;
        datasetwzkc.FieldByName('srljsl').AsString:=datasetxb.FieldByName('sssl').AsString;
        datasetwzkc.FieldByName('kcsl').AsString:=datasetxb.FieldByName('sssl').AsString;
        datasetwzkc.FieldByName('srljje').AsString:=datasetxb.FieldByName('hkzj').AsString;
        datasetwzkc.FieldByName('zje').AsString:=datasetxb.FieldByName('hkzj').AsString;
        datasetwzkc.FieldByName('bcljsl').AsString:='0';
        datasetwzkc.FieldByName('bcljje').AsString:='0';
        datasetwzkc.FieldByName('cssl').AsString:='0';
        datasetwzkc.FieldByName('csjhdj').AsString:='0';
        datasetwzkc.FieldByName('cssjdj').AsString:='0';
        datasetwzkc.FieldByName('csccl').AsString:='0';
        datasetwzkc.FieldByName('csjhje').AsString:='0';
        datasetwzkc.FieldByName('cssjje').AsString:='0';
        //datasetwzkc.Post;
        datasetwzkc.ApplyUpdates;
        //datasetwzkc.ApplyUpdates;
      end
      //如果在d表的数据库中查到有记录  则直接在记录上更新
      else if (datasetwzkc.RecordCount=1) then
      begin
        //showmessage(datasetwzkc.FieldByName('srljsl').AsString);
        datasetwzkc.Edit;
        datasetwzkc.FieldByName('srljsl').AsFloat:=datasetwzkc.FieldByName('srljsl').AsFloat+datasetxb.FieldByName('sssl').AsFloat;
        datasetwzkc.FieldByName('kcsl').AsFloat:=datasetwzkc.FieldByName('kcsl').AsFloat+datasetxb.FieldByName('sssl').AsFloat;
        datasetwzkc.FieldByName('srljje').AsFloat:=datasetwzkc.FieldByName('srljje').AsFloat+datasetxb.FieldByName('hkzj').AsFloat;
        datasetwzkc.FieldByName('zje').AsFloat:=datasetwzkc.FieldByName('zje').AsFloat+datasetxb.FieldByName('hkzj').AsFloat;
        datasetwzkc.ApplyUpdates;
      end;
  end;
    showmessage(SysUtils.IntToStr(count));
    InfoBrokerFprkd.Info.DataSetByID('jb').Connection.Transaction.Commit(IHandle);
  except
    InfoBrokerFprkd.Info.DataSetByID('jb').Connection.Transaction.Rollback(IHandle);
  end;
end;
回复

使用道具 举报

发表于 2008-5-27 11:10:30 | 显示全部楼层
从错误看,连接超限了,应该是你代码的问题。
ApplyUpdates用的太多了,保存数据集的数据请用post,最后提交数据的时候用ApplyUpdates.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-27 15:33:49 | 显示全部楼层
现在又出现这个错误

错误.gif

435.99 KB, 下载次数: 121

回复 支持 反对

使用道具 举报

发表于 2008-5-27 16:13:59 | 显示全部楼层
这个错误就是事务用的太频繁了。
回复 支持 反对

使用道具 举报

发表于 2008-5-27 16:14:19 | 显示全部楼层
改改你的代码吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-27 16:59:32 | 显示全部楼层
[BeginTransactionAction] com.justep.service.action.transaction.BeginTransactionAction@17313b0
Start Action..BAB7BDC6-4BA6-41D0-13AF-916034226267
Start Action..BAB7BDC6-4BA6-41D0-13AF-916034226267
Start Action..BAB7BDC6-4BA6-41D0-13AF-916034226267
Start Action..BAB7BDC6-4BA6-41D0-13AF-916034226267
Start Action..BAB7BDC6-4BA6-41D0-13AF-916034226267
Start Action..BAB7BDC6-4BA6-41D0-13AF-916034226267


为什么每次开始的时候我只开启了一个事务
但是服务器上显示的确实好几个事务??
回复 支持 反对

使用道具 举报

发表于 2008-5-28 08:52:17 | 显示全部楼层
重启一下服务吧。
回复 支持 反对

使用道具 举报

发表于 2008-5-28 10:16:53 | 显示全部楼层
插上一贴,跟解决你的问题无关,只是看到你的代码,提些建议

IHandle:= InfoBrokerFprkd.Info.DataSetByID('jb').Connection.Transaction.Start(True);
1 尽量用非立即事务

showmessage(SysUtils.IntToStr(count));
2 在立即事务中,时间尽量短,尤其不要有Showmessage之类的用户交互

  InfoBrokerFprkd.Info.DataSetByID('xb').Connection.Transaction:= InfoBrokerFprkd.Info.DataSetByID('jb').Connection.Transaction;
  InfoBrokerFprkd.Info.DataSetByID('tz').Connection.Transaction:= InfoBrokerFprkd.Info.DataSetByID('jb').Connection.Transaction;
  InfoBrokerFprkd.Info.DataSetByID('wzkc').Connection.Transaction:= InfoBrokerFprkd.Info.DataSetByID('jb').Connection.Transaction;
3 同一个信息中的数据集在一个事务中,不用再设置他们的Transaction了
以上三条条请参考 http://wiki.justep.cn/事务

InfoBrokerFprkd.Info.DataSetByID('jb').Connection.Transaction
4 TInfo就提供了Transaction属性,不用通过数据集,直接用Inforbroker.Info.Transaction就可以了
请参考 StudioHelp
回复 支持 反对

使用道具 举报

发表于 2008-5-28 10:19:36 | 显示全部楼层
datasettz.Append;
      datasettz.FieldByName('pzbm').AsString:= datasetjb.FieldByName('rkdbm').AsString;
      datasettz.FieldByName('wzbm').AsString:= datasetxb.FieldByName('wzbm').AsString;
      datasettz.FieldByName('sfbz').AsString:= '0';
      datasettz.ApplyUpdates;
5 尽量把提交数据放在循环外,集中提交给服务器,减少交互次数,提交速度
请参考 http://bbs.justep.com/forum.php?mod=viewthread&tid=21439
回复 支持 反对

使用道具 举报

发表于 2008-5-30 17:03:25 | 显示全部楼层
楼主,怎么样了,这个问题?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-17 04:31 , Processed in 0.048366 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表