我现在做的一个项目是struts+hibernate架构的
在大数据量检索时会出现out of memory的error我想捕获这经error
以下是代码
[code="java"]
try{
session = DBConnection.getSession();//Obtaining hibernate session
//run this query and populate the query list
search_DB = "select * from commonlogs";
query = session.createQuery(search_DB);
for(int i =0; i< params.length; i++)
{
if(params[i]==null)
break;
query.setString(i, params[i]);
}
query.setMaxResults(fetchSize);
[color=red]returnValue = query.list();[/color]
}
catch(MyException ex){
throw ex;
}
catch(Exception ex){
throw new MyException (ErrorCodes.SQLEXCEPTION,ex);
}
//start add by sunwei 2009/03/05
catch (Throwable e) {
logger.writeError(ErrorCodes.NONSPECIFIEDEXCEPTION, ResourceAccess.getErrorMessage(ErrorCodes.NONSPECIFIEDEXCEPTION), e);
throw new MyException (ErrorCodes.NONSPECIFIEDEXCEPTION,new Exception(e.toString()));//也是输出log
}
//end add by sunwei 2009/03/05
finally{
try
{
DBConnection.releaseResources(session);//Closing session
}
catch(MyException ex){
throw ex;
}
}
[/code]
上一层捕获MyException的话,会跳转到GlobalErrors.jsp(错误页面)
[color=red]returnValue = query.list();[/color]执行时会out of memory
struts-config.xml
[code="java"]
key="key.excepion"
type="javax.servlet.ServletException"
path="/jsp/GlobalErrors.jsp"/>
<exception
key="key.excepion"
type="java.lang.NullPointerException"
path="/jsp/GlobalErrors.jsp"/>
<exception
key="key.excepion"
type="java.lang.Exception"
path="/jsp/GlobalErrors.jsp"/>
[/code]
不能输出log,但会跳转到GlobalErrors.jsp(错误页面)
我用的log机制是log4j,其它异常(比如数据库连接失败等)都会输出log,就是out of memory不能.
谁能帮我看看是什么原因.
[b]问题补充:[/b]
谢谢大家的回答!
调高JVM的内在确实可以减少out of memory的发生,这个我以前调查过.
我说一下这个程序发生out of memory原因:主要是一次从数据库中检索出100万条记录造成的,我也不想这样做查询的,但是程序已经是不能改了,只想知道原因.
既然throwable不能捕获out of memory这个error,那什么程序又可以跳转到GlobalErrors.jsp(错误页面) 呢?能不能帮我分析一下.已经加分了.
[b]问题补充:[/b]
为什么程序又可以跳转到GlobalErrors.jsp(错误页面) 呢?