3

我有一个使用 Eclipse Persistence Services - 2.1.1.v20100817-r8050 的 JSF 应用程序,有时会出现以下错误:

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>

这是我编辑的课程 public class 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();
    }
}

}
4

2 回答 2

2

My guess is your database connection has timed out, or your database is down. You may need to retry the query, or re-connect your session.

How have you configured your connection pooling and what database are you using?

于 2012-06-04T14:37:13.763 回答
0

正如 BalusC 在他的评论中指出的那样,也许您的应用服务器无法重新连接到数据库,每次备份完成时都会发生这种情况。

您可以按照Jboss 的此链接中的说明重新连接服务器

于 2019-03-18T14:35:49.957 回答