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

📄 jobschedulingdataprocessor.java

📁 Quartz is a full-featured, open source job scheduling system that can be integrated with, or used al
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
        throws SchedulerException {        if ((job != null) && job.isValid()) {            JobDetail detail = job.getJobDetail();                        JobDetail dupeJ = sched.getJobDetail(detail.getName(), detail.getGroup());            if ((dupeJ != null) && !localOverWriteExistingJobs) {                getLog().info("Not overwriting existing job: " + dupeJ.getFullName());                return;            }                        if (dupeJ != null) {                getLog().info("Replacing job: " + detail.getFullName());            } else {                getLog().info("Adding job: " + detail.getFullName());            }                        if (job.getTriggers().size() == 0 && !job.getJobDetail().isDurable()) {                if (dupeJ == null) {                    throw new SchedulerException(                        "A new job defined without any triggers must be durable: " +                         detail.getFullName());                }                                if ((dupeJ.isDurable() &&                     (sched.getTriggersOfJob(                        detail.getName(), detail.getGroup()).length == 0))) {                    throw new SchedulerException(                        "Can't make a durable job without triggers non-durable: " +                         detail.getFullName());                }            }                        sched.addJob(detail, true);                        for (Iterator iter = job.getTriggers().iterator(); iter.hasNext(); ) {                Trigger trigger = (Trigger)iter.next();                trigger.setJobName(detail.getName());                trigger.setJobGroup(detail.getGroup());                                if(trigger.getStartTime() == null) {                    trigger.setStartTime(new Date());                }                                boolean addedTrigger = false;                while (addedTrigger == false) {                    Trigger dupeT = sched.getTrigger(trigger.getName(), trigger.getGroup());                    if (dupeT != null) {                        if (getLog().isDebugEnabled()) {                            getLog().debug(                                "Rescheduling job: " + detail.getFullName() + " with updated trigger: " + trigger.getFullName());                        }                        if(!dupeT.getJobGroup().equals(trigger.getJobGroup()) || !dupeT.getJobName().equals(trigger.getJobName())) {                            getLog().warn("Possibly duplicately named triggers in jobs xml file!");                        }                        sched.rescheduleJob(trigger.getName(), trigger.getGroup(), trigger);                    } else {                        if (getLog().isDebugEnabled()) {                            getLog().debug(                                "Scheduling job: " + detail.getFullName() + " with trigger: " + trigger.getFullName());                        }                            try {                            sched.scheduleJob(trigger);                        } catch (ObjectAlreadyExistsException e) {                            if (getLog().isDebugEnabled()) {                                getLog().debug(                                    "Adding trigger: " + trigger.getFullName() + " for job: " + detail.getFullName() +                                     " failed because the trigger already existed.  " +                                    "This is likely due to a race condition between multiple instances " +                                     "in the cluster.  Will try to reschedule instead.");                            }                            continue;                        }                    }                    addedTrigger = true;                }            }                        addScheduledJob(job);        }    }    /**     * Adds a scheduled job.     *      * @param job     *          job wrapper.     */    protected void addScheduledJob(JobSchedulingBundle job) {        scheduledJobs.put(job.getFullName(), job);    }        /**     * Adds a calendar.     *      * @param calendarBundle calendar bundle.     * @throws SchedulerException if the Calendar cannot be added to the Scheduler, or     *              there is an internal Scheduler error.     */    public void addCalendar(Scheduler sched, CalendarBundle calendarBundle) throws SchedulerException {        sched.addCalendar(            calendarBundle.getCalendarName(),            calendarBundle.getCalendar(),            calendarBundle.getReplace(),            true);    }    /**     * EntityResolver interface.     * <p/>     * Allow the application to resolve external entities.     * <p/>     * Until <code>quartz.dtd</code> has a public ID, it must resolved as a     * system ID. Here's the order of resolution (if one fails, continue to the     * next).     * <ol>     * <li>Tries to resolve the <code>systemId</code> with <code>ClassLoader.getResourceAsStream(String)</code>.     * </li>     * <li>If the <code>systemId</code> starts with <code>QUARTZ_SYSTEM_ID_PREFIX</code>,     * then resolve the part after <code>QUARTZ_SYSTEM_ID_PREFIX</code> with     * <code>ClassLoader.getResourceAsStream(String)</code>.</li>     * <li>Else try to resolve <code>systemId</code> as a URL.     * <li>If <code>systemId</code> has a colon in it, create a new <code>URL</code>     * </li>     * <li>Else resolve <code>systemId</code> as a <code>File</code> and     * then call <code>File.toURL()</code>.</li>     * </li>     * </ol>     * <p/>     * If the <code>publicId</code> does exist, resolve it as a URL.  If the     * <code>publicId</code> is the Quartz public ID, then resolve it locally.     *      * @param publicId     *          The public identifier of the external entity being referenced,     *          or null if none was supplied.     * @param systemId     *          The system identifier of the external entity being referenced.     * @return An InputSource object describing the new input source, or null     *         to request that the parser open a regular URI connection to the     *         system identifier.     * @exception SAXException     *              Any SAX exception, possibly wrapping another exception.     * @exception IOException     *              A Java-specific IO exception, possibly the result of     *              creating a new InputStream or Reader for the InputSource.     */    public InputSource resolveEntity(String publicId, String systemId) {        InputSource inputSource = null;        InputStream is = null;        URL url = null;        try {            if (publicId == null) {                if (systemId != null) {                    // resolve Quartz Schema locally                    if (QUARTZ_SCHEMA.equals(systemId)) {                        is = getClass().getResourceAsStream(QUARTZ_XSD);                    } else {                        is = getInputStream(systemId);                            if (is == null) {                            int start = systemId.indexOf(QUARTZ_SYSTEM_ID_PREFIX);                                if (start > -1) {                                String fileName = systemId                                        .substring(QUARTZ_SYSTEM_ID_PREFIX.length());                                is = getInputStream(fileName);                            } else {                                if (systemId.indexOf(':') == -1) {                                    File file = new java.io.File(systemId);                                    url = file.toURL();                                } else {                                    url = new URL(systemId);                                }                                    is = url.openStream();                            }                        }                    }                }            } else {                // resolve Quartz DTD locally                if (QUARTZ_PUBLIC_ID.equals(publicId)) {                    is = getClass().getResourceAsStream(QUARTZ_DTD);                } else {                    url = new URL(systemId);                    is = url.openStream();                }            }        } catch (Exception e) {            e.printStackTrace();        } finally {            if (is != null) {                inputSource = new InputSource(is);                inputSource.setPublicId(publicId);                inputSource.setSystemId(systemId);            }        }        return inputSource;    }    /**     * ErrorHandler interface.     *      * Receive notification of a warning.     *      * @param e     *          The error information encapsulated in a SAX parse exception.     * @exception SAXException     *              Any SAX exception, possibly wrapping another exception.     */    public void warning(SAXParseException e) throws SAXException {        addValidationException(e);    }    /**     * ErrorHandler interface.     *      * Receive notification of a recoverable error.     *      * @param e     *          The error information encapsulated in a SAX parse exception.     * @exception SAXException     *              Any SAX exception, possibly wrapping another exception.     */    public void error(SAXParseException e) throws SAXException {        addValidationException(e);    }    /**     * ErrorHandler interface.     *      * Receive notification of a non-recoverable error.     *      * @param e     *          The error information encapsulated in a SAX parse exception.     * @exception SAXException     *              Any SAX exception, possibly wrapping another exception.     */    public void fatalError(SAXParseException e) throws SAXException {        addValidationException(e);    }    /**     * Adds a detected validation exception.     *      * @param e     *          SAX exception.     */    protected void addValidationException(SAXException e) {        validationExceptions.add(e);    }    /**     * Resets the the number of detected validation exceptions.     */    protected void clearValidationExceptions() {        validationExceptions.clear();    }    /**     * Throws a ValidationException if the number of validationExceptions     * detected is greater than zero.     *      * @exception ValidationException     *              DTD validation exception.     */    protected void maybeThrowValidationException() throws ValidationException {        if (validationExceptions.size() > 0) {            throw new ValidationException(validationExceptions);        }    }        /**     * RuleSet for common Calendar tags.      *      * @author <a href="mailto:bonhamcm@thirdeyeconsulting.com">Chris Bonham</a>     */    public class CalendarRuleSet extends RuleSetBase {        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.addBeanPropertySetter(prefix + "/" + TAG_DESCRIPTION, "description");            digester.addBeanPropertySetter(prefix + "/" + TAG_VOLATILITY, "volatility");            digester.addRule(prefix + "/" + TAG_MISFIRE_INSTRUCTION, new MisfireInstructionRule("misfireInstruction"));            digester.addBeanPropertySetter(prefix + "/" + TAG_CALENDAR_NAME, "calendarName");            digester.addObjectCreate(prefix + "/" + TAG_JOB_DATA_MAP, JobDataMap.class);            digester.addCallMethod(prefix + "/" + TAG_JOB_DATA_MAP + "/" + TAG_ENTRY, "put", 2, new Class[] { Object.class, Object.class });            digester.addCallParam(prefix + "/" + TAG_JOB_DATA_MAP + "/" + TAG_ENTRY + "/" + TAG_KEY, 0);            digester.addCallParam(prefix + "/" + TAG_JOB_DATA_MAP + "/" + TAG_ENTRY + "/" + TAG_VALUE, 1);            digester.addSetNext(prefix + "/" + TAG_JOB_DATA_MAP, "setJobDataMap");            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));        }    }    

⌨️ 快捷键说明

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