私は Java EE 6 を初めて使用するので、この質問に対する答えが明らかである場合は申し訳ありません。データベースから Solr インデックスを再構築するために、1 時間ごとに実行する必要があるタスクがあります。また、アプリのデプロイ時に再構築が行われるようにしたいと考えています。私の本能は、これがうまくいくはずだということです:
@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);
}
}
だから私は3つの懸念があります:
- 展開時に再構築をトリガーする適切な方法は何ですか? メソッド
@PostConstruct
? - データベース接続を閉じるのは誰の責任で、どのように行うべきですか? 私は myBatis を使用していますが、これは Java EE ライフサイクルについてかなり無知だと思います。使ったら繋がらなくなりそうな気もするけど、まめ
@Singleton
をつけても意味あるのかな?@Startup
@Stateless
- Rebuilder はシングルトンである必要がありますか? そうでない場合
@PostConstruct
、最初の再構築を処理するために使用できなかったか、1 時間ごとに 2 回再構築が行われるようです。
ここでどのように進めればよいかよくわかりません。御時間ありがとうございます。