KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > jforum > util > search > quartz > QuartzSearchIndexerJob


1 /*
2  * Copyright (c) Rafael Steil
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms,
6  * with or without modification, are permitted provided
7  * that the following conditions are met:
8  *
9  * 1) Redistributions of source code must retain the above
10  * copyright notice, this list of conditions and the
11  * following disclaimer.
12  * 2) Redistributions in binary form must reproduce the
13  * above copyright notice, this list of conditions and
14  * the following disclaimer in the documentation and/or
15  * other materials provided with the distribution.
16  * 3) Neither the name of "Rafael Steil" nor
17  * the names of its contributors may be used to endorse
18  * or promote products derived from this software without
19  * specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
22  * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
23  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
24  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
27  * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
29  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
32  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
34  * IN CONTRACT, STRICT LIABILITY, OR TORT
35  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
36  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
37  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
38  *
39  * Created on Mar 11, 2005 2:32:25 PM
40  * The JForum Project
41  * http://www.jforum.net
42  */

43 package net.jforum.util.search.quartz;
44
45 import java.io.FileInputStream JavaDoc;
46 import java.sql.Connection JavaDoc;
47 import java.util.Properties JavaDoc;
48
49 import net.jforum.DBConnection;
50 import net.jforum.cache.CacheEngine;
51 import net.jforum.cache.Cacheable;
52 import net.jforum.dao.DataAccessDriver;
53 import net.jforum.dao.ScheduledSearchIndexerDAO;
54 import net.jforum.util.preferences.ConfigKeys;
55 import net.jforum.util.preferences.SystemGlobals;
56
57 import org.apache.log4j.Logger;
58 import org.quartz.Job;
59 import org.quartz.JobExecutionContext;
60 import org.quartz.JobExecutionException;
61
62 /**
63  * @author Rafael Steil
64  * @version $Id: QuartzSearchIndexerJob.java,v 1.8 2005/10/27 21:34:45 jakefear Exp $
65  */

66 public class QuartzSearchIndexerJob implements Job, Cacheable
67 {
68     private static final String JavaDoc FQN = "quartz";
69     private static final String JavaDoc INDEXING = "indexing";
70     private static Logger logger = Logger.getLogger(QuartzSearchIndexerJob.class);
71     private static CacheEngine cache;
72     
73     /**
74      * @see net.jforum.cache.Cacheable#setCacheEngine(net.jforum.cache.CacheEngine)
75      */

76     public void setCacheEngine(CacheEngine engine)
77     {
78         cache = engine;
79     }
80     
81     /**
82      * @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
83      */

84     public void execute(JobExecutionContext context) throws JobExecutionException
85     {
86         if ("1".equals(cache.get(FQN, INDEXING))) {
87             logger.info("Indexing is already running. Going home...");
88             return;
89         }
90         
91         Properties JavaDoc p = this.loadConfig();
92         
93         if (p == null) {
94             return;
95         }
96         
97         int step = Integer.parseInt(p.getProperty(ConfigKeys.QUARTZ_CONTEXT + ConfigKeys.SEARCH_INDEXER_STEP));
98         
99         Connection JavaDoc conn = null;
100         boolean autoCommit = false;
101         
102         try {
103             conn = DBConnection.getImplementation().getConnection();
104             autoCommit = conn.getAutoCommit();
105             conn.setAutoCommit(true);
106             
107             cache.add(FQN, INDEXING, "1");
108             
109             ScheduledSearchIndexerDAO dao = DataAccessDriver.getInstance().newScheduledSearchIndexerDAO();
110             dao.index(step, conn);
111         }
112         catch (Exception JavaDoc e) {
113             logger.error("Error while trying to index messages. Cannot proceed. " + e);
114             e.printStackTrace();
115         }
116         finally {
117             cache.remove(FQN, INDEXING);
118             
119             if (conn != null) {
120                 try { conn.setAutoCommit(autoCommit); } catch (Exception JavaDoc e) {}
121                 DBConnection.getImplementation().releaseConnection(conn);
122             }
123         }
124     }
125     
126     private Properties JavaDoc loadConfig()
127     {
128         String JavaDoc filename = SystemGlobals.getValue(ConfigKeys.SEARCH_INDEXER_QUARTZ_CONFIG);
129         
130         try {
131             Properties JavaDoc p = new Properties JavaDoc();
132             p.load(new FileInputStream JavaDoc(filename));
133
134             return p;
135         }
136         catch (Exception JavaDoc e) {
137             logger.warn("Failed to load " + filename + ": " + e, e);
138             return null;
139         }
140     }
141 }
142
Popular Tags