gpt4 book ai didi

ejb - 使用 Java EE 6 进行计划数据库维护(连接生命周期)

转载 作者:行者123 更新时间:2023-12-04 13:38:13 25 4
gpt4 key购买 nike

我是 Java EE 6 的新手,所以如果这个问题的答案很明显,我深表歉意。我有一项必须每小时运行一次才能从数据库重建 Solr 索引的任务。我还希望在部署应用程序时进行重建。我的直觉是这应该有效:

@Singleton
@Startup
public class Rebuilder {
@Inject private ProposalDao proposalDao;
@Inject private SolrServer solrServer;

@Schedule(hour="*", minute="0", second="0")
public void rebuildIndex() {
// do the rebuild here
}
}

由于我使用的是 myBatis,所以我写了这个生产者:
public class ProposalSessionProvider {
private static final String CONFIGURATION_FILE = "...";

static {
try {
sessFactory = new SqlSessionFactoryBuilder().build(
Resources.getResourceAsReader(CONFIGURATION_FILE));
}
catch (IOException ex) {
throw new RuntimeException("Error configuring MyBatis: " + ex.getMessage(), ex);
}
}

@Produces
public ProposalsDao openSession() {
log.info("Connecting to the database");
session = sessFactory.openSession();
return session.getMapper(ProposalsDao.class);
}
}

所以我有三个顾虑:
  • 在部署时触发重建的合适方法是什么?一个 @PostConstruct方法?
  • 谁负责关闭数据库连接,这应该如何发生?我正在使用 myBatis,我相信它对 Java EE 生命周期一无所知。好像我使用 @Singleton连接永远不会被释放,但放置 @Startup 甚至有意义吗?在 @Stateless bean 角,扁 bean ?
  • Rebuilder 是否应该是单例?如果不是,我似乎无法使用 @PostConstruct处理初始重建,否则我每小时都会进行两次重建。

  • 我不确定如何继续这里。谢谢你的时间。

    最佳答案

    我不知道 myBatis 但我可以告诉你 @Schedule 工作是事务性的。无论如何,我不确定 JTA 托管事务是否会根据您检索 session 的方式在此处应用。没有办法在 MyBatis 中检索 persistenceContext 吗?对于触发器部分,恕我直言@Startup 将正确完成工作,因此需要一个单例 bean。无论如何,我无法告诉您您提出的两种方法中哪一种是最好的。

    关于ejb - 使用 Java EE 6 进行计划数据库维护(连接生命周期),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15167598/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com