001    package org.apache.turbine.modules;
002    
003    
004    /*
005     * Licensed to the Apache Software Foundation (ASF) under one
006     * or more contributor license agreements.  See the NOTICE file
007     * distributed with this work for additional information
008     * regarding copyright ownership.  The ASF licenses this file
009     * to you under the Apache License, Version 2.0 (the
010     * "License"); you may not use this file except in compliance
011     * with the License.  You may obtain a copy of the License at
012     *
013     *   http://www.apache.org/licenses/LICENSE-2.0
014     *
015     * Unless required by applicable law or agreed to in writing,
016     * software distributed under the License is distributed on an
017     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
018     * KIND, either express or implied.  See the License for the
019     * specific language governing permissions and limitations
020     * under the License.
021     */
022    
023    
024    import org.apache.turbine.Turbine;
025    import org.apache.turbine.services.schedule.JobEntry;
026    import org.apache.turbine.util.RunData;
027    
028    /**
029     * ScheduledJobs loader class.
030     *
031     * @author <a href="mailto:mbryson@mindspring.com">Dave Bryson</a>
032     * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
033     * @version $Id: ScheduledJobLoader.java 1078552 2011-03-06 19:58:46Z tv $
034     */
035    public class ScheduledJobLoader
036        extends GenericLoader<ScheduledJob>
037        implements Loader<ScheduledJob>
038    {
039        /** The single instance of this class. */
040        private static ScheduledJobLoader instance = new ScheduledJobLoader();
041    
042        /**
043         * These ctor's are private to force clients to use getInstance()
044         * to access this class.
045         */
046        private ScheduledJobLoader()
047        {
048            super();
049        }
050    
051        /**
052         * Attempts to load and execute the external ScheduledJob.
053         *
054         * @param job The JobEntry.
055         * @param name Name of object that will execute the job.
056         * @exception Exception a generic exception.
057         */
058        public void exec(JobEntry job, String name)
059                throws Exception
060        {
061            // Execute job
062            getAssembler(name).run(job);
063        }
064    
065        /**
066         * Attempts to load and execute the external ScheduledJob.
067         *
068         * HELP! - THIS IS UGLY!
069         *
070         * I want the cache stuff from GenericLoader, BUT, I don't think
071         * the scheduler needs the Rundata object.  The scheduler runs
072         * independently of an HTTP request.  This should not extend
073         * GenericLoader!  Thoughts??
074         *
075         * @param data Turbine information.
076         * @param name Name of object that will execute the job.
077         * @exception Exception a generic exception.
078         */
079        @Override
080        public void exec(RunData data, String name)
081                throws Exception
082        {
083            throw new Exception("RunData objects not accepted for Scheduled jobs");
084        }
085    
086        /**
087         * Pulls out an instance of the object by name.  Name is just the
088         * single name of the object. This is equal to getInstance but
089         * returns an Assembler object and is needed to fulfil the Loader
090         * interface.
091         *
092         * @param name Name of object instance.
093         * @return A ScheduledJob with the specified name, or null.
094         * @exception Exception a generic exception.
095         */
096        public ScheduledJob getAssembler(String name)
097            throws Exception
098        {
099            return getAssembler(ScheduledJob.NAME, name);
100        }
101    
102        /**
103         * @see org.apache.turbine.modules.Loader#getCacheSize()
104         */
105        public int getCacheSize()
106        {
107            return ScheduledJobLoader.getConfiguredCacheSize();
108        }
109    
110        /**
111         * The method through which this class is accessed.
112         *
113         * @return The single instance of this class.
114         */
115        public static ScheduledJobLoader getInstance()
116        {
117            return instance;
118        }
119    
120        /**
121         * Helper method to get the configured cache size for this module
122         *
123         * @return the configure cache size
124         */
125        private static int getConfiguredCacheSize()
126        {
127            return Turbine.getConfiguration().getInt(ScheduledJob.CACHE_SIZE_KEY,
128                    ScheduledJob.CACHE_SIZE_DEFAULT);
129        }
130    }