首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >内部异常: java.sql.SQLException:无效状态,连接对象关闭

内部异常: java.sql.SQLException:无效状态,连接对象关闭
EN

Stack Overflow用户
提问于 2012-06-01 06:39:47
回答 2查看 24.3K关注 0票数 3

我有一个JSF应用程序,它使用2.1.v20100817-r8050,有时我会遇到以下错误:

代码语言:javascript
运行
复制
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")

我不知道是什么引起的。异常将在“返回q.getResultList();”行的以下函数中抛出。

代码语言:javascript
运行
复制
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();
    }
}

我们有Server 2005,而且数据库没有关闭。这是最近才不断发生的事情。下面是我们在persistence.xml文件中设置的属性。对于这方面应该改变什么,有什么意见吗?

代码语言:javascript
运行
复制
<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 {

代码语言:javascript
运行
复制
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();
    }
}

}
EN

回答 2

Stack Overflow用户

发布于 2012-06-04 14:37:13

我猜您的数据库连接已超时,或者您的数据库已关闭。您可能需要重试查询,或者重新连接会话。

您是如何配置连接池的?您使用的是哪个数据库?

票数 2
EN

Stack Overflow用户

发布于 2019-03-18 14:35:49

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

您可以像this link for Jboss中指出的那样使服务器重新连接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10845545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档