这应该是一个老问题,但我搜索了很多,没有发现任何有用的东西。 我的主要问题是当连接丢失时,我的Java swing应用程序会冻结。必须存在连接超时,以便应用程序通知用户。
这真的是EclipseLink中的一个弱点,或者这是我无法弄清楚的事情吗?
编辑:以下是我通过EclipseLink连接的方式:
private static javax.persistence.EntityManager em = null;
public static javax.persistence.EntityManager getEntityManager()
{
if (em == null || !em.isOpen())
{
try
{
em = Persistence
.createEntityManagerFactory("persistenceUnitName", getPersistenceConfig()).createEntityManager();
} catch (Exception e)
{
//log
}
}
return em;
}
这是我的persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="persistenceUnitName" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>org.entities.MyEntity</class>
<shared-cache-mode>NONE</shared-cache-mode>
<validation-mode>NONE</validation-mode>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
</properties>
swing和em
位于同一个帖子中,em
无法检索数据,因此挥杆等待em
并冻结。
答案 0 :(得分:0)
您的申请在哪里挂起?请中断或调试进程并获取堆栈转储。
如果它挂起在查询上,您可以设置可能有帮助的查询超时。
最有可能挂在JDBC驱动程序上,JPA无法做到。检查JDBC驱动程序中是否有任何设置以防止挂起。