View Javadoc

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  	 * This job needs a SessionFactory to provide a Session, which
19  	 * can be use to do all Dao-transactions in
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  		//Get Dao and SessionFactory from the context
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  		//Go (re)create an index!
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  }