【问题标题】:How To modify Eclipselink JPA 2.0 connection retry behavior如何修改 Eclipselink JPA 2.0 连接重试行为
【发布时间】:2011-07-14 10:18:10
【问题描述】:

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

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

【问题讨论】:

    标签: jpa connection eclipselink reconnect


    【解决方案1】:

    使用 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"/>
    

    【讨论】:

    • 以上也冻结了 gui 大约 2 秒!任何进一步的改进都可以完成
    • 当 gui 冻结时进行堆栈转储。 gui是否可能因为它正在针对持久性单元进行操作并且持久性单元正在尝试连接到数据库而被冻结?如果是这种情况,那么您将需要解决连接延迟问题,或者让一个线程用于 gui,另一个线程用于持久性工作。或者至少有一个单独的线程来监控数据库连接并在数据库连接之前不允许持久性调用。
    猜你喜欢
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 2011-08-24
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多