1 package org.musicontroller.core.jobs;
2
3 import org.apache.log4j.Logger;
4 import org.hibernate.Session;
5 import org.hibernate.SessionFactory;
6 import org.musicontroller.core.searching.Indexer;
7 import org.musicontroller.dao.Dao;
8 import org.quartz.JobExecutionContext;
9 import org.quartz.JobExecutionException;
10 import org.springframework.orm.hibernate3.SessionHolder;
11 import org.springframework.scheduling.quartz.QuartzJobBean;
12 import org.springframework.transaction.support.TransactionSynchronizationManager;
13
14 public class IndexJob extends QuartzJobBean{
15 private static final Logger log = Logger.getLogger(IndexJob.class);
16
17
18
19
20
21 private SessionFactory _sessionFactory;
22 private Dao _dao;
23
24 @Override
25 protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
26 log.debug("IndexJob started");
27
28
29 if(context.getJobDetail().getJobDataMap().containsKey("dao")) {
30 _dao = (Dao) context.getJobDetail().getJobDataMap().get("dao");
31 }
32 if(context.getJobDetail().getJobDataMap().containsKey("sessionFactory")) {
33 _sessionFactory = (SessionFactory) context.getJobDetail().getJobDataMap().get("sessionFactory");
34 }
35
36
37 execute();
38
39 log.debug("IndexJob finished");
40 }
41
42 private void execute() {
43 Session session = null;
44 try {
45 session = _sessionFactory.openSession();
46 TransactionSynchronizationManager.bindResource(_sessionFactory, new SessionHolder(session));
47
48 Indexer indexer = new Indexer(_dao);
49 indexer.reindexAll();
50 } catch (Exception e){
51 log.error("Error while (re)creating the search-index: "+e);
52 }
53 session.close();
54 TransactionSynchronizationManager.unbindResource(_sessionFactory);
55 }
56
57 }