关于一个java代理的问题

问题描述

某个代理需要从db2数据库读取数据然后输出在当前doc,这个代理运行前几次不会报错,多次运行后会报如下错误。2009-10-1016:53:12HTTPJVM:JVMDG315:JVMRequestingHeapdumpfile2009-10-1016:53:12HTTPJVM:JVMDG318:HeapdumpfilewrittentoD:LotusDominoheapdump.20091010.165312.6084.phd2009-10-1016:53:12HTTPJVM:JVMDG274:DumpHandlerhasProcessedOutOfMemory.2009-10-1016:53:12HTTPJVM:JVMST109:InsufficientspaceinJavaheaptosatisfyallocationrequest2009-10-1016:53:12HTTPJVM:Exception2009-10-1016:53:12HTTPJVM:inthread2009-10-1016:53:12HTTPJVM:"Thread-14"2009-10-1016:53:12HTTPJVM:2009-10-1016:53:12HTTPJVM:java.lang.OutOfMemoryError:JVMCI008:OutOfMemoryError,eeGetFromJNIEnvfailed2009-10-1016:53:12JVM:Creationofthebyte[]objectfailed.2009-10-1016:53:12HTTPWebServer:LotusNotesException-JVM:AttempttoretrieveJavaagentattachmentsfailed.[/testoa/wjdd.nsf/MarqueeUp?OpenForm]

解决方案

