1 40 package com.mvnforum.search.post; 41 42 import java.io.IOException ; 43 import java.util.*; 44 45 import com.mvnforum.MVNForumConfig; 46 import com.mvnforum.db.DAOFactory; 47 import com.mvnforum.db.PostBean; 48 49 import net.myvietnam.mvncore.exception.SearchException; 50 51 import org.apache.commons.logging.Log; 52 import org.apache.commons.logging.LogFactory; 53 import org.apache.lucene.index.IndexWriter; 54 import org.apache.lucene.store.Directory; 55 56 59 public class UpdateThreadTask extends TimerTask 60 { 61 private static Log log = LogFactory.getLog(UpdateThreadTask.class); 62 63 private int threadID = 0; 64 65 68 UpdateThreadTask(int threadID) { 69 this.threadID = threadID; 70 } 71 72 75 public void run() { 76 long start = System.currentTimeMillis(); 77 78 Collection posts = null; 79 try { 80 posts = DAOFactory.getPostDAO().getEnablePosts_inThread_limit(threadID, 0, 10000); 82 } catch (Exception ex) { 83 log.error("UpdateThreadTask.run : cannot get all posts from a thread (" + threadID + ") for indexing", ex); 84 } 85 86 if (posts == null) return; 87 88 try { 90 PostIndexer.deleteThreadFromIndex(threadID); 91 } catch (SearchException e) { 92 log.error("Cannot delete thread from lucene index.", e); 93 log.info("UpdateThreadTask failed. Took " + (System.currentTimeMillis() - start) + " ms"); 95 return; 96 } 97 98 Directory directory = null; 100 IndexWriter writer = null; 101 try { 102 directory = MVNForumConfig.getSearchPostIndexDir(); 103 writer = PostIndexer.getIndexWriter(directory, false); 104 105 int i = 0; 106 for (Iterator iter = posts.iterator(); iter.hasNext(); ) { 107 PostBean post = (PostBean) iter.next(); 108 PostIndexer.doIndexPost(post, writer); 109 i++; 110 } 111 writer.optimize(); 112 log.info("Updating thread finished successfully! " + i + " post(s) indexed."); 113 } catch (Exception e) { 114 log.error("Error while updating thread.", e); 115 } finally { 116 if (writer != null) { 117 try { 118 writer.close(); 119 } catch (IOException e) { 120 log.debug("Error closing Lucene IndexWriter", e); 121 } 122 } 123 if (directory != null) { 124 try { 125 directory.close(); 126 } catch (IOException e) { 127 log.debug("Cannot close directory.", e); 128 } 129 } 130 } 131 log.info("UpdateThreadTask took " + (System.currentTimeMillis() - start) + " ms"); 132 } 133 } 134 | Popular Tags |