Added: 
websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/search.js
==============================================================================
--- 
websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/search.js 
(added)
+++ 
websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/search.js 
Wed Aug  4 08:28:04 2021
@@ -0,0 +1,326 @@
+/*
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+var noResult = {l: "No results found"};
+var catModules = "Modules";
+var catPackages = "Packages";
+var catTypes = "Types";
+var catMembers = "Members";
+var catSearchTags = "SearchTags";
+var highlight = "<span class=\"resultHighlight\">$&</span>";
+var camelCaseRegexp = "";
+var secondaryMatcher = "";
+function getHighlightedText(item) {
+    var ccMatcher = new RegExp(camelCaseRegexp);
+    var label = item.replace(ccMatcher, highlight);
+    if (label === item) {
+        label = item.replace(secondaryMatcher, highlight);
+    }
+    return label;
+}
+function getURLPrefix(ui) {
+    var urlPrefix="";
+    if (useModuleDirectories) {
+        var slash = "/";
+        if (ui.item.category === catModules) {
+            return ui.item.l + slash;
+        } else if (ui.item.category === catPackages && ui.item.m) {
+            return ui.item.m + slash;
+        } else if ((ui.item.category === catTypes && ui.item.p) || 
ui.item.category === catMembers) {
+            $.each(packageSearchIndex, function(index, item) {
+                if (ui.item.p == item.l) {
+                    urlPrefix = item.m + slash;
+                }
+            });
+            return urlPrefix;
+        } else {
+            return urlPrefix;
+        }
+    }
+    return urlPrefix;
+}
+var watermark = 'Search';
+$(function() {
+    $("#search").val('');
+    $("#search").prop("disabled", false);
+    $("#reset").prop("disabled", false);
+    $("#search").val(watermark).addClass('watermark');
+    $("#search").blur(function() {
+        if ($(this).val().length == 0) {
+            $(this).val(watermark).addClass('watermark');
+        }
+    });
+    $("#search").on('click keydown', function() {
+        if ($(this).val() == watermark) {
+            $(this).val('').removeClass('watermark');
+        }
+    });
+    $("#reset").click(function() {
+        $("#search").val('');
+        $("#search").focus();
+    });
+    $("#search").focus();
+    $("#search")[0].setSelectionRange(0, 0);
+});
+$.widget("custom.catcomplete", $.ui.autocomplete, {
+    _create: function() {
+        this._super();
+        this.widget().menu("option", "items", "> 
:not(.ui-autocomplete-category)");
+    },
+    _renderMenu: function(ul, items) {
+        var rMenu = this,
+                currentCategory = "";
+        rMenu.menu.bindings = $();
+        $.each(items, function(index, item) {
+            var li;
+            if (item.l !== noResult.l && item.category !== currentCategory) {
+                ul.append("<li class=\"ui-autocomplete-category\">" + 
item.category + "</li>");
+                currentCategory = item.category;
+            }
+            li = rMenu._renderItemData(ul, item);
+            if (item.category) {
+                li.attr("aria-label", item.category + " : " + item.l);
+                li.attr("class", "resultItem");
+            } else {
+                li.attr("aria-label", item.l);
+                li.attr("class", "resultItem");
+            }
+        });
+    },
+    _renderItem: function(ul, item) {
+        var label = "";
+        if (item.category === catModules) {
+            label = getHighlightedText(item.l);
+        } else if (item.category === catPackages) {
+            label = (item.m)
+                    ? getHighlightedText(item.m + "/" + item.l)
+                    : getHighlightedText(item.l);
+        } else if (item.category === catTypes) {
+            label = (item.p)
+                    ? getHighlightedText(item.p + "." + item.l)
+                    : getHighlightedText(item.l);
+        } else if (item.category === catMembers) {
+            label = getHighlightedText(item.p + "." + (item.c + "." + item.l));
+        } else if (item.category === catSearchTags) {
+            label = getHighlightedText(item.l);
+        } else {
+            label = item.l;
+        }
+        var li = $("<li/>").appendTo(ul);
+        var div = $("<div/>").appendTo(li);
+        if (item.category === catSearchTags) {
+            if (item.d) {
+                div.html(label + "<span class=\"searchTagHolderResult\"> (" + 
item.h + ")</span><br><span class=\"searchTagDescResult\">"
+                                + item.d + "</span><br>");
+            } else {
+                div.html(label + "<span class=\"searchTagHolderResult\"> (" + 
item.h + ")</span>");
+            }
+        } else {
+            div.html(label);
+        }
+        return li;
+    }
+});
+$(function() {
+    $("#search").catcomplete({
+        minLength: 1,
+        delay: 100,
+        source: function(request, response) {
+            var result = new Array();
+            var presult = new Array();
+            var tresult = new Array();
+            var mresult = new Array();
+            var tgresult = new Array();
+            var secondaryresult = new Array();
+            var displayCount = 0;
+            var exactMatcher = new RegExp("^" + 
$.ui.autocomplete.escapeRegex(request.term) + "$", "i");
+            camelCaseRegexp = 
($.ui.autocomplete.escapeRegex(request.term)).split(/(?=[A-Z])/).join("([a-z0-9_$]*?)");
+            var camelCaseMatcher = new RegExp("^" + camelCaseRegexp);
+            secondaryMatcher = new 
RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
+
+            // Return the nested innermost name from the specified object
+            function nestedName(e) {
+                return e.l.substring(e.l.lastIndexOf(".") + 1);
+            }
+
+            function concatResults(a1, a2) {
+                a1 = a1.concat(a2);
+                a2.length = 0;
+                return a1;
+            }
+
+            if (moduleSearchIndex) {
+                var mdleCount = 0;
+                $.each(moduleSearchIndex, function(index, item) {
+                    item.category = catModules;
+                    if (exactMatcher.test(item.l)) {
+                        result.push(item);
+                        mdleCount++;
+                    } else if (camelCaseMatcher.test(item.l)) {
+                        result.push(item);
+                    } else if (secondaryMatcher.test(item.l)) {
+                        secondaryresult.push(item);
+                    }
+                });
+                displayCount = mdleCount;
+                result = concatResults(result, secondaryresult);
+            }
+            if (packageSearchIndex) {
+                var pCount = 0;
+                var pkg = "";
+                $.each(packageSearchIndex, function(index, item) {
+                    item.category = catPackages;
+                    pkg = (item.m)
+                            ? (item.m + "/" + item.l)
+                            : item.l;
+                    if (exactMatcher.test(item.l)) {
+                        presult.push(item);
+                        pCount++;
+                    } else if (camelCaseMatcher.test(pkg)) {
+                        presult.push(item);
+                    } else if (secondaryMatcher.test(pkg)) {
+                        secondaryresult.push(item);
+                    }
+                });
+                result = result.concat(concatResults(presult, 
secondaryresult));
+                displayCount = (pCount > displayCount) ? pCount : displayCount;
+            }
+            if (typeSearchIndex) {
+                var tCount = 0;
+                $.each(typeSearchIndex, function(index, item) {
+                    item.category = catTypes;
+                    var s = nestedName(item);
+                    if (exactMatcher.test(s)) {
+                        tresult.push(item);
+                        tCount++;
+                    } else if (camelCaseMatcher.test(s)) {
+                        tresult.push(item);
+                    } else if (secondaryMatcher.test(item.p + "." + item.l)) {
+                        secondaryresult.push(item);
+                    }
+                });
+                result = result.concat(concatResults(tresult, 
secondaryresult));
+                displayCount = (tCount > displayCount) ? tCount : displayCount;
+            }
+            if (memberSearchIndex) {
+                var mCount = 0;
+                $.each(memberSearchIndex, function(index, item) {
+                    item.category = catMembers;
+                    var s = nestedName(item);
+                    if (exactMatcher.test(s)) {
+                        mresult.push(item);
+                        mCount++;
+                    } else if (camelCaseMatcher.test(s)) {
+                        mresult.push(item);
+                    } else if (secondaryMatcher.test(item.c + "." + item.l)) {
+                        secondaryresult.push(item);
+                    }
+                });
+                result = result.concat(concatResults(mresult, 
secondaryresult));
+                displayCount = (mCount > displayCount) ? mCount : displayCount;
+            }
+            if (tagSearchIndex) {
+                var tgCount = 0;
+                $.each(tagSearchIndex, function(index, item) {
+                    item.category = catSearchTags;
+                    if (exactMatcher.test(item.l)) {
+                        tgresult.push(item);
+                        tgCount++;
+                    } else if (secondaryMatcher.test(item.l)) {
+                        secondaryresult.push(item);
+                    }
+                });
+                result = result.concat(concatResults(tgresult, 
secondaryresult));
+                displayCount = (tgCount > displayCount) ? tgCount : 
displayCount;
+            }
+            displayCount = (displayCount > 500) ? displayCount : 500;
+            var counter = function() {
+                var count = {Modules: 0, Packages: 0, Types: 0, Members: 0, 
SearchTags: 0};
+                var f = function(item) {
+                    count[item.category] += 1;
+                    return (count[item.category] <= displayCount);
+                };
+                return f;
+            }();
+            response(result.filter(counter));
+        },
+        response: function(event, ui) {
+            if (!ui.content.length) {
+                ui.content.push(noResult);
+            } else {
+                $("#search").empty();
+            }
+        },
+        autoFocus: true,
+        position: {
+            collision: "flip"
+        },
+        select: function(event, ui) {
+            if (ui.item.l !== noResult.l) {
+                var url = getURLPrefix(ui);
+                if (ui.item.category === catModules) {
+                    if (useModuleDirectories) {
+                        url += "module-summary.html";
+                    } else {
+                        url = ui.item.l + "-summary.html";
+                    }
+                } else if (ui.item.category === catPackages) {
+                    if (ui.item.url) {
+                        url = ui.item.url;
+                    } else {
+                    url += ui.item.l.replace(/\./g, '/') + 
"/package-summary.html";
+                    }
+                } else if (ui.item.category === catTypes) {
+                    if (ui.item.url) {
+                        url = ui.item.url;
+                    } else if (ui.item.p === "<Unnamed>") {
+                        url += ui.item.l + ".html";
+                    } else {
+                        url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l 
+ ".html";
+                    }
+                } else if (ui.item.category === catMembers) {
+                    if (ui.item.p === "<Unnamed>") {
+                        url += ui.item.c + ".html" + "#";
+                    } else {
+                        url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c 
+ ".html" + "#";
+                    }
+                    if (ui.item.url) {
+                        url += ui.item.url;
+                    } else {
+                        url += ui.item.l;
+                    }
+                } else if (ui.item.category === catSearchTags) {
+                    url += ui.item.u;
+                }
+                if (top !== window) {
+                    parent.classFrame.location = pathtoroot + url;
+                } else {
+                    window.location.href = pathtoroot + url;
+                }
+                $("#search").focus();
+            }
+        }
+    });
+});
\ No newline at end of file

Modified: 
websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/src-html/org/apache/fulcrum/quartz/QuartzScheduler.html
==============================================================================
--- 
websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/src-html/org/apache/fulcrum/quartz/QuartzScheduler.html
 (original)
+++ 
websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/src-html/org/apache/fulcrum/quartz/QuartzScheduler.html
 Wed Aug  4 08:28:04 2021
@@ -1,111 +1,113 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd";>
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" 
title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>package org.apache.fulcrum.quartz;<a 
name="line.1"></a>
-<span class="sourceLineNo">002</span><a name="line.2"></a>
-<span class="sourceLineNo">003</span>/*<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * Licensed to the Apache Software 
Foundation (ASF) under one<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * or more contributor license 
agreements.  See the NOTICE file<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * distributed with this work for 
additional information<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * regarding copyright ownership.  The 
ASF licenses this file<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * to you under the Apache License, 
Version 2.0 (the<a name="line.8"></a>
-<span class="sourceLineNo">009</span> * "License"); you may not use this file 
except in compliance<a name="line.9"></a>
-<span class="sourceLineNo">010</span> * with the License.  You may obtain a 
copy of the License at<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *<a name="line.11"></a>
-<span class="sourceLineNo">012</span> *   
http://www.apache.org/licenses/LICENSE-2.0<a name="line.12"></a>
-<span class="sourceLineNo">013</span> *<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * Unless required by applicable law or 
agreed to in writing,<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * software distributed under the License 
is distributed on an<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR 
CONDITIONS OF ANY<a name="line.16"></a>
-<span class="sourceLineNo">017</span> * KIND, either express or implied.  See 
the License for the<a name="line.17"></a>
-<span class="sourceLineNo">018</span> * specific language governing 
permissions and limitations<a name="line.18"></a>
-<span class="sourceLineNo">019</span> * under the License.<a 
name="line.19"></a>
-<span class="sourceLineNo">020</span> */<a name="line.20"></a>
-<span class="sourceLineNo">021</span><a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.quartz.Scheduler;<a 
name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>/**<a name="line.24"></a>
-<span class="sourceLineNo">025</span> *<a name="line.25"></a>
-<span class="sourceLineNo">026</span> * @author &lt;a 
href="mailto:[email protected]"&gt;Leandro Rodrigo Saad Cruz&lt;/a&gt;<a 
name="line.26"></a>
-<span class="sourceLineNo">027</span> */<a name="line.27"></a>
-<span class="sourceLineNo">028</span>public interface QuartzScheduler<a 
name="line.28"></a>
-<span class="sourceLineNo">029</span>{<a name="line.29"></a>
-<span class="sourceLineNo">030</span>        /** Avalon role - used to id the 
component within the manager */<a name="line.30"></a>
-<span class="sourceLineNo">031</span>        String ROLE = 
QuartzScheduler.class.getName();<a name="line.31"></a>
-<span class="sourceLineNo">032</span>                <a name="line.32"></a>
-<span class="sourceLineNo">033</span>    /**<a name="line.33"></a>
-<span class="sourceLineNo">034</span>     * Get the underlying Quartz 
scheduler.<a name="line.34"></a>
-<span class="sourceLineNo">035</span>     *<a name="line.35"></a>
-<span class="sourceLineNo">036</span>     * @return the Quartz scheduler<a 
name="line.36"></a>
-<span class="sourceLineNo">037</span>     */<a name="line.37"></a>
-<span class="sourceLineNo">038</span>        Scheduler getScheduler();<a 
name="line.38"></a>
-<span class="sourceLineNo">039</span>}<a name="line.39"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
+<!DOCTYPE HTML>
+<html lang="de">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" 
title="Style">
+</head>
+<body>
+<main role="main">
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span><a id="line.1">package 
org.apache.fulcrum.quartz;</a>
+<span class="sourceLineNo">002</span><a id="line.2"></a>
+<span class="sourceLineNo">003</span><a id="line.3">/*</a>
+<span class="sourceLineNo">004</span><a id="line.4"> * Licensed to the Apache 
Software Foundation (ASF) under one</a>
+<span class="sourceLineNo">005</span><a id="line.5"> * or more contributor 
license agreements.  See the NOTICE file</a>
+<span class="sourceLineNo">006</span><a id="line.6"> * distributed with this 
work for additional information</a>
+<span class="sourceLineNo">007</span><a id="line.7"> * regarding copyright 
ownership.  The ASF licenses this file</a>
+<span class="sourceLineNo">008</span><a id="line.8"> * to you under the Apache 
License, Version 2.0 (the</a>
+<span class="sourceLineNo">009</span><a id="line.9"> * "License"); you may not 
use this file except in compliance</a>
+<span class="sourceLineNo">010</span><a id="line.10"> * with the License.  You 
may obtain a copy of the License at</a>
+<span class="sourceLineNo">011</span><a id="line.11"> *</a>
+<span class="sourceLineNo">012</span><a id="line.12"> *   
http://www.apache.org/licenses/LICENSE-2.0</a>
+<span class="sourceLineNo">013</span><a id="line.13"> *</a>
+<span class="sourceLineNo">014</span><a id="line.14"> * Unless required by 
applicable law or agreed to in writing,</a>
+<span class="sourceLineNo">015</span><a id="line.15"> * software distributed 
under the License is distributed on an</a>
+<span class="sourceLineNo">016</span><a id="line.16"> * "AS IS" BASIS, WITHOUT 
WARRANTIES OR CONDITIONS OF ANY</a>
+<span class="sourceLineNo">017</span><a id="line.17"> * KIND, either express 
or implied.  See the License for the</a>
+<span class="sourceLineNo">018</span><a id="line.18"> * specific language 
governing permissions and limitations</a>
+<span class="sourceLineNo">019</span><a id="line.19"> * under the License.</a>
+<span class="sourceLineNo">020</span><a id="line.20"> */</a>
+<span class="sourceLineNo">021</span><a id="line.21"></a>
+<span class="sourceLineNo">022</span><a id="line.22">import 
org.quartz.Scheduler;</a>
+<span class="sourceLineNo">023</span><a id="line.23"></a>
+<span class="sourceLineNo">024</span><a id="line.24">/**</a>
+<span class="sourceLineNo">025</span><a id="line.25"> *</a>
+<span class="sourceLineNo">026</span><a id="line.26"> * @author &lt;a 
href="mailto:[email protected]"&gt;Leandro Rodrigo Saad 
Cruz&lt;/a&gt;</a>
+<span class="sourceLineNo">027</span><a id="line.27"> */</a>
+<span class="sourceLineNo">028</span><a id="line.28">public interface 
QuartzScheduler</a>
+<span class="sourceLineNo">029</span><a id="line.29">{</a>
+<span class="sourceLineNo">030</span><a id="line.30">        /** Avalon role - 
used to id the component within the manager */</a>
+<span class="sourceLineNo">031</span><a id="line.31">        String ROLE = 
QuartzScheduler.class.getName();</a>
+<span class="sourceLineNo">032</span><a id="line.32">                </a>
+<span class="sourceLineNo">033</span><a id="line.33">    /**</a>
+<span class="sourceLineNo">034</span><a id="line.34">     * Get the underlying 
Quartz scheduler.</a>
+<span class="sourceLineNo">035</span><a id="line.35">     *</a>
+<span class="sourceLineNo">036</span><a id="line.36">     * @return the Quartz 
scheduler</a>
+<span class="sourceLineNo">037</span><a id="line.37">     */</a>
+<span class="sourceLineNo">038</span><a id="line.38">        Scheduler 
getScheduler();</a>
+<span class="sourceLineNo">039</span><a id="line.39">}</a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</main>
+</body>
 </html>
