You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@turbine.apache.org by gk...@apache.org on 2021/08/04 08:28:06 UTC
svn commit: r1076294 [13/46] - in
/websites/production/turbine/content/fulcrum/fulcrum-quartz: ./ apidocs/
apidocs/jquery/ apidocs/jquery/external/ apidocs/jquery/external/jquery/
apidocs/jquery/images/ apidocs/jquery/jszip-utils/ apidocs/jquery/jszip-...
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 <a href="mailto:leandro@ibnetwork.com.br">Leandro Rodrigo Saad Cruz</a><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 <a href="mailto:leandro@ibnetwork.com.br">Leandro Rodrigo Saad Cruz</a></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<Matcher<JobKey>>());<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<JobKey> 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<? extends Trigger> 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(" => ");<a name="line.286"></a>
-<span class="sourceLineNo">287</span> if(jobTriggers != null && !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<Matcher<JobKey>>());</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<JobKey> 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<? extends Trigger> 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(" => ");</a>
+<span class="sourceLineNo">287</span><a id="line.287"> if(jobTriggers != null && !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