我有一个使用Eclipse Persistence Services的JSF应用程序 - 2.1.1.v20100817-r8050,我有时会收到以下错误:
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 :(得分:3)
我的猜测是您的数据库连接已超时,或者您的数据库已关闭。 您可能需要重试查询,或重新连接会话。
您是如何配置连接池以及您使用的数据库的?
答案 1 :(得分:0)
正如BalusC在他的评论中指出的那样,也许您的应用服务器无法重新连接到数据库,这种情况在每次备份完成后都会发生。
您可以按照this link for Jboss
中的指示重新连接服务器