3

これは古い質問のはずですが、私はたくさん検索しましたが、何も役に立ちませんでした。私の主な問題は、接続が失われると、私の 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>

スイングとem同じスレッドにありem、データを取得できないため、スイングが待機しemてフリーズします。

4

1 に答える 1

0

アプリケーションはどこでハングしますか? プロセスを中断またはデバッグして、スタック ダンプを取得してください。

クエリでハングする場合は、クエリのタイムアウトを設定すると役立つ場合があります。

JDBC ドライバーでハングしている可能性が高く、JPA にできることは何もありません。ハングを防止するための設定が JDBC ドライバーにあるかどうかを確認してください。

于 2012-07-31T14:11:39.350 に答える