createStoredProcedureQuery永远阻止

时间:2016-02-10 16:22:26

标签: hibernate java-ee derby hibernate-entitymanager

我一直在尝试从Glassfish上运行的Java EE应用程序中创建derby数据库的备份。我试图使用StoredProcedureQueries来实现这一点,它可以在下面的方法中正常工作。

public Backup doBackup(String path) throws QueryTimeoutException { 
    StoredProcedureQuery query = em.createStoredProcedureQuery(
            "SYSCS_UTIL.SYSCS_BACKUP_DATABASE");
    query.registerStoredProcedureParameter(1, java.lang.String.class,
            ParameterMode.IN);
    query.setParameter(1, path);
    query.execute();
}

但是我也想像cronjob一样自动创建备份。为此,我想我只是使用每n小时执行一次的ScheduledExecuterService。我为此写了以下方法:

public void startScheduledBackupRunner() {
    long delay = 1;

    Runnable backupRunner = () -> {
        try {
            doBackup("/foo/bar/");
        } catch (PersistenceException e) {
            logger.fatal(e);
        }
    };

    ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
    scheduler.scheduleAtFixedRate(backupRunner, delay, delay, TimeUnit.HOURS);
}

backupRunner线程成功执行,它还调用doBackup()方法。但是在调用createStoredProcedureQuery()时似乎卡住了。如果重要的话我注入了EntityManager em:

@PersistenceContext
EntityManager em;

我错过了重要的事情吗?任何线索都非常感谢。

1 个答案:

答案 0 :(得分:0)

好的,所以我找到了一个解决方案,它不涉及使用@Schedule注释创建单独的线程。它没有解决潜在的问题,我仍然不知道为什么第一种方法不起作用,它只是另一种可能更优雅的方式来执行计划任务。