⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jobschedulingdataprocessor.java

📁 定时器开源项目, 相对于 jcrontab, Quartz 算是更完整的一个项目, 随著开发的版本上来, 他已经脱离只是写在程序里面的计时器, 在指定的时间或区间, 处理所指定的事件. 也加入了 se
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        protected String prefix;        protected String setNextMethodName;                public CalendarRuleSet(String prefix, String setNextMethodName) {            super();            this.prefix = prefix;            this.setNextMethodName = setNextMethodName;        }        public void addRuleInstances(Digester digester) {            digester.addObjectCreate(prefix, CalendarBundle.class);            digester.addSetProperties(prefix, TAG_CLASS_NAME, "className");            digester.addBeanPropertySetter(prefix + "/" + TAG_NAME, "calendarName");            digester.addBeanPropertySetter(prefix + "/" + TAG_DESCRIPTION, "description");            digester.addSetNext(prefix, setNextMethodName);        }    }    /**     * RuleSet for common Trigger tags.      *      * @author <a href="mailto:bonhamcm@thirdeyeconsulting.com">Chris Bonham</a>     */    public class TriggerRuleSet extends RuleSetBase {        protected String prefix;        protected Class clazz;        public TriggerRuleSet(String prefix, Class clazz) {            super();            this.prefix = prefix;            if (!Trigger.class.isAssignableFrom(clazz)) {                throw new IllegalArgumentException("Class must be an instance of Trigger");            }            this.clazz = clazz;        }        public void addRuleInstances(Digester digester) {            digester.addObjectCreate(prefix, clazz);            digester.addBeanPropertySetter(prefix + "/" + TAG_NAME, "name");            digester.addBeanPropertySetter(prefix + "/" + TAG_GROUP, "group");            digester.addRule(prefix + "/" + TAG_MISFIRE_INSTRUCTION, new MisfireInstructionRule("misfireInstruction"));            digester.addBeanPropertySetter(prefix + "/" + TAG_CALENDAR_NAME, "calendarName");            digester.addBeanPropertySetter(prefix + "/" + TAG_JOB_NAME, "jobName");            digester.addBeanPropertySetter(prefix + "/" + TAG_JOB_GROUP, "jobGroup");            Converter converter = new DateConverter(new String[] { XSD_DATE_FORMAT, DTD_DATE_FORMAT });            digester.addRule(prefix + "/" + TAG_START_TIME, new SimpleConverterRule("startTime", converter, Date.class));            digester.addRule(prefix + "/" + TAG_END_TIME, new SimpleConverterRule("endTime", converter, Date.class));        }    }        /**     * This rule is needed to fix <a href="http://jira.opensymphony.com/browse/QUARTZ-153">QUARTZ-153</a>.     * <p>     * Since the Jakarta Commons BeanUtils 1.6.x <code>ConvertUtils</code> class uses static utility      * methods, the <code>DateConverter</code> and <code>TimeZoneConverter</code> were     * overriding any previously registered converters for <code>java.util.Date</code> and     * <code>java.util.TimeZone</code>.     * <p>     * Jakarta Commons BeanUtils 1.7.x fixes this issue by internally using per-context-classloader     * pseudo-singletons (see <a href="http://jakarta.apache.org/commons/beanutils/commons-beanutils-1.7.0/RELEASE-NOTES.txt">     * http://jakarta.apache.org/commons/beanutils/commons-beanutils-1.7.0/RELEASE-NOTES.txt</a>).     * This ensures web applications in the same JVM are using independent converters     * based on their classloaders.  However, the environment for QUARTZ-153 started Quartz     * using the <code>QuartzInitializationServlet</code> which started <code>JobInitializationPlugin</code>.       * In this case, the web classloader instances would be the same.     * <p>     * To make sure the converters aren't overridden by the <code>JobSchedulingDataProcessor</code>,     * it's easier to just override <code>BeanPropertySetterRule.end()</code> to convert the     * body text to the specified class using the specified converter.     *      * @author <a href="mailto:bonhamcm@thirdeyeconsulting.com">Chris Bonham</a>     */    public class SimpleConverterRule extends BeanPropertySetterRule {        private Converter converter;        private Class clazz;                /**         * <p>Construct rule that sets the given property from the body text.</p>         *         * @param propertyName name of property to set         * @param converter    converter to use         * @param clazz        class to convert to         */        public SimpleConverterRule(String propertyName, Converter converter, Class clazz) {            this.propertyName = propertyName;            if (converter == null) {                throw new IllegalArgumentException("Converter must not be null");            }            this.converter = converter;            if (clazz == null) {                throw new IllegalArgumentException("Class must not be null");            }            this.clazz = clazz;        }        /**         * Process the end of this element.         *         * @param namespace the namespace URI of the matching element, or an          *   empty string if the parser is not namespace aware or the element has         *   no namespace         * @param name the local name if the parser is namespace aware, or just          *   the element name otherwise         *         * @exception NoSuchMethodException if the bean does not         *  have a writeable property of the specified name         */        public void end(String namespace, String name) throws Exception {            String property = propertyName;            if (property == null) {                // If we don't have a specific property name,                // use the element name.                property = name;            }            // Get a reference to the top object            Object top = this.digester.peek();            // log some debugging information            if (getDigester().getLogger().isDebugEnabled()) {                getDigester().getLogger().debug("[BeanPropertySetterRule]{" + getDigester().getMatch() +                        "} Set " + top.getClass().getName() + " property " +                                   property + " with text " + bodyText);            }            // Force an exception if the property does not exist            // (BeanUtils.setProperty() silently returns in this case)            if (top instanceof DynaBean) {                DynaProperty desc =                    ((DynaBean) top).getDynaClass().getDynaProperty(property);                if (desc == null) {                    throw new NoSuchMethodException                        ("Bean has no property named " + property);                }            } else /* this is a standard JavaBean */ {                PropertyDescriptor desc =                    PropertyUtils.getPropertyDescriptor(top, property);                if (desc == null) {                    throw new NoSuchMethodException                        ("Bean has no property named " + property);                }            }            // Set the property only using this converter            Object value = converter.convert(clazz, bodyText);            PropertyUtils.setProperty(top, property, value);        }    }        /**     * This rule translates the trigger misfire instruction constant name into its     * corresponding value.     *      * @TODO Consider removing this class and using a     * <code>org.apache.commons.digester.Substitutor</code> strategy once     * Jakarta Commons Digester 1.6 is final.       *      * @author <a href="mailto:bonhamcm@thirdeyeconsulting.com">Chris Bonham</a>     */    public class MisfireInstructionRule extends BeanPropertySetterRule {        /**         * <p>Construct rule that sets the given property from the body text.</p>         *         * @param propertyName name of property to set         */        public MisfireInstructionRule(String propertyName) {            this.propertyName = propertyName;        }        /**         * Process the body text of this element.         *         * @param namespace the namespace URI of the matching element, or an          *   empty string if the parser is not namespace aware or the element has         *   no namespace         * @param name the local name if the parser is namespace aware, or just          *   the element name otherwise         * @param text The text of the body of this element         */        public void body(String namespace, String name, String text)            throws Exception {            super.body(namespace, name, text);            this.bodyText = getConstantValue(bodyText);        }        /**         * Returns the value for the constant name.         * If the constant can't be found or any exceptions occur,         * return 0.         *          * @param constantName  constant name.         * @return the value for the constant name.         */        private String getConstantValue(String constantName) {            String value = "0";            Object top = this.digester.peek();            if (top != null) {                Class clazz = top.getClass();                try {                    java.lang.reflect.Field field = clazz.getField(constantName);                    Object fieldValue = field.get(top);                    if (fieldValue != null) {                        value = fieldValue.toString();                    }                }                catch (Exception e) {                    // ignore                }            }            return value;        }    }    /**     * <p>Standard {@link Converter} implementation that converts an incoming     * String into a <code>java.util.Date</code> object, optionally using a     * default value or throwing a {@link ConversionException} if a conversion     * error occurs.</p>     */    public final class DateConverter implements Converter {        // ----------------------------------------------------------- Constructors        /**         * Create a {@link Converter} that will throw a {@link ConversionException}         * if a conversion error occurs.         */        public DateConverter() {            this.defaultValue = null;            this.useDefault = false;        }        /**         * Create a {@link Converter} that will return the specified default value         * if a conversion error occurs.         *         * @param defaultValue The default value to be returned         */        public DateConverter(Object defaultValue) {            this.defaultValue = defaultValue;            this.useDefault = true;        }        public DateConverter(String[] formats) {            this();                        int len = formats.length;            dateFormats = new DateFormat[len];            for (int i = 0; i < len; i++) {                dateFormats[i] = new SimpleDateFormat(formats[i]);            }        }        // ----------------------------------------------------- Instance Variables        /**         * The default value specified to our Constructor, if any.         */        private Object defaultValue = null;        /**         * Should we return the default value on conversion errors?         */        private boolean useDefault = true;        private DateFormat[] dateFormats;        // --------------------------------------------------------- Public Methods        /**         * Convert the specified input object into an output object of the         * specified type.         *         * @param type Data type to which this value should be converted         * @param value The input value to be converted         *         * @exception ConversionException if conversion cannot be performed         *  successfully         */        public Object convert(Class type, Object value) {            if (value == null) {                if (useDefault) {                    return (defaultValue);                }                else {                    return (null);                }            }            if (String.class.equals(type)) {                if ((value instanceof Date) && (dateFormats != null)) {                    return (dateFormats[0].format((Date) value));                }                else {                    return (value.toString());                }            }            if (value instanceof Date) {                return (value);            }            try {                if (Date.class.isAssignableFrom(type) && dateFormats != null) {                    return parseDate(value);                }                else {                    return (value.toString());                }            }            catch (Exception e) {                if (useDefault) {                    return (defaultValue);                }                else {                    throw new ConversionException(e);                }            }        }                protected Date parseDate(Object value) throws ParseException {            Date date = null;            int len = dateFormats.length;            for (int i = 0; i < len; i++) {                try {                    date = (dateFormats[i].parse(value.toString()));                    break;                }                catch (ParseException e) {                    // if this is the last format, throw the exception                    if (i == (len - 1)) {                        throw e;                    }                }            }            return date;        }    }    /**     * <p>Standard {@link Converter} implementation that converts an incoming     * String into a <code>java.util.TimeZone</code> object throwing a     * {@link ConversionException} if a conversion error occurs.</p>     */    public final class TimeZoneConverter implements Converter {        //      ----------------------------------------------------------- Constructors        /**         * Create a {@link Converter} that will throw a {@link ConversionException}         * if a conversion error occurs.         */        public TimeZoneConverter() {        }        //      --------------------------------------------------------- Public Methods        /**         * Convert the specified input object into an output object of the         * specified type.         *         * @param type Data type to which this value should be converted         * @param value The input value to be converted         *         * @exception ConversionException if conversion cannot be performed         *  successfully         */        public Object convert(Class type, Object value) {            if (value == null) {                return (null);            }            if (value instanceof TimeZone) {                return (value);            }            try {                if (String.class.equals(value.getClass())) {                    return (TimeZone.getTimeZone((String) value));                }                else {                    return (value.toString());                }            }            catch (Exception e) {                throw new ConversionException(e);            }        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -