用一段时间hibernate就抛出这样的异常!

zhaoqiubo 2006-05-24 04:59:16
软件环境:
hibernate3.12+webwork2.2.2+tomcat5.0.28+jdk1.4.2_11+windowsXP
配置文件:
java代码:


<!--<property name="connection.datasource">jdbc/myDataSource</property>-->
<property name="show_sql">true</property>
<property name="use_outer_join">true</property>
<property name="hibernate.jdbc.fetch_size">30</property>
<property name="hibernate.jdbc.batch_size">30</property>
<property name="connection.pool_size">1</property>
<property name="current_session_context_class">thread</property>
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<property name="hibernate.jdbc.use_streams_for_binary">true</property>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@192.168.0.200:1521:ujroa</property>
<property name="connection.username">ujroa</property>
<property name="connection.password">ujroa</property>
<!-- 解决weblogic抛出的ClassNotFoundException: org.hibernate.hql.ast.HqlToken异常-->
<property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>


[/code]
配置文件:
hibernate的HibernateSessionFactory类代码:
java代码:


public class HibernateSessionFactory {

private static final SessionFactory sessionFactory;
static {
try{
sessionFactory=new Configuration().configure().buildSessionFactory();
} catch(Throwable ex){
System.err.println("Initial SessionFactory creation failed. " + ex);
throw new ExceptionInInitializerError(ex);

}
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}

}




DAO基类代码:
java代码:


public abstract class AbstractDAO {

protected Logger log = Logger.getLogger(this.getClass().getName());

protected Session session = null;

protected void openSession() {
session = HibernateSessionFactory.getSessionFactory()
.getCurrentSession();
}

protected void closeSession() {
session.close();
}

protected Object initHibernateObj(Object obj) {
if (!Hibernate.isInitialized(obj))
Hibernate.initialize(obj);
return obj;

}
}





一个插入操作代码:
java代码:


public void insert(SpecialtyDTO dto) throws CustomException {
openSession();
session.beginTransaction();
try {
Specialty spec = new Specialty();
spec.setName(dto.getName().trim());
spec.setMemo(dto.getMemo().trim());
spec.setSubcode(new BigDecimal(dto.getSubCode()));
session.save(spec);
session.getTransaction().commit();
} catch (Exception e) {
log.error(e);
session.getTransaction().rollback();
throw new CustomException(CustomException.DB_INSERT_ERR,
"插入专业类别失败!", e);
}
}



由于插入的时候一进行commit,connection就自动执行了.close()所以最后没有在finally中close。但是在查询的时候,我最后还是close了。
错误提示信息:
java代码:

16:34:31,656 ERROR BasicLazyInitializer:133 - CGLIB Enhancement failed: com.ujroa.common.entity.Addfile
net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:237)
at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
at net.sf.cglib.proxy.Enhancer.createClass(Enhancer.java:317)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:128)
at org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.postInstantiate(CGLIBProxyFactory.java:43)
at org.hibernate.tuple.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:159)
at org.hibernate.tuple.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:131)
at org.hibernate.tuple.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:50)
at org.hibernate.tuple.TuplizerLookup.create(TuplizerLookup.java:64)
at org.hibernate.tuple.EntityMetamodel.<init>(EntityMetamodel.java:256)
at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:418)
at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:108)
at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:218)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1180)
at com.stariversoft.common.db.HibernateSessionFactory.<clinit>(HibernateSessionFactory.java:11)
at com.stariversoft.base.AbstractDAO.openSession(AbstractDAO.java:29)
at com.ujroa.common.busi.CommonDAO.getSysParam(CommonDAO.java:832)
at com.ujroa.common.busi.service.SysParamService.init(SysParamService.java:38)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1029)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4013)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4357)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3043)
at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:4658)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1619)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1628)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1628)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1608)
at java.lang.Thread.run(Thread.java:534)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:384)
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:219)
... 29 more
Caused by: java.lang.OutOfMemoryError



你的分析:
大约一天就出现这样的异常,请高手帮我看看。。分析一下原因,谢谢!
...全文
147 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoqiubo 2006-05-24
  • 打赏
  • 举报
回复
我都说了是commit和rollback自动close的session,你这样代码会有运行错误的。重复close了session的错误。
onlyxu 2006-05-24
  • 打赏
  • 举报
回复
public void insert(SpecialtyDTO dto) throws CustomException {
openSession();
session.beginTransaction();
try {
Specialty spec = new Specialty();
spec.setName(dto.getName().trim());
spec.setMemo(dto.getMemo().trim());
spec.setSubcode(new BigDecimal(dto.getSubCode()));
session.save(spec);
session.getTransaction().commit();
} catch (Exception e) {
log.error(e);
session.getTransaction().rollback();
throw new CustomException(CustomException.DB_INSERT_ERR,
"插入专业类别失败!", e);
}
finally{closeSession();}
}

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