\ No newline at end of file

Modified: 
websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/src-html/org/apache/fulcrum/quartz/impl/QuartzSchedulerImpl.html
==============================================================================
--- 
websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/src-html/org/apache/fulcrum/quartz/impl/QuartzSchedulerImpl.html
 (original)
+++ 
websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/src-html/org/apache/fulcrum/quartz/impl/QuartzSchedulerImpl.html
 Wed Aug  4 08:28:04 2021
@@ -1,376 +1,378 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd";>
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" 
title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>package 
org.apache.fulcrum.quartz.impl;<a name="line.1"></a>
-<span class="sourceLineNo">002</span><a name="line.2"></a>
-<span class="sourceLineNo">003</span>/*<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * Licensed to the Apache Software 
Foundation (ASF) under one<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * or more contributor license 
agreements.  See the NOTICE file<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * distributed with this work for 
additional information<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * regarding copyright ownership.  The 
ASF licenses this file<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * to you under the Apache License, 
Version 2.0 (the<a name="line.8"></a>
-<span class="sourceLineNo">009</span> * "License"); you may not use this file 
except in compliance<a name="line.9"></a>
-<span class="sourceLineNo">010</span> * with the License.  You may obtain a 
copy of the License at<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *<a name="line.11"></a>
-<span class="sourceLineNo">012</span> *   
http://www.apache.org/licenses/LICENSE-2.0<a name="line.12"></a>
-<span class="sourceLineNo">013</span> *<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * Unless required by applicable law or 
agreed to in writing,<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * software distributed under the License 
is distributed on an<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR 
CONDITIONS OF ANY<a name="line.16"></a>
-<span class="sourceLineNo">017</span> * KIND, either express or implied.  See 
the License for the<a name="line.17"></a>
-<span class="sourceLineNo">018</span> * specific language governing 
permissions and limitations<a name="line.18"></a>
-<span class="sourceLineNo">019</span> * under the License.<a 
name="line.19"></a>
-<span class="sourceLineNo">020</span> */<a name="line.20"></a>
-<span class="sourceLineNo">021</span><a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.ArrayList;<a 
name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.List;<a 
name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.Properties;<a 
name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Set;<a 
name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import 
org.apache.avalon.framework.activity.Disposable;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import 
org.apache.avalon.framework.activity.Initializable;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import 
org.apache.avalon.framework.activity.Startable;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import 
org.apache.avalon.framework.configuration.Configurable;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import 
org.apache.avalon.framework.configuration.Configuration;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import 
org.apache.avalon.framework.configuration.ConfigurationException;<a 
name="line.33"></a>
-<span class="sourceLineNo">034</span>import 
org.apache.avalon.framework.logger.AbstractLogEnabled;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import 
org.apache.avalon.framework.logger.LogEnabled;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import 
org.apache.avalon.framework.parameters.Parameters;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import 
org.apache.avalon.framework.service.ServiceException;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import 
org.apache.avalon.framework.service.ServiceManager;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import 
org.apache.avalon.framework.service.Serviceable;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import 
org.apache.avalon.framework.thread.ThreadSafe;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import 
org.apache.fulcrum.quartz.QuartzScheduler;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.quartz.Job;<a 
name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.quartz.JobDetail;<a 
name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.quartz.JobExecutionContext;<a 
name="line.44"></a>
-<span class="sourceLineNo">045</span>import 
org.quartz.JobExecutionException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.quartz.JobKey;<a 
name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.quartz.JobListener;<a 
name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.quartz.Matcher;<a 
name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.quartz.Scheduler;<a 
name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.quartz.SchedulerException;<a 
name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.quartz.Trigger;<a 
name="line.51"></a>
-<span class="sourceLineNo">052</span>import 
org.quartz.impl.StdSchedulerFactory;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import 
org.quartz.impl.matchers.GroupMatcher;<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>/**<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * Avalon service  wrapping the 
QuartzScheduler.<a name="line.56"></a>
-<span class="sourceLineNo">057</span> */<a name="line.57"></a>
-<span class="sourceLineNo">058</span>public class QuartzSchedulerImpl<a 
name="line.58"></a>
-<span class="sourceLineNo">059</span>        extends AbstractLogEnabled<a 
name="line.59"></a>
-<span class="sourceLineNo">060</span>        implements QuartzScheduler, 
Configurable, Serviceable, Disposable, Initializable, ThreadSafe, JobListener, 
Startable<a name="line.60"></a>
-<span class="sourceLineNo">061</span>{<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    /** Configuration key */<a 
name="line.62"></a>
-<span class="sourceLineNo">063</span>    private static final String 
CONFIG_CONFIGURATION = "configuration";<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>    /** Configuration key */<a 
name="line.65"></a>
-<span class="sourceLineNo">066</span>    private static final String 
CONFIG_PROPERTY_FILE = "quartzPropertyFile";<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>    /** Configuration key */<a 
name="line.68"></a>
-<span class="sourceLineNo">069</span>    private static final String 
CONFIG_PROPERTIES = "properties";<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>    /**<a name="line.71"></a>
-<span class="sourceLineNo">072</span>     * the Avalon service 
serviceManager<a name="line.72"></a>
-<span class="sourceLineNo">073</span>     */<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    private ServiceManager 
serviceManager;<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>    /**<a name="line.76"></a>
-<span class="sourceLineNo">077</span>     * the Quartz scheduler instance<a 
name="line.77"></a>
-<span class="sourceLineNo">078</span>     */<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    private Scheduler scheduler;<a 
name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>    /**<a name="line.81"></a>
-<span class="sourceLineNo">082</span>     * the quartz property file<a 
name="line.82"></a>
-<span class="sourceLineNo">083</span>     */<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    private String quartzPropertyFile;<a 
name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>    /**<a name="line.86"></a>
-<span class="sourceLineNo">087</span>     * the quartz properties loaded from 
the XML configuration<a name="line.87"></a>
-<span class="sourceLineNo">088</span>     */<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    private Properties 
quartzProperties;<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>    // === Avalon Lifecycle 
=================================================<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>    /**<a name="line.93"></a>
-<span class="sourceLineNo">094</span>     * @see 
org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)<a
 name="line.94"></a>
-<span class="sourceLineNo">095</span>     */<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    @Override<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public void configure(Configuration 
conf) throws ConfigurationException<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        Configuration quartzConf = 
conf.getChild(CONFIG_CONFIGURATION, true);<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>        
if(quartzConf.getChild(CONFIG_PROPERTIES, false) != null)<a name="line.101"></a>
-<span class="sourceLineNo">102</span>        {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>            this.quartzProperties = 
Parameters.toProperties(Parameters.fromConfiguration(quartzConf.getChild(CONFIG_PROPERTIES)));<a
 name="line.103"></a>
-<span class="sourceLineNo">104</span>        }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        else 
if(quartzConf.getChild(CONFIG_PROPERTY_FILE, false) != null)<a 
name="line.105"></a>
-<span class="sourceLineNo">106</span>        {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>            this.quartzPropertyFile = 
quartzConf.getChild(CONFIG_PROPERTY_FILE).getValue();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        }<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>    /**<a name="line.111"></a>
-<span class="sourceLineNo">112</span>     * @see 
org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)<a
 name="line.112"></a>
-<span class="sourceLineNo">113</span>     */<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public void service(ServiceManager 
manager) throws ServiceException<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        this.serviceManager = manager;<a 
name="line.117"></a>
-<span class="sourceLineNo">118</span>    }<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>    /**<a name="line.120"></a>
-<span class="sourceLineNo">121</span>     * @see 
org.apache.avalon.framework.activity.Initializable#initialize()<a 
name="line.121"></a>
-<span class="sourceLineNo">122</span>     */<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    @Override<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    public void initialize() throws 
Exception<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        // instantiating a specific 
scheduler from a property file or properties<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        StdSchedulerFactory 
schedulerFactory = new StdSchedulerFactory();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        if(this.quartzProperties != 
null)<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>            getLogger().info("Pulling 
quartz configuration from the container XML configuration");<a 
name="line.130"></a>
-<span class="sourceLineNo">131</span>            
schedulerFactory.initialize(this.quartzProperties);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        else if(this.quartzPropertyFile 
!= null)<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>            getLogger().info("Pulling 
quartz configuration from the following property file : " + 
this.quartzPropertyFile);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>            
schedulerFactory.initialize(this.quartzPropertyFile);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>        else<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>            getLogger().info("Using 
Quartz default configuration since no user-supplied configuration was 
found");<a name="line.140"></a>
-<span class="sourceLineNo">141</span>            
schedulerFactory.initialize();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>        this.scheduler = 
schedulerFactory.getScheduler();<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>        // add this service instance as 
JobListener to allow basic monitoring<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        
getScheduler().getListenerManager().addJobListener(this, new 
ArrayList&lt;Matcher&lt;JobKey&gt;&gt;());<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>    @Override<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    public void start() throws 
Exception<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        getScheduler().start();<a 
name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>        if(getLogger().isInfoEnabled())<a 
name="line.155"></a>
-<span class="sourceLineNo">156</span>        {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>            
logSchedulerConfiguration();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        }<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    @Override<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public void stop() throws Exception<a 
name="line.163"></a>
-<span class="sourceLineNo">164</span>    {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        getScheduler().standby();<a 
name="line.165"></a>
-<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>    /**<a name="line.168"></a>
-<span class="sourceLineNo">169</span>     * @see 
org.apache.avalon.framework.activity.Disposable#dispose()<a name="line.169"></a>
-<span class="sourceLineNo">170</span>     */<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    @Override<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    public void dispose()<a 
name="line.172"></a>
-<span class="sourceLineNo">173</span>    {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        try<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>            // shutdown() does not return 
until executing Jobs complete execution<a name="line.176"></a>
-<span class="sourceLineNo">177</span>            
this.scheduler.shutdown(true);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        }<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        catch (SchedulerException e)<a 
name="line.179"></a>
-<span class="sourceLineNo">180</span>        {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>            
this.getLogger().warn("Problem shutting down quartz scheduler ", e);<a 
name="line.181"></a>
-<span class="sourceLineNo">182</span>        }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>        this.scheduler = null;<a 
name="line.184"></a>
-<span class="sourceLineNo">185</span>        this.serviceManager = null;<a 
name="line.185"></a>
-<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>    // === Service Interface 
Implementation =================================<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>    /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span>     * @see 
org.apache.fulcrum.quartz.QuartzScheduler#getScheduler()<a name="line.191"></a>
-<span class="sourceLineNo">192</span>     */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    @Override<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    public Scheduler getScheduler()<a 
name="line.194"></a>
-<span class="sourceLineNo">195</span>    {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        return scheduler;<a 
name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>    /**<a name="line.199"></a>
-<span class="sourceLineNo">200</span>     * Calls getName() on jobListener<a 
name="line.200"></a>
-<span class="sourceLineNo">201</span>     *<a name="line.201"></a>
-<span class="sourceLineNo">202</span>     * @see 
org.quartz.JobListener#getName()<a name="line.202"></a>
-<span class="sourceLineNo">203</span>     */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    @Override<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    public String getName()<a 
name="line.205"></a>
-<span class="sourceLineNo">206</span>    {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        return getClass().getName();<a 
name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>    /**<a name="line.210"></a>
-<span class="sourceLineNo">211</span>     * Hook to support jobs implementing 
Avalon interface such as<a name="line.211"></a>
-<span class="sourceLineNo">212</span>     * LogEnabled and Serviceable.<a 
name="line.212"></a>
-<span class="sourceLineNo">213</span>     *<a name="line.213"></a>
-<span class="sourceLineNo">214</span>     * @see 
org.quartz.JobListener#jobToBeExecuted(org.quartz.JobExecutionContext)<a 
name="line.214"></a>
-<span class="sourceLineNo">215</span>     */<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    @Override<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    public void 
jobToBeExecuted(JobExecutionContext context)<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        Job job = 
context.getJobInstance();<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>        // inject a logger instance<a 
name="line.221"></a>
-<span class="sourceLineNo">222</span>        if(job instanceof LogEnabled)<a 
name="line.222"></a>
-<span class="sourceLineNo">223</span>        {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>            ((LogEnabled) 
job).enableLogging(getLogger());<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>        // inject a ServiceManager 
instance<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        if (job instanceof Serviceable)<a 
name="line.228"></a>
-<span class="sourceLineNo">229</span>        {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>            try<a name="line.230"></a>
-<span class="sourceLineNo">231</span>            {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>                ((Serviceable) 
job).service(serviceManager);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>            }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>            catch (ServiceException e)<a 
name="line.234"></a>
-<span class="sourceLineNo">235</span>            {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>                getLogger().error("Error 
servicing Job[" + job + "]", e);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>            }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span>     * @see 
org.quartz.JobListener#jobWasExecuted(org.quartz.JobExecutionContext, 
org.quartz.JobExecutionException)<a name="line.242"></a>
-<span class="sourceLineNo">243</span>     */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    @Override<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    public void 
jobWasExecuted(JobExecutionContext context, JobExecutionException ex)<a 
name="line.245"></a>
-<span class="sourceLineNo">246</span>    {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        if (ex != null)<a 
name="line.247"></a>
-<span class="sourceLineNo">248</span>        {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>            String msg = "Executing the 
job '" + context.getJobDetail().getKey() + "' failed";<a name="line.249"></a>
-<span class="sourceLineNo">250</span>            getLogger().error(msg, 
ex.getCause());<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        }<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        else<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>            if 
(getLogger().isDebugEnabled())<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>                
getLogger().debug("Executing the job '" + context.getJobDetail().getKey() + "' 
took " + context.getJobRunTime() + " ms");<a name="line.256"></a>
-<span class="sourceLineNo">257</span>            }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>    /**<a name="line.261"></a>
-<span class="sourceLineNo">262</span>     * @see 
org.quartz.JobListener#jobExecutionVetoed(org.quartz.JobExecutionContext)<a 
name="line.262"></a>
-<span class="sourceLineNo">263</span>     */<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    @Override<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    public void 
jobExecutionVetoed(JobExecutionContext context)<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>        // nothing to do<a 
name="line.267"></a>
-<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>    // === Service Implementation 
===========================================<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    /**<a name="line.271"></a>
-<span class="sourceLineNo">272</span>     * @throws SchedulerException generic 
exception<a name="line.272"></a>
-<span class="sourceLineNo">273</span>     */<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    private void 
logSchedulerConfiguration() throws SchedulerException<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        for (String jobGroup : 
getScheduler().getJobGroupNames())<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>            Set&lt;JobKey&gt; jobsInGroup 
= getScheduler().getJobKeys(GroupMatcher.jobGroupEquals(jobGroup));<a 
name="line.278"></a>
-<span class="sourceLineNo">279</span>            getLogger().info("Job Group: 
" + jobGroup + " contains the following number of jobs : " + 
jobsInGroup.size());<a name="line.279"></a>
-<span class="sourceLineNo">280</span>            for (JobKey jobKey : 
jobsInGroup)<a name="line.280"></a>
-<span class="sourceLineNo">281</span>            {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>                StringBuilder buffer = 
new StringBuilder();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>                JobDetail jobDetail = 
getScheduler().getJobDetail(jobKey);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>                List&lt;? extends 
Trigger&gt; jobTriggers = getScheduler().getTriggersOfJob(jobKey);<a 
name="line.284"></a>
-<span class="sourceLineNo">285</span>                
buffer.append(jobDetail.getKey());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>                buffer.append(" =&gt; 
");<a name="line.286"></a>
-<span class="sourceLineNo">287</span>                if(jobTriggers != null 
&amp;&amp; !jobTriggers.isEmpty())<a name="line.287"></a>
-<span class="sourceLineNo">288</span>                {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>                    Trigger jt = 
jobTriggers.get(0);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>                    
buffer.append(jt.getKey());<a name="line.290"></a>
-<span class="sourceLineNo">291</span>                    buffer.append(" 
(");<a name="line.291"></a>
-<span class="sourceLineNo">292</span>                    
buffer.append(jt.getNextFireTime());<a name="line.292"></a>
-<span class="sourceLineNo">293</span>                    buffer.append(")");<a 
name="line.293"></a>
-<span class="sourceLineNo">294</span>                }<a name="line.294"></a>
-<span class="sourceLineNo">295</span>                else<a 
name="line.295"></a>
-<span class="sourceLineNo">296</span>                {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>                    buffer.append("no 
trigger defined");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>                }<a name="line.298"></a>
-<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span>                
getLogger().info(buffer.toString());<a name="line.300"></a>
-<span class="sourceLineNo">301</span>            }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        }<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>}<a name="line.304"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
+<!DOCTYPE HTML>
+<html lang="de">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" 
title="Style">
+</head>
+<body>
+<main role="main">
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span><a id="line.1">package 
org.apache.fulcrum.quartz.impl;</a>
+<span class="sourceLineNo">002</span><a id="line.2"></a>
+<span class="sourceLineNo">003</span><a id="line.3">/*</a>
+<span class="sourceLineNo">004</span><a id="line.4"> * Licensed to the Apache 
Software Foundation (ASF) under one</a>
+<span class="sourceLineNo">005</span><a id="line.5"> * or more contributor 
license agreements.  See the NOTICE file</a>
+<span class="sourceLineNo">006</span><a id="line.6"> * distributed with this 
work for additional information</a>
+<span class="sourceLineNo">007</span><a id="line.7"> * regarding copyright 
ownership.  The ASF licenses this file</a>
+<span class="sourceLineNo">008</span><a id="line.8"> * to you under the Apache 
License, Version 2.0 (the</a>
+<span class="sourceLineNo">009</span><a id="line.9"> * "License"); you may not 
use this file except in compliance</a>
+<span class="sourceLineNo">010</span><a id="line.10"> * with the License.  You 
may obtain a copy of the License at</a>
+<span class="sourceLineNo">011</span><a id="line.11"> *</a>
+<span class="sourceLineNo">012</span><a id="line.12"> *   
http://www.apache.org/licenses/LICENSE-2.0</a>
+<span class="sourceLineNo">013</span><a id="line.13"> *</a>
+<span class="sourceLineNo">014</span><a id="line.14"> * Unless required by 
applicable law or agreed to in writing,</a>
+<span class="sourceLineNo">015</span><a id="line.15"> * software distributed 
under the License is distributed on an</a>
+<span class="sourceLineNo">016</span><a id="line.16"> * "AS IS" BASIS, WITHOUT 
WARRANTIES OR CONDITIONS OF ANY</a>
+<span class="sourceLineNo">017</span><a id="line.17"> * KIND, either express 
or implied.  See the License for the</a>
+<span class="sourceLineNo">018</span><a id="line.18"> * specific language 
governing permissions and limitations</a>
+<span class="sourceLineNo">019</span><a id="line.19"> * under the License.</a>
+<span class="sourceLineNo">020</span><a id="line.20"> */</a>
+<span class="sourceLineNo">021</span><a id="line.21"></a>
+<span class="sourceLineNo">022</span><a id="line.22"></a>
+<span class="sourceLineNo">023</span><a id="line.23">import 
java.util.ArrayList;</a>
+<span class="sourceLineNo">024</span><a id="line.24">import java.util.List;</a>
+<span class="sourceLineNo">025</span><a id="line.25">import 
java.util.Properties;</a>
+<span class="sourceLineNo">026</span><a id="line.26">import java.util.Set;</a>
+<span class="sourceLineNo">027</span><a id="line.27"></a>
+<span class="sourceLineNo">028</span><a id="line.28">import 
org.apache.avalon.framework.activity.Disposable;</a>
+<span class="sourceLineNo">029</span><a id="line.29">import 
org.apache.avalon.framework.activity.Initializable;</a>
+<span class="sourceLineNo">030</span><a id="line.30">import 
org.apache.avalon.framework.activity.Startable;</a>
+<span class="sourceLineNo">031</span><a id="line.31">import 
org.apache.avalon.framework.configuration.Configurable;</a>
+<span class="sourceLineNo">032</span><a id="line.32">import 
org.apache.avalon.framework.configuration.Configuration;</a>
+<span class="sourceLineNo">033</span><a id="line.33">import 
org.apache.avalon.framework.configuration.ConfigurationException;</a>
+<span class="sourceLineNo">034</span><a id="line.34">import 
org.apache.avalon.framework.logger.AbstractLogEnabled;</a>
+<span class="sourceLineNo">035</span><a id="line.35">import 
org.apache.avalon.framework.logger.LogEnabled;</a>
+<span class="sourceLineNo">036</span><a id="line.36">import 
org.apache.avalon.framework.parameters.Parameters;</a>
+<span class="sourceLineNo">037</span><a id="line.37">import 
org.apache.avalon.framework.service.ServiceException;</a>
+<span class="sourceLineNo">038</span><a id="line.38">import 
org.apache.avalon.framework.service.ServiceManager;</a>
+<span class="sourceLineNo">039</span><a id="line.39">import 
org.apache.avalon.framework.service.Serviceable;</a>
+<span class="sourceLineNo">040</span><a id="line.40">import 
org.apache.avalon.framework.thread.ThreadSafe;</a>
+<span class="sourceLineNo">041</span><a id="line.41">import 
org.apache.fulcrum.quartz.QuartzScheduler;</a>
+<span class="sourceLineNo">042</span><a id="line.42">import org.quartz.Job;</a>
+<span class="sourceLineNo">043</span><a id="line.43">import 
org.quartz.JobDetail;</a>
+<span class="sourceLineNo">044</span><a id="line.44">import 
org.quartz.JobExecutionContext;</a>
+<span class="sourceLineNo">045</span><a id="line.45">import 
org.quartz.JobExecutionException;</a>
+<span class="sourceLineNo">046</span><a id="line.46">import 
org.quartz.JobKey;</a>
+<span class="sourceLineNo">047</span><a id="line.47">import 
org.quartz.JobListener;</a>
+<span class="sourceLineNo">048</span><a id="line.48">import 
org.quartz.Matcher;</a>
+<span class="sourceLineNo">049</span><a id="line.49">import 
org.quartz.Scheduler;</a>
+<span class="sourceLineNo">050</span><a id="line.50">import 
org.quartz.SchedulerException;</a>
+<span class="sourceLineNo">051</span><a id="line.51">import 
org.quartz.Trigger;</a>
+<span class="sourceLineNo">052</span><a id="line.52">import 
org.quartz.impl.StdSchedulerFactory;</a>
+<span class="sourceLineNo">053</span><a id="line.53">import 
org.quartz.impl.matchers.GroupMatcher;</a>
+<span class="sourceLineNo">054</span><a id="line.54"></a>
+<span class="sourceLineNo">055</span><a id="line.55">/**</a>
+<span class="sourceLineNo">056</span><a id="line.56"> * Avalon service  
wrapping the QuartzScheduler.</a>
+<span class="sourceLineNo">057</span><a id="line.57"> */</a>
+<span class="sourceLineNo">058</span><a id="line.58">public class 
QuartzSchedulerImpl</a>
+<span class="sourceLineNo">059</span><a id="line.59">        extends 
AbstractLogEnabled</a>
+<span class="sourceLineNo">060</span><a id="line.60">        implements 
QuartzScheduler, Configurable, Serviceable, Disposable, Initializable, 
ThreadSafe, JobListener, Startable</a>
+<span class="sourceLineNo">061</span><a id="line.61">{</a>
+<span class="sourceLineNo">062</span><a id="line.62">    /** Configuration key 
*/</a>
+<span class="sourceLineNo">063</span><a id="line.63">    private static final 
String CONFIG_CONFIGURATION = "configuration";</a>
+<span class="sourceLineNo">064</span><a id="line.64"></a>
+<span class="sourceLineNo">065</span><a id="line.65">    /** Configuration key 
*/</a>
+<span class="sourceLineNo">066</span><a id="line.66">    private static final 
String CONFIG_PROPERTY_FILE = "quartzPropertyFile";</a>
+<span class="sourceLineNo">067</span><a id="line.67"></a>
+<span class="sourceLineNo">068</span><a id="line.68">    /** Configuration key 
*/</a>
+<span class="sourceLineNo">069</span><a id="line.69">    private static final 
String CONFIG_PROPERTIES = "properties";</a>
+<span class="sourceLineNo">070</span><a id="line.70"></a>
+<span class="sourceLineNo">071</span><a id="line.71">    /**</a>
+<span class="sourceLineNo">072</span><a id="line.72">     * the Avalon service 
serviceManager</a>
+<span class="sourceLineNo">073</span><a id="line.73">     */</a>
+<span class="sourceLineNo">074</span><a id="line.74">    private 
ServiceManager serviceManager;</a>
+<span class="sourceLineNo">075</span><a id="line.75"></a>
+<span class="sourceLineNo">076</span><a id="line.76">    /**</a>
+<span class="sourceLineNo">077</span><a id="line.77">     * the Quartz 
scheduler instance</a>
+<span class="sourceLineNo">078</span><a id="line.78">     */</a>
+<span class="sourceLineNo">079</span><a id="line.79">    private Scheduler 
scheduler;</a>
+<span class="sourceLineNo">080</span><a id="line.80"></a>
+<span class="sourceLineNo">081</span><a id="line.81">    /**</a>
+<span class="sourceLineNo">082</span><a id="line.82">     * the quartz 
property file</a>
+<span class="sourceLineNo">083</span><a id="line.83">     */</a>
+<span class="sourceLineNo">084</span><a id="line.84">    private String 
quartzPropertyFile;</a>
+<span class="sourceLineNo">085</span><a id="line.85"></a>
+<span class="sourceLineNo">086</span><a id="line.86">    /**</a>
+<span class="sourceLineNo">087</span><a id="line.87">     * the quartz 
properties loaded from the XML configuration</a>
+<span class="sourceLineNo">088</span><a id="line.88">     */</a>
+<span class="sourceLineNo">089</span><a id="line.89">    private Properties 
quartzProperties;</a>
+<span class="sourceLineNo">090</span><a id="line.90"></a>
+<span class="sourceLineNo">091</span><a id="line.91">    // === Avalon 
Lifecycle =================================================</a>
+<span class="sourceLineNo">092</span><a id="line.92"></a>
+<span class="sourceLineNo">093</span><a id="line.93">    /**</a>
+<span class="sourceLineNo">094</span><a id="line.94">     * @see 
org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)</a>
+<span class="sourceLineNo">095</span><a id="line.95">     */</a>
+<span class="sourceLineNo">096</span><a id="line.96">    @Override</a>
+<span class="sourceLineNo">097</span><a id="line.97">    public void 
configure(Configuration conf) throws ConfigurationException</a>
+<span class="sourceLineNo">098</span><a id="line.98">    {</a>
+<span class="sourceLineNo">099</span><a id="line.99">        Configuration 
quartzConf = conf.getChild(CONFIG_CONFIGURATION, true);</a>
+<span class="sourceLineNo">100</span><a id="line.100"></a>
+<span class="sourceLineNo">101</span><a id="line.101">        
if(quartzConf.getChild(CONFIG_PROPERTIES, false) != null)</a>
+<span class="sourceLineNo">102</span><a id="line.102">        {</a>
+<span class="sourceLineNo">103</span><a id="line.103">            
this.quartzProperties = 
Parameters.toProperties(Parameters.fromConfiguration(quartzConf.getChild(CONFIG_PROPERTIES)));</a>
+<span class="sourceLineNo">104</span><a id="line.104">        }</a>
+<span class="sourceLineNo">105</span><a id="line.105">        else 
if(quartzConf.getChild(CONFIG_PROPERTY_FILE, false) != null)</a>
+<span class="sourceLineNo">106</span><a id="line.106">        {</a>
+<span class="sourceLineNo">107</span><a id="line.107">            
this.quartzPropertyFile = 
quartzConf.getChild(CONFIG_PROPERTY_FILE).getValue();</a>
+<span class="sourceLineNo">108</span><a id="line.108">        }</a>
+<span class="sourceLineNo">109</span><a id="line.109">    }</a>
+<span class="sourceLineNo">110</span><a id="line.110"></a>
+<span class="sourceLineNo">111</span><a id="line.111">    /**</a>
+<span class="sourceLineNo">112</span><a id="line.112">     * @see 
org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)</a>
+<span class="sourceLineNo">113</span><a id="line.113">     */</a>
+<span class="sourceLineNo">114</span><a id="line.114">    @Override</a>
+<span class="sourceLineNo">115</span><a id="line.115">    public void 
service(ServiceManager manager) throws ServiceException</a>
+<span class="sourceLineNo">116</span><a id="line.116">    {</a>
+<span class="sourceLineNo">117</span><a id="line.117">        
this.serviceManager = manager;</a>
+<span class="sourceLineNo">118</span><a id="line.118">    }</a>
+<span class="sourceLineNo">119</span><a id="line.119"></a>
+<span class="sourceLineNo">120</span><a id="line.120">    /**</a>
+<span class="sourceLineNo">121</span><a id="line.121">     * @see 
org.apache.avalon.framework.activity.Initializable#initialize()</a>
+<span class="sourceLineNo">122</span><a id="line.122">     */</a>
+<span class="sourceLineNo">123</span><a id="line.123">    @Override</a>
+<span class="sourceLineNo">124</span><a id="line.124">    public void 
initialize() throws Exception</a>
+<span class="sourceLineNo">125</span><a id="line.125">    {</a>
+<span class="sourceLineNo">126</span><a id="line.126">        // instantiating 
a specific scheduler from a property file or properties</a>
+<span class="sourceLineNo">127</span><a id="line.127">        
StdSchedulerFactory schedulerFactory = new StdSchedulerFactory();</a>
+<span class="sourceLineNo">128</span><a id="line.128">        
if(this.quartzProperties != null)</a>
+<span class="sourceLineNo">129</span><a id="line.129">        {</a>
+<span class="sourceLineNo">130</span><a id="line.130">            
getLogger().info("Pulling quartz configuration from the container XML 
configuration");</a>
+<span class="sourceLineNo">131</span><a id="line.131">            
schedulerFactory.initialize(this.quartzProperties);</a>
+<span class="sourceLineNo">132</span><a id="line.132">        }</a>
+<span class="sourceLineNo">133</span><a id="line.133">        else 
if(this.quartzPropertyFile != null)</a>
+<span class="sourceLineNo">134</span><a id="line.134">        {</a>
+<span class="sourceLineNo">135</span><a id="line.135">            
getLogger().info("Pulling quartz configuration from the following property file 
: " + this.quartzPropertyFile);</a>
+<span class="sourceLineNo">136</span><a id="line.136">            
schedulerFactory.initialize(this.quartzPropertyFile);</a>
+<span class="sourceLineNo">137</span><a id="line.137">        }</a>
+<span class="sourceLineNo">138</span><a id="line.138">        else</a>
+<span class="sourceLineNo">139</span><a id="line.139">        {</a>
+<span class="sourceLineNo">140</span><a id="line.140">            
getLogger().info("Using Quartz default configuration since no user-supplied 
configuration was found");</a>
+<span class="sourceLineNo">141</span><a id="line.141">            
schedulerFactory.initialize();</a>
+<span class="sourceLineNo">142</span><a id="line.142">        }</a>
+<span class="sourceLineNo">143</span><a id="line.143"></a>
+<span class="sourceLineNo">144</span><a id="line.144">        this.scheduler = 
schedulerFactory.getScheduler();</a>
+<span class="sourceLineNo">145</span><a id="line.145"></a>
+<span class="sourceLineNo">146</span><a id="line.146">        // add this 
service instance as JobListener to allow basic monitoring</a>
+<span class="sourceLineNo">147</span><a id="line.147">        
getScheduler().getListenerManager().addJobListener(this, new 
ArrayList&lt;Matcher&lt;JobKey&gt;&gt;());</a>
+<span class="sourceLineNo">148</span><a id="line.148">    }</a>
+<span class="sourceLineNo">149</span><a id="line.149"></a>
+<span class="sourceLineNo">150</span><a id="line.150">    @Override</a>
+<span class="sourceLineNo">151</span><a id="line.151">    public void start() 
throws Exception</a>
+<span class="sourceLineNo">152</span><a id="line.152">    {</a>
+<span class="sourceLineNo">153</span><a id="line.153">        
getScheduler().start();</a>
+<span class="sourceLineNo">154</span><a id="line.154"></a>
+<span class="sourceLineNo">155</span><a id="line.155">        
if(getLogger().isInfoEnabled())</a>
+<span class="sourceLineNo">156</span><a id="line.156">        {</a>
+<span class="sourceLineNo">157</span><a id="line.157">            
logSchedulerConfiguration();</a>
+<span class="sourceLineNo">158</span><a id="line.158">        }</a>
+<span class="sourceLineNo">159</span><a id="line.159"></a>
+<span class="sourceLineNo">160</span><a id="line.160">    }</a>
+<span class="sourceLineNo">161</span><a id="line.161"></a>
+<span class="sourceLineNo">162</span><a id="line.162">    @Override</a>
+<span class="sourceLineNo">163</span><a id="line.163">    public void stop() 
throws Exception</a>
+<span class="sourceLineNo">164</span><a id="line.164">    {</a>
+<span class="sourceLineNo">165</span><a id="line.165">        
getScheduler().standby();</a>
+<span class="sourceLineNo">166</span><a id="line.166">    }</a>
+<span class="sourceLineNo">167</span><a id="line.167"></a>
+<span class="sourceLineNo">168</span><a id="line.168">    /**</a>
+<span class="sourceLineNo">169</span><a id="line.169">     * @see 
org.apache.avalon.framework.activity.Disposable#dispose()</a>
+<span class="sourceLineNo">170</span><a id="line.170">     */</a>
+<span class="sourceLineNo">171</span><a id="line.171">    @Override</a>
+<span class="sourceLineNo">172</span><a id="line.172">    public void 
dispose()</a>
+<span class="sourceLineNo">173</span><a id="line.173">    {</a>
+<span class="sourceLineNo">174</span><a id="line.174">        try</a>
+<span class="sourceLineNo">175</span><a id="line.175">        {</a>
+<span class="sourceLineNo">176</span><a id="line.176">            // 
shutdown() does not return until executing Jobs complete execution</a>
+<span class="sourceLineNo">177</span><a id="line.177">            
this.scheduler.shutdown(true);</a>
+<span class="sourceLineNo">178</span><a id="line.178">        }</a>
+<span class="sourceLineNo">179</span><a id="line.179">        catch 
(SchedulerException e)</a>
+<span class="sourceLineNo">180</span><a id="line.180">        {</a>
+<span class="sourceLineNo">181</span><a id="line.181">            
this.getLogger().warn("Problem shutting down quartz scheduler ", e);</a>
+<span class="sourceLineNo">182</span><a id="line.182">        }</a>
+<span class="sourceLineNo">183</span><a id="line.183"></a>
+<span class="sourceLineNo">184</span><a id="line.184">        this.scheduler = 
null;</a>
+<span class="sourceLineNo">185</span><a id="line.185">        
this.serviceManager = null;</a>
+<span class="sourceLineNo">186</span><a id="line.186">    }</a>
+<span class="sourceLineNo">187</span><a id="line.187"></a>
+<span class="sourceLineNo">188</span><a id="line.188">    // === Service 
Interface Implementation =================================</a>
+<span class="sourceLineNo">189</span><a id="line.189"></a>
+<span class="sourceLineNo">190</span><a id="line.190">    /**</a>
+<span class="sourceLineNo">191</span><a id="line.191">     * @see 
org.apache.fulcrum.quartz.QuartzScheduler#getScheduler()</a>
+<span class="sourceLineNo">192</span><a id="line.192">     */</a>
+<span class="sourceLineNo">193</span><a id="line.193">    @Override</a>
+<span class="sourceLineNo">194</span><a id="line.194">    public Scheduler 
getScheduler()</a>
+<span class="sourceLineNo">195</span><a id="line.195">    {</a>
+<span class="sourceLineNo">196</span><a id="line.196">        return 
scheduler;</a>
+<span class="sourceLineNo">197</span><a id="line.197">    }</a>
+<span class="sourceLineNo">198</span><a id="line.198"></a>
+<span class="sourceLineNo">199</span><a id="line.199">    /**</a>
+<span class="sourceLineNo">200</span><a id="line.200">     * Calls getName() 
on jobListener</a>
+<span class="sourceLineNo">201</span><a id="line.201">     *</a>
+<span class="sourceLineNo">202</span><a id="line.202">     * @see 
org.quartz.JobListener#getName()</a>
+<span class="sourceLineNo">203</span><a id="line.203">     */</a>
+<span class="sourceLineNo">204</span><a id="line.204">    @Override</a>
+<span class="sourceLineNo">205</span><a id="line.205">    public String 
getName()</a>
+<span class="sourceLineNo">206</span><a id="line.206">    {</a>
+<span class="sourceLineNo">207</span><a id="line.207">        return 
getClass().getName();</a>
+<span class="sourceLineNo">208</span><a id="line.208">    }</a>
+<span class="sourceLineNo">209</span><a id="line.209"></a>
+<span class="sourceLineNo">210</span><a id="line.210">    /**</a>
+<span class="sourceLineNo">211</span><a id="line.211">     * Hook to support 
jobs implementing Avalon interface such as</a>
+<span class="sourceLineNo">212</span><a id="line.212">     * LogEnabled and 
Serviceable.</a>
+<span class="sourceLineNo">213</span><a id="line.213">     *</a>
+<span class="sourceLineNo">214</span><a id="line.214">     * @see 
org.quartz.JobListener#jobToBeExecuted(org.quartz.JobExecutionContext)</a>
+<span class="sourceLineNo">215</span><a id="line.215">     */</a>
+<span class="sourceLineNo">216</span><a id="line.216">    @Override</a>
+<span class="sourceLineNo">217</span><a id="line.217">    public void 
jobToBeExecuted(JobExecutionContext context)</a>
+<span class="sourceLineNo">218</span><a id="line.218">    {</a>
+<span class="sourceLineNo">219</span><a id="line.219">        Job job = 
context.getJobInstance();</a>
+<span class="sourceLineNo">220</span><a id="line.220"></a>
+<span class="sourceLineNo">221</span><a id="line.221">        // inject a 
logger instance</a>
+<span class="sourceLineNo">222</span><a id="line.222">        if(job 
instanceof LogEnabled)</a>
+<span class="sourceLineNo">223</span><a id="line.223">        {</a>
+<span class="sourceLineNo">224</span><a id="line.224">            
((LogEnabled) job).enableLogging(getLogger());</a>
+<span class="sourceLineNo">225</span><a id="line.225">        }</a>
+<span class="sourceLineNo">226</span><a id="line.226"></a>
+<span class="sourceLineNo">227</span><a id="line.227">        // inject a 
ServiceManager instance</a>
+<span class="sourceLineNo">228</span><a id="line.228">        if (job 
instanceof Serviceable)</a>
+<span class="sourceLineNo">229</span><a id="line.229">        {</a>
+<span class="sourceLineNo">230</span><a id="line.230">            try</a>
+<span class="sourceLineNo">231</span><a id="line.231">            {</a>
+<span class="sourceLineNo">232</span><a id="line.232">                
((Serviceable) job).service(serviceManager);</a>
+<span class="sourceLineNo">233</span><a id="line.233">            }</a>
+<span class="sourceLineNo">234</span><a id="line.234">            catch 
(ServiceException e)</a>
+<span class="sourceLineNo">235</span><a id="line.235">            {</a>
+<span class="sourceLineNo">236</span><a id="line.236">                
getLogger().error("Error servicing Job[" + job + "]", e);</a>
+<span class="sourceLineNo">237</span><a id="line.237">            }</a>
+<span class="sourceLineNo">238</span><a id="line.238">        }</a>
+<span class="sourceLineNo">239</span><a id="line.239">    }</a>
+<span class="sourceLineNo">240</span><a id="line.240"></a>
+<span class="sourceLineNo">241</span><a id="line.241">    /**</a>
+<span class="sourceLineNo">242</span><a id="line.242">     * @see 
org.quartz.JobListener#jobWasExecuted(org.quartz.JobExecutionContext, 
org.quartz.JobExecutionException)</a>
+<span class="sourceLineNo">243</span><a id="line.243">     */</a>
+<span class="sourceLineNo">244</span><a id="line.244">    @Override</a>
+<span class="sourceLineNo">245</span><a id="line.245">    public void 
jobWasExecuted(JobExecutionContext context, JobExecutionException ex)</a>
+<span class="sourceLineNo">246</span><a id="line.246">    {</a>
+<span class="sourceLineNo">247</span><a id="line.247">        if (ex != 
null)</a>
+<span class="sourceLineNo">248</span><a id="line.248">        {</a>
+<span class="sourceLineNo">249</span><a id="line.249">            String msg = 
"Executing the job '" + context.getJobDetail().getKey() + "' failed";</a>
+<span class="sourceLineNo">250</span><a id="line.250">            
getLogger().error(msg, ex.getCause());</a>
+<span class="sourceLineNo">251</span><a id="line.251">        }</a>
+<span class="sourceLineNo">252</span><a id="line.252">        else</a>
+<span class="sourceLineNo">253</span><a id="line.253">        {</a>
+<span class="sourceLineNo">254</span><a id="line.254">            if 
(getLogger().isDebugEnabled())</a>
+<span class="sourceLineNo">255</span><a id="line.255">            {</a>
+<span class="sourceLineNo">256</span><a id="line.256">                
getLogger().debug("Executing the job '" + context.getJobDetail().getKey() + "' 
took " + context.getJobRunTime() + " ms");</a>
+<span class="sourceLineNo">257</span><a id="line.257">            }</a>
+<span class="sourceLineNo">258</span><a id="line.258">        }</a>
+<span class="sourceLineNo">259</span><a id="line.259">    }</a>
+<span class="sourceLineNo">260</span><a id="line.260"></a>
+<span class="sourceLineNo">261</span><a id="line.261">    /**</a>
+<span class="sourceLineNo">262</span><a id="line.262">     * @see 
org.quartz.JobListener#jobExecutionVetoed(org.quartz.JobExecutionContext)</a>
+<span class="sourceLineNo">263</span><a id="line.263">     */</a>
+<span class="sourceLineNo">264</span><a id="line.264">    @Override</a>
+<span class="sourceLineNo">265</span><a id="line.265">    public void 
jobExecutionVetoed(JobExecutionContext context)</a>
+<span class="sourceLineNo">266</span><a id="line.266">    {</a>
+<span class="sourceLineNo">267</span><a id="line.267">        // nothing to 
do</a>
+<span class="sourceLineNo">268</span><a id="line.268">    }</a>
+<span class="sourceLineNo">269</span><a id="line.269"></a>
+<span class="sourceLineNo">270</span><a id="line.270">    // === Service 
Implementation ===========================================</a>
+<span class="sourceLineNo">271</span><a id="line.271">    /**</a>
+<span class="sourceLineNo">272</span><a id="line.272">     * @throws 
SchedulerException generic exception</a>
+<span class="sourceLineNo">273</span><a id="line.273">     */</a>
+<span class="sourceLineNo">274</span><a id="line.274">    private void 
logSchedulerConfiguration() throws SchedulerException</a>
+<span class="sourceLineNo">275</span><a id="line.275">    {</a>
+<span class="sourceLineNo">276</span><a id="line.276">        for (String 
jobGroup : getScheduler().getJobGroupNames())</a>
+<span class="sourceLineNo">277</span><a id="line.277">        {</a>
+<span class="sourceLineNo">278</span><a id="line.278">            
Set&lt;JobKey&gt; jobsInGroup = 
getScheduler().getJobKeys(GroupMatcher.jobGroupEquals(jobGroup));</a>
+<span class="sourceLineNo">279</span><a id="line.279">            
getLogger().info("Job Group: " + jobGroup + " contains the following number of 
jobs : " + jobsInGroup.size());</a>
+<span class="sourceLineNo">280</span><a id="line.280">            for (JobKey 
jobKey : jobsInGroup)</a>
+<span class="sourceLineNo">281</span><a id="line.281">            {</a>
+<span class="sourceLineNo">282</span><a id="line.282">                
StringBuilder buffer = new StringBuilder();</a>
+<span class="sourceLineNo">283</span><a id="line.283">                
JobDetail jobDetail = getScheduler().getJobDetail(jobKey);</a>
+<span class="sourceLineNo">284</span><a id="line.284">                
List&lt;? extends Trigger&gt; jobTriggers = 
getScheduler().getTriggersOfJob(jobKey);</a>
+<span class="sourceLineNo">285</span><a id="line.285">                
buffer.append(jobDetail.getKey());</a>
+<span class="sourceLineNo">286</span><a id="line.286">                
buffer.append(" =&gt; ");</a>
+<span class="sourceLineNo">287</span><a id="line.287">                
if(jobTriggers != null &amp;&amp; !jobTriggers.isEmpty())</a>
+<span class="sourceLineNo">288</span><a id="line.288">                {</a>
+<span class="sourceLineNo">289</span><a id="line.289">                    
Trigger jt = jobTriggers.get(0);</a>
+<span class="sourceLineNo">290</span><a id="line.290">                    
buffer.append(jt.getKey());</a>
+<span class="sourceLineNo">291</span><a id="line.291">                    
buffer.append(" (");</a>
+<span class="sourceLineNo">292</span><a id="line.292">                    
buffer.append(jt.getNextFireTime());</a>
+<span class="sourceLineNo">293</span><a id="line.293">                    
buffer.append(")");</a>
+<span class="sourceLineNo">294</span><a id="line.294">                }</a>
+<span class="sourceLineNo">295</span><a id="line.295">                else</a>
+<span class="sourceLineNo">296</span><a id="line.296">                {</a>
+<span class="sourceLineNo">297</span><a id="line.297">                    
buffer.append("no trigger defined");</a>
+<span class="sourceLineNo">298</span><a id="line.298">                }</a>
+<span class="sourceLineNo">299</span><a id="line.299"></a>
+<span class="sourceLineNo">300</span><a id="line.300">                
getLogger().info(buffer.toString());</a>
+<span class="sourceLineNo">301</span><a id="line.301">            }</a>
+<span class="sourceLineNo">302</span><a id="line.302">        }</a>
+<span class="sourceLineNo">303</span><a id="line.303">    }</a>
+<span class="sourceLineNo">304</span><a id="line.304">}</a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</main>
+</body>
 </html>
\ No newline at end of file


Reply via email to