2010-10-27 56 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