Java EE 6の新機能です。この質問に対する回答が明らかな場合はお詫び申し上げます。私は、データベースからSolrインデックスを再構築するために1時間ごとに実行する必要があるタスクがあります。また、アプリケーションのデプロイ時に再構築が必要になる。これが動作しなければならないことである私の本能は:Java EE 6(接続の有効期間)でスケジュールされたデータベースのメンテナンス
@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を使用しています。myBatisはJava EEのライフサイクルをあまり知らないと思います。
@Singleton
を使用すると接続が解放されないようですが、@Stateless
beanに@Startup
を入れても意味がありますか? - リビルドはシングルトンである必要がありますか?それが最初の再構築を処理するために
@PostConstruct
を使用できなかったかのように思えるか、毎時2回再構築されます。
ここに進む方法はわかりません。御時間ありがとうございます。
いいえ、myBatisはJPA互換のORMではありません。 SpringとGuideの統合ライブラリはありますが、Java EEはありません。 –
トランザクションを手動で管理するには、sessionFactoryをシングルトンに公開する必要があります。他の解決策は、バネ管理されたトランザクションを使用するか、myBatisの代わりにJPA実装に切り替えることです。 – Gab
JPAでない場合、少なくともコンテナ管理のトランザクションを使用する方法でmyBatisを包括するにはどうすればよいですか?私はSpringのデプロイやJPAへの切り替えには興味がありません。私がしなければならないが、私はまだ彼らがコンテナ管理されていると思いますマニュアル取引を受け入れるよ。 –