2011-03-13 89 views
2

如何修改Eclipselink JPA 2.0连接重试行为。 Eclipselink会在每次检测到连接失败时自动尝试将其自身重新连接到数据库,这会导致摆动ui在连接到数据库之前没有任何响应而冻结。 是否有任何解决方案来修改此行为 即是连接失败时不重试 请在这个问题上 我有巨大的问题,面临着帮助它可能引发异常。如何修改Eclipselink JPA 2.0连接重试行为

我去了throe eclipselink源代码和谷歌,但我找不到任何解决方案。

回答

4

使用SessionCustomizer可以禁用连接重新连接。

package acme; 
import org.eclipse.persistence.internal.sessions.factories.SessionCustomizer; 
import org.eclipse.persistence.sessions.Session; 
import org.eclipse.persistence.sessions.DatabaseLogin; 

public class EmployeeSessionCustomizer implements SessionCustomizer { 

    public void customize(Sesssion session) { 
     DatabaseLogin login = (DatabaseLogin)session.getDatasourceLogin(); 
     login.setConnectionHealthValidationOnError(false); 
    } 
} 

此定制可通过持久性单元属性

<property name="eclipselink.session.customizer" value="acme.EmployeeSessionCustomizer"/> 
+0

感谢来设置。如何关于login.setQueryRetryAttemptCount(0); – jawath 2011-03-16 04:26:09

+0

上面也冻结了约2秒的gui!任何进一步的改进都可以完成 – jawath 2011-03-16 04:30:09

+0

当gui冻结时需要堆栈转储。 gui有可能被冻结,因为它是针对持久性单元运行的,而持久性单元正在试图连接到数据库?如果是这种情况,那么您将需要解决连接延迟问题,或者有一个线程用于gui,另一个线程用于持久性工作。或者至少有一个单独的线程监视数据库连接,并在数据库连接之前不允许持续调用。 – 2011-04-07 13:14:50