2010-10-27 58 views
0

我遇到来自Tomcat的OutOfMemory错误。自从我将Hibernate添加到应用程序后,这个错误就开始了。 我没有使用Spring,所以我为Hibernate会话做了所有的打开/关闭操作。Tomcat 5.5 OutOfMemory错误使用休眠

下面是我正在使用的一些Hibernate配置。我在Java代码中创建了我的SessionFactory。

hibernate.current_session_context_class=thread 
hibernate.connection.jndi.datasource=jdbc/dataSource 

我创建了我自己的HibernateUtil类来检索/保存数据。要初始化这个,我只需调用MyHibernateUtil.initialize()并创建SessionFactory。

这是带有一个Servlet的基本应用程序。在添加Hibernate之前,这不是一个问题。我也从下面使用MyHibernateUtil.closeSession()关闭会话。

任何人都面对使用Tomcat和Hibernate的Tomcat OutOfMemory问题?

public class MyHibernateUtil{ 
    public static SessionFactory factory = null; 
    public static AnnotationConfiguration aConfigure = new AnnotationConfiguration(); 

    private static AnnotationConfiguration configure(){ 
    //Add my annotated classes here 
    ... 
    return aConfigure; 
    } 
    public static initialize(){ 
    Configuration configure = MyHibernateUtil.configure(); 
    //I add my Hibernate configuration stuff here. 
    factory = configure.buildSessionFactory(); 

    } 

    public static Session getSession(){ 
     Session hibernateSession = factory.getCurrentSession(); 
     return hibernateSession; 
    } 

    public static void closeSession(){ 
     MyHibernateUtil.getSession().close(); 
    } 

    public static Session beginTransaction() { 
     Session hibernateSession; 
     hibernateSession = MyHibernateUtil.getSession(); 
     hibernateSession.beginTransaction(); 
     return hibernateSession; 
    } 

    public static void commitTransaction() { 
     MyHibernateUtil.getSession().getTransaction().commit(); 
    } 

} 
+0

您甚至不需要手动关闭会话,因为您正在使用'getCurrentSession',它会在事务结束时(提交或回滚)关闭。 – 2010-10-27 15:06:22

+0

但是,当我只做一个简单的SELECT使用org.hibernate.Criteria说......“criteria.list();”这只会刷新会话,不提交,更正?在这种情况下,我仍然需要手动关闭会话吗? – Marquinio 2010-10-27 19:57:30

回答

1

那么,也许你的记忆是不足以加载一切。通过将-Xmx256m-XX:MaxPermSize=128m添加到CATALINA_OPTS变量中,在catalina.sh中增加它。 (我的号码是任意选择的)。 (您也可以使用-Xms设置初始值)

+0

是的,我正在试试这个。谢谢。 – Marquinio 2010-10-27 19:58:39