解决方案二:
importlotus.domino.*;importjava.sql.*;importjava.util.Vector;importjava.security.*;importcom.ibm.db2.jcc.*;importjava.lang.*;publicclassJavaAgentextendsAgentBase{publicvoidNotesMain(){System.out.println("Agentdb2JAVA_PrintLinkisrunning");Sessionsession=null;AgentContextagentContext=null;Databasedb=null;Documentdoc=null;Stringdbpath=null;Stringsql=null;Stringurl=null;Stringuser=null;Stringpassword=null;Stringdbname=null;Stringservername=null;Stringport=null;Stringdb2Name=null;Stringtable=null;inti=1;intj=21;StringtmpHTML="";StringtmpTitle=null;StringtmpDate=null;StringtmpUrl=null;Connectionconn=null;Statementstmt=null;ResultSetrs=null;try{//与关系数据库建立连接servername="10.10.10.10";//地址port="50000";//端口db2Name="testDb2";//库名user="db2admin";//用户名password="DB2ADMIN";//口令url="jdbc:db2://"+servername+":"+port+"/"+db2Name;//完整链接Class.forName("com.ibm.db2.jcc.DB2Driver");//System.out.println("建立与DB2的链接----------------------1");conn=DriverManager.getConnection(url,user,password);//System.out.println("建立与DB2的链接----------------------2");stmt=conn.createStatement();//System.out.println("建立与DB2的链接----------------------3");table="DF_T_NEWS";session=getSession();agentContext=session.getAgentContext();db=agentContext.getCurrentDatabase();doc=agentContext.getDocumentContext();//抽取db2数据sql="select*from"+table+"ORDERBYTIMEDESC";rs=stmt.executeQuery(sql);//previous()absolute()first()next()if(rs!=null){while(rs.next()){//读取数据tmpTitle=rs.getString("TITLE");tmpDate=rs.getString("TIME");tmpUrl=rs.getString("HREF");//tmpHTML=tmpHTML+"<divstyle='line-height:24px;height:24px;font-size:12px;'>"+tmpDate+"<ahref='"+tmpUrl+"'target='_blank'>"+tmpTitle+"</a>";tmpHTML=tmpHTML+"<divstyle='line-height:24px;height:24px;font-size:12px;'><ahref='#'onclick=resizeNewWindow('"+tmpUrl+"')>"+tmpTitle+"</a>";tmpHTML=tmpHTML+"</div>";//移动游标循环增量i++;tmpTitle="";tmpDate="";tmpUrl="";if(i>=j)break;}rs.close();}//endif//★添加抽取的数据至doc对象doc.replaceItemValue("ReturnHTML",tmpHTML);//回收所有db2对象if(stmt!=null){stmt.close();stmt=null;}if(conn!=null){conn.close();conn=null;}if(rs!=null){rs.close();rs=null;}//回收所有notes对象if(doc!=null){doc.recycle();System.out.println("recycledoc");doc=null;}if(db!=null){db.recycle();System.out.println("recycledb");db=null;}if(agentContext!=null){agentContext.recycle();System.out.println("recycleagentContext");agentContext=null;}if(session!=null){session.recycle();System.out.println("recyclesession");session=null;}dbpath=null;sql=null;url=null;user=null;password=null;dbname=null;servername=null;port=null;db2Name=null;table=null;tmpHTML=null;tmpTitle=null;tmpDate=null;tmpUrl=null;System.gc();}catch(Exceptione){System.out.println("Error...");System.out.println("第"+i+"条文档参数出错");System.out.println("出错的db2语句:="+sql);e.printStackTrace();}finally{try{//变量回收db2对象if(stmt!=null){stmt.close();stmt=null;}if(conn!=null){conn.close();conn=null;}if(rs!=null){rs.close();rs=null;}//回收所有notes对象if(doc!=null){doc.recycle();System.out.println("recycledocinfinally");doc=null;}if(db!=null){db.recycle();System.out.println("recycledbinfinally");db=null;}if(agentContext!=null){agentContext.recycle();System.out.println("recycleagentContextinfinally");agentContext=null;}dbname=null;sql=null;url=null;user=null;password=null;dbpath=null;if(session!=null){session.recycle();System.out.println("recyclesessioninfinally");session=null;}System.gc();}catch(Exceptione){System.out.println(e.getMessage());}System.out.println("Agentdb2JAVA_PrintLinkhasbeenclosed");}}}这是我代理的全部代码,有没有高人知道问题具体出在哪??????
解决方案三:
搞定了没有啊,看错误好像是内存溢出,看你代码都recycle()了,,,
解决方案四:
/**参考:http://blog.csdn.net/ygxxingxing/archive/2007/11/16/1888945.aspx个人感觉:1.你的search会返回大数据量数据,所以有可能会超过默认的64兆JVM内存,可以试着调高JVM内存;2.tmpHTML是String类型,在循环中用+=赋值会很耗资源,建议改为StringBuffer**/

时间: 2024-07-30 11:35:13

关于一个java代理的问题的相关文章

轻松掌握Java代理模式_java

和大家一起聊一聊java代理模式 1.静态代理 1.1静态代理的代理类和和被代理的类都要维护一个共同的接口.  public interface IUserDao { void save(); } 1.2被代理的类,目标对象  public class UserDao implements IUserDao{ @Override public void save() { System.out.println("-----已经保存数据!!!------"); } } 1.3代理对象  p

在使用JAVA代理调用webservice的时候报错,请问有谁认识这中错。万分感激

问题描述 我在lotus使用java代理调用一个webservice,但是每次运行到Serviceservice=newService();的时候就报下面的错误2009-03-2422:01:38HTTPJVM:log4j:WARNNoappenderscouldbefoundforlogger(org.apache.axis.i18n.ProjectResourceBundle).2009-03-2422:01:39HTTPJVM:log4j:WARNPleaseinitializethelo

Java 代理

代理模式UML类图   代理模式 1. 静态代理   Java代码   /**      * 为被代理的类提供一个接口,是为了提高代理的通用性,凡是实现了该接口的类,都可以被代理      * 这里其实就是运用了java面向对象的多态性      */      public interface IHello {           public void sayHello();       }       /**      * 被代理的类,最根本的想法就是想用另外一个类来代理这个类,给这个类添

Java代理模式

一.Java代理模式 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 代理模式结构图 为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看来两者没有丝毫的区别.通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间,从而在设计上获得了更大的灵活性. 更通俗的说,代理解决的问题当两个类需

java代理 jdk动态代理应用案列_java

java代理有jdk动态代理.cglib代理,这里只说下jdk动态代理,jdk动态代理主要使用的是java反射机制(既java.lang.reflect包) 原理是(歌手.经纪人做例子): 建立一个公共的接口,比如:歌手public interface Singer: 用具体的类实现接口,比如:周杰伦,他是歌手所以实现Singer这个类,class MySinger implements Singer 建立代理类,这里也就是经纪人,他需要实现InvocationHandler类,并重写invok

用java代理改写LS中的Evaluate函数的问题

问题描述 本人在帮助中查看到LS的Evaluate函数对应的java函数是evaluate,但是evaluate中不支持@Command,@DbManager,@DbName,@DbTitle,@DDEExecute,@DDEInitiate,@DDEPoke,@DDETerminate,@DialogBox,@PickList,@PostedCommand,@Prompt,and@ViewTitle.函数.现在LS语句如下:Evaluate(|@Name([CN];@DBLookup("&qu

sql-我要写一个java程序,去链接oracle数据库,如果获取链接的时间超过1分钟,就抛出异常,请问怎么实现?

问题描述 我要写一个java程序,去链接oracle数据库,如果获取链接的时间超过1分钟,就抛出异常,请问怎么实现? 我要写一个java程序,去链接oracle数据库,如果获取链接的时间超过1分钟,就抛出异常,请问怎么实现? 解决方案 http://blog.chinaunix.net/uid-20752328-id-3451931.html 这里有一篇文章可以解决你的问题你可以点击进去看看; 如果回答对您有帮助请采纳 解决方案二: 说明数据整理不合理吧 解决方案三: 你应该优化数据库结构,或你

编译-一个java新手在编程路上遇到的问题

问题描述 一个java新手在编程路上遇到的问题 路过的大牛瞄一眼,谢谢...大一学生一枚,java学到网络编译了,最近在实现ftp服务器,目前还没写出来,心情十分郁闷,我觉得自己要成为编程员的随机应变能力还不够,编程路上的困惑,曾经也遇过类似状况求个回复. 解决方案 没什么,大一的时候让我自己去实现一个ftp服务器,我也觉得挺困难的.所以你要上大学啊. 解决方案二: 困惑:坚持.不会:学习.前排 解决方案三: 任何知识都有一个主干,首先要了解基本的原理,然后再学习细节.如果你是自学,一定要注意这

java-求一个Java实现的卡尔曼滤波算法

问题描述 求一个Java实现的卡尔曼滤波算法 现在做一个无线的定位系统,求一个Java实现的卡尔曼滤波算法 解决方案 参考:http://blog.csdn.net/ouyang_linux007/article/details/7563998http://download.csdn.net/detail/daibinok2008/4175968 解决方案二: https://code.google.com/p/efficient-java-matrix-library/wiki/KalmanF