【问题标题】:EclipseLink Connection TimeoutEclipseLink 连接超时
【发布时间】:2012-07-27 22:29:11
【问题描述】:

这应该是一个老问题,但我搜索了很多,没有发现任何有用的东西。 我的主要问题是当连接丢失时,我的 Java swing 应用程序会冻结。必须有一个连接超时,以便应用程序通知用户。

我尝试了thisthis,但它们没有帮助。

这真的是 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无法检索数据,所以swing在等待em而死机。

【问题讨论】:

  • 您能否进行线程转储并显示应用程序“冻结”时正在执行的操作?还显示您如何配置 EclipseLink 连接。
  • @Chris 当应用程序尝试从 db 检索数据时,它会因为连接丢失而冻结。我已经在我的问题中显示了我的连接配置

标签: java eclipselink


【解决方案1】:

您的应用程序挂在哪里?请中断或调试进程并获取堆栈转储。

如果它挂在查询上,您可以设置查询超时,这可能会有所帮助。

它很可能挂在 JDBC 驱动程序上,JPA 无能为力。检查您的 JDBC 驱动程序中是否有任何设置以防止挂起。

【讨论】:

    猜你喜欢
    • 2012-08-26
    • 2012-01-11
    • 2013-02-13
    • 1970-01-01
    • 2022-01-21
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多