2012-06-01 57 views
3

我有一個使用的Eclipse持久性服務JSF應用程序 - 2.1.1.v20100817-r8050,和我有時會收到以下錯誤:內部異常:值java.sql.SQLException:無效狀態,連接對象被關閉

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.DatabaseException 
Internal Exception: java.sql.SQLException: Invalid state, the Connection object is closed. 
Error Code: 0 
Call: SELECT XXXXX FROM XXXXX 
bind => [/Home/Footer/] 
Query: ReadAllQuery(name="WWW.find" referenceClass=WWW sql="SELECT XXXXX FROM XXXXX") 

我不知道是什麼導致它。以下函數在「return q.getResultList();」中引發異常線。

public List<WWW> find(String url) { 
    } 
    EntityManager em = getEntityManager(); 
    try { 
     Query q = em.createNamedQuery("WWW.find"); 
     q.setParameter("url", url); 
     return q.getResultList(); 
    } finally { 
     em.close(); 
    } 
} 

我們有SQL Server 2005和數據庫不下來。這是最近持續發生的事情。以下是我們在persistence.xml文件中設置的屬性。對此應該改變的任何評論?

<properties> 
    <property name="javax.persistence.jdbc.password" value="password"/> 
    <property name="javax.persistence.jdbc.user" value="user"/> 
    <property name="javax.persistence.jdbc.driver" value="net.sourceforge.jtds.jdbc.Driver"/> 
    <property name="javax.persistence.jdbc.url" value="jdbc:jtds:sqlserver://SERVER:1433/DB"/> 
    <property name="eclipselink.ddl-generation" value="none"/> 
    <property name="eclipselink.jdbc.timeout" value="20"/> 
    <property name="eclipselink.jdbc.connections.wait-timeout" value="20"/> 
    <property name="javax.persistence.query.timeout" value="20"/> 
    <property name="eclipselink.allow-zero-id" value="true"/> 
</properties> 

這裏是我的編輯類 公共類WWWJpaController {

public WWWWJpaController() { 
    emf = Persistence.createEntityManagerFactory("properties"); 
} 

public WWWWJpaController(String unitName) { 
    emf = Persistence.createEntityManagerFactory(unitName); 
} 

private EntityManagerFactory emf = null; 

public EntityManager getEntityManager() { 
    return emf.createEntityManager(); 
} 

public List<WWW> find(String url) { 
    EntityManager em = getEntityManager(); 
    try { 
     Query q = em.createNamedQuery("WWW.find"); 
     q.setParameter("url", url); 
     return q.getResultList(); 
    }finally{ 
     em.close(); 
    } 
} 

} 
+0

顯示你的'getEntityManager()'。順便說一句:爲什麼你不使用'@ PersistenceContext'?這樣你就不必自己創建/關閉它。 – BalusC

+0

添加了我的getEntityManager()。你有任何使用@PersistenceContext的例子的鏈接?我從來沒有使用過。 – user1024941

+0

@BalusC。我剛剛發現,當我們的服務器備份完成時會發生這些問題。我們正在虛擬服務器上運行,當該服務器備份時,它將進入「保存模式」。這會有什麼影響嗎? – user1024941

回答

3

我的猜測是您的數據庫連接超時,或者您的數據庫已關閉。 您可能需要重試查詢,或重新連接會話。

你是如何配置連接池和使用哪個數據庫的?

相關問題