You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by am...@apache.org on 2008/05/27 17:23:16 UTC

svn commit: r660557 [2/2] - in /geronimo/sandbox/quartz-plugin: ./ base/ base/console/ base/console/src/ base/console/src/java/ base/console/src/java/org/ base/console/src/java/org/gplugins/ base/console/src/java/org/gplugins/console/ base/console/src/...

Added: geronimo/sandbox/quartz-plugin/base/scheduler/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/base/scheduler/pom.xml?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/base/scheduler/pom.xml (added)
+++ geronimo/sandbox/quartz-plugin/base/scheduler/pom.xml Tue May 27 08:22:56 2008
@@ -0,0 +1,76 @@
+<project
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>gplugins</groupId>
+        <artifactId>quartz-parent</artifactId>
+        <version>1.0</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>quartz-scheduler-service</artifactId>
+    <name>Quartz Scheduler for Geronimo</name>
+
+    <build>
+        <sourceDirectory>src/java</sourceDirectory>
+        <testSourceDirectory>src/test</testSourceDirectory>
+        <resources>
+            <resource>
+                <directory>src/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+        <testResources>
+            <testResource>
+                <directory>src/test-resources</directory>
+            </testResource>
+        </testResources>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-kernel</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-naming</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-deployment</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-system</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>mx4j</groupId>
+            <artifactId>mx4j</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>opensymphony</groupId>
+            <artifactId>quartz</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file

Added: geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzEJBRef.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzEJBRef.java?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzEJBRef.java (added)
+++ geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzEJBRef.java Tue May 27 08:22:56 2008
@@ -0,0 +1,62 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.gplugins.quartz;
+
+import java.io.Serializable;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * ReplaceMe
+ *
+ * @version $Rev: 46019 $ $Date: 2004-09-14 05:56:06 -0400 (Tue, 14 Sep 2004) $
+ */
+public class QuartzEJBRef implements Serializable {
+    private String propertyName;
+    private String ejbType;
+    private String localHome;
+    private String local;
+    private Properties pattern;
+
+    public QuartzEJBRef(String propertyName, String ejbType, String localHome, String local, Properties pattern) {
+        this.propertyName = propertyName;
+        this.ejbType = ejbType;
+        this.localHome = localHome;
+        this.local = local;
+        this.pattern = pattern;
+    }
+
+    public String getPropertyName() {
+        return propertyName;
+    }
+
+    public String getEjbType() {
+        return ejbType;
+    }
+
+    public String getLocalHome() {
+        return localHome;
+    }
+
+    public String getLocal() {
+        return local;
+    }
+
+    public Properties getPattern() {
+        return pattern;
+    }
+}

Added: geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzJob.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzJob.java?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzJob.java (added)
+++ geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzJob.java Tue May 27 08:22:56 2008
@@ -0,0 +1,48 @@
+/**
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.gplugins.quartz;
+
+import java.util.Map;
+import org.quartz.SchedulerException;
+
+/**
+ * Management interface for a Quartz schedule job
+ *
+ * @version $Rev: 355877 $ $Date: 2005-12-10 21:48:27 -0500 (Sat, 10 Dec 2005) $
+ */
+public interface QuartzJob {
+    String getCronExpression();
+
+    void setCronExpression(String cronExpression) throws SchedulerException;
+
+    String getJobClass();
+
+    void setJobClass(String jobClass);
+
+    String getName();
+
+    void setName(String name);
+
+    Map getJobData();
+
+    void setJobData(Map jobData);
+
+    void pause() throws SchedulerException;
+
+    void resume() throws SchedulerException;
+
+    void execute() throws SchedulerException;
+}

Added: geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzJobFactory.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzJobFactory.java?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzJobFactory.java (added)
+++ geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzJobFactory.java Tue May 27 08:22:56 2008
@@ -0,0 +1,94 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.gplugins.quartz;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.Iterator;
+import java.util.Map;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.geronimo.naming.reference.ConfigurationAwareReference;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.KernelRegistry;
+import org.quartz.Job;
+import org.quartz.SchedulerException;
+import org.quartz.simpl.SimpleJobFactory;
+import org.quartz.spi.TriggerFiredBundle;
+
+/**
+ * ReplaceMe
+ *
+ * @version $Rev: 46019 $ $Date: 2004-09-14 05:56:06 -0400 (Tue, 14 Sep 2004) $
+ */
+public class QuartzJobFactory extends SimpleJobFactory {
+    private static final String PROPERTY_PREFIX = "org.gplugins.quartz.";
+    private final static Log log = LogFactory.getLog(QuartzJobFactory.class);
+
+    public Job newJob(TriggerFiredBundle bundle) throws SchedulerException {
+        Kernel kernel = KernelRegistry.getSingleKernel();
+        Job job = super.newJob(bundle);
+        Map map = bundle.getJobDetail().getJobDataMap();
+        for (Iterator it = map.keySet().iterator(); it.hasNext();) {
+            String key = (String) it.next();
+            if(key.startsWith(PROPERTY_PREFIX)) {
+                processKey(kernel, job, bundle.getJobDetail().getName(), key.substring(PROPERTY_PREFIX.length()), map.get(key));
+            }
+        }
+
+        return job;
+    }
+
+    private void processKey(Kernel kernel, Job job, String jobName, String name, Object value) throws SchedulerException {
+        if(name.startsWith("ejb.")) {
+            injectReference(value, kernel, name, job, jobName, 4, "EJB Reference");
+        } else if(name.startsWith("resource.")) {
+            injectReference(value, kernel, name, job, jobName, 9, "Resource Reference");
+        } else if(name.startsWith("gbean.")) {
+            injectReference(value, kernel, name, job, jobName, 6, "GBean Reference");
+        } else {
+            throw new SchedulerException("Unrecognized job parameter '"+name+"'");
+        }
+    }
+
+    private void injectReference(Object value, Kernel kernel, String name, Job job, String jobName, int prefixLength,
+                                 String refType) throws SchedulerException {
+        ConfigurationAwareReference ref = (ConfigurationAwareReference) value;
+        ref.setKernel(kernel);
+        String property = name.substring(prefixLength);
+        String setterName = "set"+Character.toUpperCase(property.charAt(0))+property.substring(1);
+        Method all[] = job.getClass().getMethods();
+        try {
+            Object refValue = ref.getContent();
+            for (int i = 0; i < all.length; i++) {
+                Method method = all[i];
+                if(method.getName().equals(setterName) && method.getParameterTypes().length == 1 &&
+                        Modifier.isPublic(method.getModifiers()) && !Modifier.isStatic(method.getModifiers()) &&
+                        method.getReturnType().equals(Void.TYPE)) {
+                    if(method.getParameterTypes()[0].isAssignableFrom(refValue.getClass())) {
+                        method.invoke(job, new Object[]{refValue});
+                        return;
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("Unable to set "+refType+" on Quartz job", e);
+            throw new SchedulerException("Unable to set "+refType+" '"+property+"' on job "+jobName, e);
+        }
+        throw new SchedulerException("No setter method "+setterName+" found for "+refType+" "+property+" on job "+jobName);
+    }
+}

Added: geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzJobGBean.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzJobGBean.java?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzJobGBean.java (added)
+++ geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzJobGBean.java Tue May 27 08:22:56 2008
@@ -0,0 +1,155 @@
+/**
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.gplugins.quartz;
+
+import java.text.ParseException;
+import java.util.Map;
+import org.apache.geronimo.gbean.GBeanLifecycle;
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.quartz.JobDetail;
+import org.quartz.CronTrigger;
+import org.quartz.SchedulerException;
+import org.quartz.JobDataMap;
+
+/**
+ * Represents a Quartz job.
+ *
+ * @version $Rev: 355877 $ $Date: 2005-12-10 21:48:27 -0500 (Sat, 10 Dec 2005) $
+ */
+public class QuartzJobGBean implements GBeanLifecycle, QuartzJob {
+    private final static Log log = LogFactory.getLog(QuartzJobGBean.class);
+    private final QuartzScheduler scheduler;
+    private final ClassLoader loader;
+    private String name;
+    private String jobClass;
+    private Map jobData;
+    private String cronExpression;
+    boolean running;
+
+    public QuartzJobGBean(QuartzScheduler scheduler, String jobClass, Map jobData, String name, ClassLoader loader) {
+        this.jobClass = jobClass;
+        this.name = name;
+        this.jobData = jobData;
+        this.scheduler = scheduler;
+        this.loader = loader;
+    }
+
+    public String getCronExpression() {
+        return cronExpression;
+    }
+
+    public void setCronExpression(String cronExpression) throws SchedulerException {
+        this.cronExpression = cronExpression;
+        if(running) {
+            try {
+                scheduler.rescheduleJob(name, createTrigger());
+            } catch (ParseException e) {
+                throw new SchedulerException("Unable to schedule; invalid cron expression '"+cronExpression+"'", e);
+            }
+        }
+    }
+
+    public String getJobClass() {
+        return jobClass;
+    }
+
+    public void setJobClass(String jobClass) {
+        this.jobClass = jobClass;
+    }
+
+    public Map getJobData() {
+        return jobData;
+    }
+
+    public void setJobData(Map jobData) {
+        this.jobData = jobData;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void pause() throws SchedulerException {
+        if(running) {
+            scheduler.pauseJob(name);
+        }
+    }
+
+    public void resume() throws SchedulerException {
+        if(running) {
+            scheduler.resumeJob(name);
+        }
+    }
+
+    public void execute() throws SchedulerException {
+        if(running) {
+            scheduler.executeImmediately(name);
+        }
+    }
+
+    public void doStart() throws Exception {
+        log.info("Scheduling job '"+name+"'");
+        Class cls = loader.loadClass(jobClass);
+        JobDetail jd = new JobDetail(name, QuartzSchedulerGBean.GROUP_NAME, cls);
+        if(jobData != null) {
+            jd.setJobDataMap(new JobDataMap(jobData));
+        }
+        CronTrigger cronTrigger = createTrigger();
+        scheduler.scheduleJob(jd, cronTrigger);
+        running = true;
+    }
+
+    public void doStop() throws Exception {
+        running = false;
+        scheduler.deleteJob(name);
+    }
+
+    public void doFail() {
+        running = false;
+    }
+
+    private CronTrigger createTrigger() throws ParseException {
+        CronTrigger cronTrigger = new CronTrigger(name+" Trigger", QuartzSchedulerGBean.GROUP_NAME);
+        cronTrigger.setCronExpression(cronExpression);
+        return cronTrigger;
+    }
+
+    public static final GBeanInfo GBEAN_INFO;
+
+    static {
+        GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic("Quartz Job", QuartzJobGBean.class);
+        infoFactory.addAttribute("classLoader", ClassLoader.class, false);
+        infoFactory.addReference("QuartzScheduler", QuartzScheduler.class, "GBean");
+        infoFactory.addInterface(QuartzJob.class, new String[]{"cronExpression", "jobClass","name", "jobData"},
+                                                  new String[]{"cronExpression", "jobClass","name", "jobData"});
+
+        infoFactory.setConstructor(new String[]{"QuartzScheduler", "jobClass", "jobData", "name", "classLoader"});
+
+        GBEAN_INFO = infoFactory.getBeanInfo();
+    }
+
+    public static GBeanInfo getGBeanInfo() {
+        return GBEAN_INFO;
+    }
+
+}

Added: geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzScheduler.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzScheduler.java?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzScheduler.java (added)
+++ geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzScheduler.java Tue May 27 08:22:56 2008
@@ -0,0 +1,86 @@
+/**
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.gplugins.quartz;
+
+import java.util.Map;
+import org.quartz.JobDetail;
+import org.quartz.Trigger;
+import org.quartz.SchedulerException;
+import org.quartz.Scheduler;
+
+/**
+ * Management interface for the Quartz scheduler
+ *
+ * @version $Rev: 355877 $ $Date: 2005-12-10 21:48:27 -0500 (Sat, 10 Dec 2005) $
+ */
+public interface QuartzScheduler {
+    /**
+     * Provides raw access to the native Quartz scheduler.  This should be used
+     * if you don't plan to use the rest of the methods on this class.  If you
+     * like you can mix access to the native scheduler and using the other
+     * methods on this class and related plugins, but the Geronimo plugins will
+     * only see jobs created and configured through the Geronimo plugins, while
+     * the native scheduler will see everything.  It's recommended that you
+     * stick to one method or the other.
+     */
+    Scheduler getNativeScheduler();
+
+    /**
+     * Schedules a Quartz job.
+     *
+     * Note that any jobs scheduled through this mechanism must have the group
+     * name "Geronimo Quartz".  The scheduler will overwrite it to be that if
+     * necessary.
+     */
+    void scheduleJob(JobDetail detail, Trigger trigger) throws SchedulerException;
+
+    /**
+     * Deletes a scheduled job.  Assumes the group "Geronimo Quartz".
+     */
+    void deleteJob(String jobName) throws SchedulerException;
+
+    /**
+     * Returns a Map with keys of type JobDetail and values of type Trigger
+     * for all jobs scheduled with group "Geronimo Quartz".
+     */
+    Map getScheduledJobs() throws SchedulerException;
+
+    /**
+     * Sets a new Trigger for an existing job (which must be in the group
+     * "Geronimo Quartz").
+     */
+    void rescheduleJob(String jobName, Trigger trigger) throws SchedulerException;
+
+    /**
+     * Pauses an existing job (which must be in the group "Geronimo Quartz".
+     */
+    void pauseJob(String jobName) throws SchedulerException;
+
+    /**
+     * Resumes an existing job (which must be in the group "Geronimo Quartz".
+     */
+    void resumeJob(String jobName) throws SchedulerException;
+
+    /**
+     * Triggers a job (in the "Geronimo Quartz" group) to start right away.
+     */
+    void executeImmediately(String jobName) throws SchedulerException;
+
+    /**
+     * Gets the job GBean for a job in the "Geronimo Quartz" group.
+     */
+    QuartzJob getJob(String jobName);
+}

Added: geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzSchedulerGBean.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzSchedulerGBean.java?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzSchedulerGBean.java (added)
+++ geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzSchedulerGBean.java Tue May 27 08:22:56 2008
@@ -0,0 +1,191 @@
+/**
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.gplugins.quartz;
+
+import java.util.Properties;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Collections;
+import java.util.Set;
+import java.io.InputStream;
+import org.apache.geronimo.gbean.GBeanLifecycle;
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.geronimo.gbean.AbstractNameQuery;
+import org.apache.geronimo.gbean.AbstractName;
+import org.apache.geronimo.system.threads.ThreadPool;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+import org.quartz.JobDetail;
+import org.quartz.Trigger;
+import org.quartz.impl.StdSchedulerFactory;
+
+/**
+ * A GBean that starts and stops the Quartz scheduler.
+ *
+ * @version $Rev: 355877 $ $Date: 2005-12-10 21:48:27 -0500 (Sat, 10 Dec 2005) $
+ */
+public class QuartzSchedulerGBean implements GBeanLifecycle, QuartzScheduler {
+    private final static Log log = LogFactory.getLog(QuartzSchedulerGBean.class);
+    final static String GROUP_NAME="Geronimo Quartz";
+    private final Kernel kernel;
+    private String threadPoolKey;
+    private Scheduler scheduler;
+    private Properties quartzProperties;
+
+    public QuartzSchedulerGBean(Properties quartzProperties, ThreadPool pool, Kernel kernel) {
+        this.quartzProperties = quartzProperties;
+        this.kernel = kernel;
+        if(pool != null) {
+            threadPoolKey = QuartzThreadPool.addPool(pool);
+        }
+    }
+
+    public Scheduler getNativeScheduler() {
+        return scheduler;
+    }
+
+    public void scheduleJob(JobDetail detail, Trigger trigger) throws SchedulerException {
+        detail.setGroup(GROUP_NAME);
+        scheduler.scheduleJob(detail, trigger);
+    }
+
+    public void deleteJob(String jobName) throws SchedulerException {
+        scheduler.deleteJob(jobName, GROUP_NAME);
+    }
+
+    public Map getScheduledJobs() throws SchedulerException {
+        String[] names = scheduler.getJobNames(GROUP_NAME);
+        Map map = new HashMap();
+        for (int i = 0; i < names.length; i++) {
+            String name = names[i];
+            JobDetail detail = scheduler.getJobDetail(name, GROUP_NAME);
+            Trigger[] triggers = scheduler.getTriggersOfJob(name, GROUP_NAME);
+            if(triggers.length == 1) {
+                map.put(detail, triggers[0]);
+            } else {
+                map.put(detail, null);
+            }
+        }
+        return map;
+    }
+
+    public Properties getQuartzProperties() {
+        return quartzProperties;
+    }
+
+    public void setQuartzProperties(Properties quartzProperties) {
+        this.quartzProperties = quartzProperties;
+    }
+
+    public void rescheduleJob(String jobName, Trigger trigger) throws SchedulerException {
+        Trigger[] triggers = scheduler.getTriggersOfJob(jobName, GROUP_NAME);
+        for (int i = 0; i < triggers.length; i++) {
+            Trigger old = triggers[i];
+            scheduler.unscheduleJob(old.getName(), old.getGroup());
+        }
+        trigger.setJobName(jobName);
+        trigger.setJobGroup(GROUP_NAME);
+        scheduler.scheduleJob(trigger);
+    }
+
+    public void executeImmediately(String jobName) throws SchedulerException {
+        scheduler.triggerJob(jobName, GROUP_NAME);
+    }
+
+    public void pauseJob(String jobName) throws SchedulerException {
+        scheduler.pauseJob(jobName, GROUP_NAME);
+    }
+
+    public void resumeJob(String jobName) throws SchedulerException {
+        scheduler.resumeJob(jobName, GROUP_NAME);
+    }
+
+    public QuartzJob getJob(String jobName) {
+        Set results = kernel.listGBeans(new AbstractNameQuery(null, Collections.singletonMap("name", jobName), QuartzJob.class.getName()));
+        if(results.size() == 0) {
+            return null;
+        }
+        return (QuartzJob) kernel.getProxyManager().createProxy((AbstractName) results.iterator().next(), QuartzJob.class);
+    }
+
+    public void doStart() throws Exception {
+        StdSchedulerFactory factory = new StdSchedulerFactory();
+        if(threadPoolKey != null) {
+            Properties props = new Properties();
+            InputStream in = Scheduler.class.getResourceAsStream("quartz.properties");
+            props.load(in);
+            in.close();
+            for (Iterator it = props.keySet().iterator(); it.hasNext();) {
+                String key = (String) it.next();
+                if(key.startsWith("org.quartz.threadPool.")) {
+                    log.info("Ignoring thread property '"+key+"'");
+                    it.remove();
+                } else {
+                    System.out.println(key+"="+props.getProperty(key));
+                }
+            }
+            // Initialize Quartz properties
+            props.put("org.quartz.threadPool.class", QuartzThreadPool.class.getName());
+            props.put("org.quartz.scheduler.jobFactory.class", QuartzJobFactory.class.getName());
+            // Apply user overrides
+            if(quartzProperties != null) {
+                props.putAll(quartzProperties);
+            }
+            // Customize our stuff if it wasn't overridden
+            if(props.getProperty("org.quartz.threadPool.class").equals(QuartzThreadPool.class.getName())) {
+                props.put("org.quartz.threadPool.poolID", threadPoolKey);
+            }
+            // Start the factory
+            factory.initialize(props);
+        }
+        scheduler = factory.getScheduler();
+        scheduler.start();
+    }
+
+    public void doStop() throws Exception {
+        try {
+            scheduler.shutdown();
+        } catch (SchedulerException e) {
+            log.error("Quartz scheduler shutdown error", e);
+        }
+    }
+
+    public void doFail() {
+    }
+
+
+    public static final GBeanInfo GBEAN_INFO;
+
+    static {
+        GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic("Quartz Scheduler", QuartzSchedulerGBean.class);
+        infoFactory.addAttribute("quartzProperties", Properties.class, true, true);
+        infoFactory.addAttribute("kernel", Kernel.class, false, false);
+        infoFactory.addReference("ThreadPool", ThreadPool.class, "GBean");
+        infoFactory.addInterface(QuartzScheduler.class);
+        infoFactory.setConstructor(new String[]{"quartzProperties", "ThreadPool", "kernel"});
+        GBEAN_INFO = infoFactory.getBeanInfo();
+    }
+
+    public static GBeanInfo getGBeanInfo() {
+        return GBEAN_INFO;
+    }
+
+}

Added: geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzThreadPool.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzThreadPool.java?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzThreadPool.java (added)
+++ geronimo/sandbox/quartz-plugin/base/scheduler/src/java/org/gplugins/quartz/QuartzThreadPool.java Tue May 27 08:22:56 2008
@@ -0,0 +1,80 @@
+/**
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.gplugins.quartz;
+
+import java.util.Map;
+import java.util.HashMap;
+import org.apache.geronimo.system.threads.ThreadPool;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.quartz.SchedulerConfigException;
+
+
+/**
+ * A wrapper around a Geronimo thread pool for usage by Quartz.
+ *
+ * @version $Rev: 355877 $ $Date: 2005-12-10 21:48:27 -0500 (Sat, 10 Dec 2005) $
+ */
+public class QuartzThreadPool implements org.quartz.spi.ThreadPool {
+    private final static Log log = LogFactory.getLog(QuartzThreadPool.class);
+    static Map geronimoPools = new HashMap();
+
+    static String addPool(ThreadPool pool) {
+        synchronized(QuartzThreadPool.class) {
+            int count = geronimoPools.size();
+            String key = Integer.toString(count);
+            geronimoPools.put(key, pool);
+            return key;
+        }
+    }
+
+    private ThreadPool geronimoPool;
+    private String poolID;
+
+    public int getPoolSize() {
+        return geronimoPool.getPoolSize();
+    }
+
+    public void initialize() throws SchedulerConfigException {
+        log.info("Geronimo Quartz thread pool starting with Pool ID "+poolID);
+        geronimoPool = (ThreadPool) geronimoPools.get(poolID);
+        if(geronimoPool == null) {
+            throw new SchedulerConfigException("No Geronimo thread pool available ("+poolID+")!");
+        }
+    }
+
+    public boolean runInThread(Runnable runnable) {
+        try {
+            geronimoPool.execute("Quartz Scheduled Job", runnable);
+        } catch (InterruptedException e) {
+            log.error("Unable to complete schedule job", e);
+            return false;
+        }
+        return true;
+    }
+
+    public void shutdown(boolean b) {
+        geronimoPools.remove(poolID);
+    }
+
+    public String getPoolID() {
+        return poolID;
+    }
+
+    public void setPoolID(String poolID) {
+        this.poolID = poolID;
+    }
+}

Added: geronimo/sandbox/quartz-plugin/dependencies/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/dependencies/pom.xml?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/dependencies/pom.xml (added)
+++ geronimo/sandbox/quartz-plugin/dependencies/pom.xml Tue May 27 08:22:56 2008
@@ -0,0 +1,84 @@
+<project
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+  http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>gplugins</groupId>
+        <artifactId>quartz-parent</artifactId>
+        <version>1.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <groupId>gplugins</groupId>
+    <artifactId>quartz-plugin-dependencies</artifactId>
+    <name>Quartz Plugins :: Geronimo Dependencies</name>
+    
+    <dependencies>
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-gbean-deployer</artifactId>
+            <version>${geronimo-version}</version>
+            <type>car</type>
+        </dependency>
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>j2ee-server</artifactId>
+            <version>${geronimo-version}</version>
+            <type>car</type>
+        </dependency>
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>j2ee-system</artifactId>
+            <version>${geronimo-version}</version>
+            <type>car</type>
+        </dependency>
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>rmi-naming</artifactId>
+            <version>${geronimo-version}</version>
+            <type>car</type>
+        </dependency>
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>j2ee-deployer</artifactId>
+            <version>${geronimo-version}</version>
+            <type>car</type>
+        </dependency>
+        
+        <!-- Required by CARs that are missing POMs -->
+        <dependency>
+            <groupId>asm</groupId>
+            <artifactId>asm</artifactId>
+            <version>1.4.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-javamail_1.3.1_spec</artifactId>
+            <version>1.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-jms_1.1_spec</artifactId>
+            <version>1.0.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-jsp_2.0_spec</artifactId>
+            <version>1.0.1</version>
+        </dependency>
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-client</artifactId>
+            <version>${geronimo-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-webservices</artifactId>
+            <version>${geronimo-version}</version>
+        </dependency>
+    </dependencies>
+</project>

Added: geronimo/sandbox/quartz-plugin/plugins/console-jetty/src/plan/geronimo-web.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/plugins/console-jetty/src/plan/geronimo-web.xml?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/plugins/console-jetty/src/plan/geronimo-web.xml (added)
+++ geronimo/sandbox/quartz-plugin/plugins/console-jetty/src/plan/geronimo-web.xml Tue May 27 08:22:56 2008
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-1.1">
+    <environment xmlns="http://geronimo.apache.org/xml/ns/deployment-1.1">
+        <moduleId>
+            <groupId>gplugins</groupId>
+            <artifactId>quartz-console-jetty</artifactId>
+            <version>0.2.1</version>
+        </moduleId>
+        <dependencies>
+            <dependency>
+                <groupId>gplugins</groupId>
+                <artifactId>common</artifactId>
+                <type>jar</type>
+            </dependency>
+            <dependency>
+                <groupId>gplugins</groupId>
+                <artifactId>quartz-deployer</artifactId>
+                <type>car</type>
+            </dependency>
+            <dependency>
+                <groupId>geronimo</groupId>
+                <artifactId>webconsole-jetty</artifactId>
+                <type>car</type>
+            </dependency>
+        </dependencies>
+        <suppress-default-environment />
+    </environment>
+    <context-root>/quartz-console</context-root>
+    <gbean-ref xmlns="http://geronimo.apache.org/xml/ns/naming-1.1">
+        <ref-name>Scheduler</ref-name>
+        <ref-type>org.gplugins.quartz.QuartzScheduler</ref-type>
+        <pattern>
+            <name>QuartzScheduler</name>
+        </pattern>
+    </gbean-ref>
+    <security-realm-name>geronimo-properties-realm</security-realm-name>
+    <security xmlns="http://geronimo.apache.org/xml/ns/security-1.1">
+        <default-principal>
+            <principal class="org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal" name="system"/>
+        </default-principal>
+        <role-mappings>
+            <role role-name="admin">
+                <principal class="org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal" name="admin"
+                           designated-run-as="true"/>
+            </role>
+        </role-mappings>
+    </security>
+    <gbean xmlns="http://geronimo.apache.org/xml/ns/deployment-1.1"
+           name="PortletInstaller" class="org.gplugins.common.AddToConsoleGBean">
+        <attribute name="title">Quartz</attribute>
+        <attribute name="webApp">quartz-console</attribute>
+        <attribute name="portlets">[Quartz]</attribute>
+    </gbean>
+</web-app>

Added: geronimo/sandbox/quartz-plugin/plugins/console-tomcat/src/plan/geronimo-web.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/plugins/console-tomcat/src/plan/geronimo-web.xml?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/plugins/console-tomcat/src/plan/geronimo-web.xml (added)
+++ geronimo/sandbox/quartz-plugin/plugins/console-tomcat/src/plan/geronimo-web.xml Tue May 27 08:22:56 2008
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-1.1">
+    <environment xmlns="http://geronimo.apache.org/xml/ns/deployment-1.1">
+        <moduleId>
+            <groupId>gplugins</groupId>
+            <artifactId>quartz-console-tomcat</artifactId>
+            <version>0.2.1</version>
+        </moduleId>
+        <dependencies>
+            <dependency>
+                <groupId>gplugins</groupId>
+                <artifactId>common</artifactId>
+                <type>jar</type>
+            </dependency>
+            <dependency>
+                <groupId>gplugins</groupId>
+                <artifactId>quartz-deployer</artifactId>
+                <type>car</type>
+            </dependency>
+            <dependency>
+                <groupId>geronimo</groupId>
+                <artifactId>webconsole-tomcat</artifactId>
+                <type>car</type>
+            </dependency>
+        </dependencies>
+        <suppress-default-environment />
+    </environment>
+    <context-root>/quartz-console</context-root>
+    <gbean-ref xmlns="http://geronimo.apache.org/xml/ns/naming-1.1">
+        <ref-name>Scheduler</ref-name>
+        <ref-type>org.gplugins.quartz.QuartzScheduler</ref-type>
+        <pattern>
+            <name>QuartzScheduler</name>
+        </pattern>
+    </gbean-ref>
+    <security-realm-name>geronimo-properties-realm</security-realm-name>
+    <security xmlns="http://geronimo.apache.org/xml/ns/security-1.1">
+        <default-principal>
+            <principal class="org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal" name="system"/>
+        </default-principal>
+        <role-mappings>
+            <role role-name="admin">
+                <principal class="org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal" name="admin"
+                           designated-run-as="true"/>
+            </role>
+        </role-mappings>
+    </security>
+    <gbean xmlns="http://geronimo.apache.org/xml/ns/deployment-1.1"
+           name="PortletInstaller" class="org.gplugins.common.AddToConsoleGBean">
+        <attribute name="title">Quartz</attribute>
+        <attribute name="webApp">quartz-console</attribute>
+        <attribute name="portlets">[Quartz]</attribute>
+    </gbean>
+</web-app>

Added: geronimo/sandbox/quartz-plugin/plugins/deployer/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/plugins/deployer/pom.xml?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/plugins/deployer/pom.xml (added)
+++ geronimo/sandbox/quartz-plugin/plugins/deployer/pom.xml Tue May 27 08:22:56 2008
@@ -0,0 +1,85 @@
+<project
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>gplugins</groupId>
+        <artifactId>quartz-plugins-parent</artifactId>
+        <version>1.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>quartz-deployer</artifactId>
+    <packaging>car</packaging>
+    <name>Geronimo Plugin :: Quartz Deployer</name>
+
+    <dependencies>
+        <!-- For build ordering -->
+        <dependency>
+            <groupId>gplugins</groupId>
+            <artifactId>quartz-deployer-service</artifactId>
+            <scope>provided</scope>
+            <type>jar</type>
+        </dependency>
+
+        <dependency>
+            <groupId>gplugins</groupId>
+            <artifactId>quartz-scheduler-service</artifactId>
+            <scope>provided</scope>
+            <type>jar</type>
+        </dependency>
+        <dependency>
+            <groupId>gplugins</groupId>
+            <artifactId>quartz-scheduler</artifactId>
+            <scope>provided</scope>
+            <type>car</type>
+        </dependency>
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-gbean-deployer</artifactId>
+            <version>${geronimo-version}</version>
+            <type>car</type>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-j2ee-server</artifactId>
+            <version>${geronimo-version}</version>
+            <type>car</type>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-j2ee-deployer</artifactId>
+            <version>${geronimo-version}</version>
+            <type>car</type>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>${pom.basedir}/src/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.geronimo.plugins</groupId>
+                <artifactId>car-maven-plugin</artifactId>
+                <configuration>
+                    <deploymentConfigs>
+                        <deploymentConfig>geronimo/geronimo-gbean-deployer/${geronimo-version}/car</deploymentConfig>
+                        <deploymentConfig>geronimo/j2ee-deployer/${geronimo-version}/car</deploymentConfig>
+                    </deploymentConfigs>
+                    <deployerName>geronimo/geronimo-gbean-deployer/${geronimo-version}/car?j2eeType=Deployer,name=Deployer</deployerName>
+                    <planFileName>geronimo-service.xml</planFileName>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>    
+</project>

Added: geronimo/sandbox/quartz-plugin/plugins/deployer/src/plan/geronimo-service.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/plugins/deployer/src/plan/geronimo-service.xml?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/plugins/deployer/src/plan/geronimo-service.xml (added)
+++ geronimo/sandbox/quartz-plugin/plugins/deployer/src/plan/geronimo-service.xml Tue May 27 08:22:56 2008
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module xmlns="http://geronimo.apache.org/xml/ns/deployment-1.1">
+    <environment>
+        <moduleId>
+            <groupId>gplugins</groupId>
+            <artifactId>quartz-deployer</artifactId>
+            <version>${quartz-plugin-version}</version>
+            <type>car</type>
+        </moduleId>
+        <dependencies>
+            <dependency>
+                <groupId>gplugins</groupId>
+                <artifactId>quartz-scheduler</artifactId>
+                <type>car</type>
+            </dependency>
+
+            <dependency>
+                <groupId>gplugins</groupId>
+                <artifactId>quartz-deployer-service</artifactId>
+                <version>${pom.version}</version>
+                <type>jar</type>
+            </dependency>
+
+            <dependency>
+                <groupId>geronimo</groupId>
+                <artifactId>geronimo-gbean-deployer</artifactId>
+                <type>car</type>
+            </dependency>
+
+            <dependency>
+                <groupId>gplugins</groupId>
+                <artifactId>common</artifactId>
+                <type>jar</type>
+            </dependency>
+
+            <dependency>
+                <groupId>geronimo</groupId>
+                <artifactId>j2ee-server</artifactId>
+                <type>car</type>
+            </dependency>
+
+            <dependency>
+                <groupId>geronimo</groupId>
+                <artifactId>j2ee-deployer</artifactId>
+                <type>car</type>
+            </dependency>
+        </dependencies>
+    </environment>
+
+    <gbean name="QuartzDeployer" class="org.gplugins.quartz.deployment.QuartzJobDeployerGBean">
+        <reference name="Repository"/>
+        <attribute name="schedulerName">?name=QuartzScheduler</attribute>
+        <xml-attribute name="defaultEnvironment">
+            <environment>
+                <dependencies>
+                    <dependency>
+                        <groupId>gplugins</groupId>
+                        <artifactId>quartz-scheduler</artifactId>
+                        <type>car</type>
+                    </dependency>
+                </dependencies>
+            </environment>
+        </xml-attribute>
+        <reference name="ResourceReferenceBuilder">
+            <name>ConnectorBuilder</name>
+        </reference>
+        <references name="ServiceReferenceBuilder">
+            <pattern>
+                <name>WebServiceBuilder</name>
+            </pattern>
+            <pattern>
+                <name>UnavailableWebServiceBuilder</name>
+            </pattern>
+        </references>
+        <references name="EJBReferenceBuilder">
+            <pattern>
+                <name>ServerEJBReferenceBuilder</name>
+            </pattern>
+            <pattern>
+                <name>UnavailableServerEJBReferenceBuilder</name>
+            </pattern>
+        </references>
+    </gbean>
+
+    <gbean name="AddQuartzToJ2EEModules" class="org.gplugins.quartz.deployment.AddQuartzToJ2EEModule">
+        <reference name="ConfigurationManager" />
+        <reference name="QuartzJobDeployer" />
+        <reference name="QuartzScheduler" />
+    </gbean>
+</module>
\ No newline at end of file

Added: geronimo/sandbox/quartz-plugin/plugins/deployer/src/resources/META-INF/geronimo-plugin.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/plugins/deployer/src/resources/META-INF/geronimo-plugin.xml?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/plugins/deployer/src/resources/META-INF/geronimo-plugin.xml (added)
+++ geronimo/sandbox/quartz-plugin/plugins/deployer/src/resources/META-INF/geronimo-plugin.xml Tue May 27 08:22:56 2008
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<geronimo-plugin xmlns="http://geronimo.apache.org/xml/ns/plugins-1.1">
+  <name>Quartz Job Deployer</name>
+  <module-id>gplugins/quartz-deployer/${quartz-plugin-version}/car</module-id>
+  <category>Scheduling</category>
+  <description>This plugin lets you deploy Quartz jobs as Geronimo
+modules.  In other words, you can create a JAR containing the job
+classes, with a Geronimo deployment plan providing the module ID,
+classpath, and execution schedule for the job.  Then you can pack
+that plan in the JAR at META-INF/geronimo-quartz.xml or you can
+keep it outside the JAR.
+
+When you've done this, you can use the normal Geronimo deployment
+tools to deploy, start, stop, and undeploy Quartz jobs.  That
+includes the command-line deploy tool, the console, the Maven
+deployment plugin, etc.  So for example, "java -jar bin/deployer.jar
+deploy my-job.jar" would schedule a job, while "java -jar
+bin/deployer.jar stop MyJob" would suspend it.
+
+This plugin depends on the quartz-scheduler plugin that integrates
+the Quartz scheduler into Geronimo.  There's a separate plugin
+available that allows you to manage the Quartz scheduler and jobs
+with the Geronimo admin console.</description>
+  <url>http://sourceforge.net/projects/gplugins/</url>
+  <author>The Geronimo Plugins development team</author>
+  <license osi-approved="true">BSD -- Apache Software License (ASL) 2.0</license>
+  <geronimo-version>1.1.1</geronimo-version>
+  <dependency>geronimo/geronimo-gbean-deployer//car</dependency>
+  <dependency>gplugins/quartz-scheduler/${pom.version}/car</dependency>
+  <dependency>gplugins/quartz-deployer-service/${pom.version}/jar</dependency>
+  <dependency>geronimo/j2ee-server//car</dependency>
+  <dependency>geronimo/j2ee-deployer//car</dependency>
+  <obsoletes>gplugins/quartz-deployer//car</obsoletes>
+  <source-repository>http://geronimoplugins.com/repository/geronimo-1.1/</source-repository>
+  <source-repository>http://www.ibiblio.org/maven2/</source-repository>
+  <config-xml-content>
+    <gbean name="QuartzDeployer" xmlns="http://geronimo.apache.org/xml/ns/attributes-1.1">
+      <attribute name="schedulerName">?name=QuartzScheduler</attribute>
+    </gbean>
+  </config-xml-content>
+</geronimo-plugin>

Added: geronimo/sandbox/quartz-plugin/plugins/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/plugins/pom.xml?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/plugins/pom.xml (added)
+++ geronimo/sandbox/quartz-plugin/plugins/pom.xml Tue May 27 08:22:56 2008
@@ -0,0 +1,60 @@
+<project
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+  http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>gplugins</groupId>
+        <artifactId>quartz-parent</artifactId>
+        <version>1.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <groupId>gplugins</groupId>
+    <artifactId>quartz-plugins-parent</artifactId>
+    <packaging>pom</packaging>
+    <name>Quartz Plugins for Geronimo</name>
+
+    <modules>
+        <module>scheduler</module>
+        <module>deployer</module>
+<!--
+        <module>console-jetty</module>
+        <module>console-tomcat</module>
+-->
+    </modules>
+    
+    <dependencies>
+      <dependency>
+        <groupId>gplugins</groupId>
+        <artifactId>quartz-plugin-dependencies</artifactId>
+        <scope>provided</scope>
+      </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-clean-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>clean</goal>
+                        </goals>
+                        <phase>validate</phase>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.geronimo.plugins</groupId>
+                <artifactId>car-maven-plugin</artifactId>
+                <!-- Install as extention to allow 'car' packaging to be used. -->
+                <extensions>true</extensions>
+            </plugin>
+         </plugins>
+    </build>
+</project>

Added: geronimo/sandbox/quartz-plugin/plugins/scheduler/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/plugins/scheduler/pom.xml?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/plugins/scheduler/pom.xml (added)
+++ geronimo/sandbox/quartz-plugin/plugins/scheduler/pom.xml Tue May 27 08:22:56 2008
@@ -0,0 +1,61 @@
+<project
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>gplugins</groupId>
+        <artifactId>quartz-plugins-parent</artifactId>
+        <version>1.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>quartz-scheduler</artifactId>
+    <packaging>car</packaging>
+    <name>Geronimo Plugin :: Quartz Scheduler</name>
+
+    <dependencies>
+        <!-- For build ordering -->
+        <dependency>
+            <groupId>gplugins</groupId>
+            <artifactId>quartz-scheduler-service</artifactId>
+            <scope>provided</scope>
+            <type>jar</type>
+        </dependency>
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-gbean-deployer</artifactId>
+            <version>${geronimo-version}</version>
+            <type>car</type>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>${pom.basedir}/src/resources/META-INF</directory>
+                <includes>
+                    <include>geronimo-plugin.xml</include>
+                </includes>
+                <targetPath>META-INF</targetPath>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.geronimo.plugins</groupId>
+                <artifactId>car-maven-plugin</artifactId>
+                <configuration>
+                    <deploymentConfigs>
+                        <deploymentConfig>geronimo/geronimo-gbean-deployer/${geronimo-version}/car</deploymentConfig>
+                    </deploymentConfigs>
+                    <deployerName>geronimo/geronimo-gbean-deployer/${geronimo-version}/car?j2eeType=Deployer,name=Deployer</deployerName>
+                    <planFileName>geronimo-service.xml</planFileName>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>    
+</project>

Added: geronimo/sandbox/quartz-plugin/plugins/scheduler/src/plan/geronimo-service.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/plugins/scheduler/src/plan/geronimo-service.xml?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/plugins/scheduler/src/plan/geronimo-service.xml (added)
+++ geronimo/sandbox/quartz-plugin/plugins/scheduler/src/plan/geronimo-service.xml Tue May 27 08:22:56 2008
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module xmlns="http://geronimo.apache.org/xml/ns/deployment-1.1">
+
+    <environment>
+        <moduleId>
+            <groupId>gplugins</groupId>
+            <artifactId>quartz-scheduler</artifactId>
+            <version>${quartz-plugin-version}</version>
+            <type>car</type>
+        </moduleId>
+        <dependencies>
+            <dependency>
+                <groupId>gplugins</groupId>
+                <artifactId>quartz-scheduler-service</artifactId>
+                <version>${pom.version}</version>
+                <type>jar</type>
+            </dependency>
+            <dependency>
+                <groupId>geronimo</groupId>
+                <artifactId>rmi-naming</artifactId>
+                <type>car</type>
+            </dependency>
+            <dependency>
+                <groupId>opensymphony</groupId>
+                <artifactId>quartz</artifactId>
+                <type>jar</type>
+            </dependency>
+        </dependencies>
+    </environment>
+
+    <gbean name="QuartzScheduler"
+            class="org.gplugins.quartz.QuartzSchedulerGBean">
+        <attribute name="quartzProperties">
+# Override Quartz thread pool to use a Geronimo thread pool
+org.quartz.threadPool.class=org.gplugins.quartz.QuartzThreadPool
+# Support injection of Geronimo DB pools, JMS connections, EJBs, etc.
+# This is required for the Quartz Deployer plugin to work
+org.quartz.scheduler.jobFactory.class=org.gplugins.quartz.QuartzJobFactory
+        </attribute>
+        <reference name="ThreadPool">
+            <name>DefaultThreadPool</name>
+        </reference>
+    </gbean>
+</module>

Added: geronimo/sandbox/quartz-plugin/plugins/scheduler/src/resources/META-INF/geronimo-plugin.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/plugins/scheduler/src/resources/META-INF/geronimo-plugin.xml?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/plugins/scheduler/src/resources/META-INF/geronimo-plugin.xml (added)
+++ geronimo/sandbox/quartz-plugin/plugins/scheduler/src/resources/META-INF/geronimo-plugin.xml Tue May 27 08:22:56 2008
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<geronimo-plugin xmlns="http://geronimo.apache.org/xml/ns/plugins-1.1">
+  <name>Quartz Scheduler Integration</name>
+  <module-id>gplugins/quartz-scheduler/${quartz-plugin-version}/car</module-id>
+  <category>Scheduling</category>
+  <description>This plugin adds a Quartz scheduler to Geronimo.  It provides
+Geronimo components representing the scheduler and scheduled jobs, which
+can be used by other applications as well as other Geronimo modules.
+
+To use the scheduler from an application, add a gbean-ref to the Geronimo
+deployment plan for the application with ref-type org.gplugins.quartz.QuartzScheduler
+and pattern/name QuartzScheduler.  From the QuartzScheduler, you can access
+a native Quartz scheduler, schedule and delete jobs, pause and resume,
+inspect and edit individual jobs, etc.
+
+Note there are related plugins allowing you to deploy Quartz jobs as a JAR
+with XML plan defining the job schdule, and allowing you to manage the
+Quartz scheduler and jobs with the Geronimo admin console.</description>
+  <url>http://sourceforge.net/projects/gplugins/</url>
+  <author>The Geronimo Plugins development team</author>
+  <license osi-approved="true">BSD -- Apache Software License (ASL) 2.0</license>
+  <geronimo-version>1.1.1</geronimo-version>
+  <dependency>geronimo/rmi-naming//car</dependency>
+  <dependency>gplugins/quartz-scheduler-service/${pom.version}/jar</dependency>
+  <dependency>opensymphony/quartz//jar</dependency>
+  <obsoletes>gplugins/quartz-scheduler//car</obsoletes>
+  <source-repository>http://geronimoplugins.com/repository/geronimo-1.1/</source-repository>
+  <source-repository>http://www.ibiblio.org/maven2/</source-repository>
+  <config-xml-content>
+    <gbean name="QuartzScheduler" xmlns="http://geronimo.apache.org/xml/ns/attributes-1.1">
+      <attribute name="quartzProperties">
+# Override Quartz thread pool to use a Geronimo thread pool
+org.quartz.threadPool.class=org.gplugins.quartz.QuartzThreadPool
+# Support injection of Geronimo DB pools, JMS connections, EJBs, etc.
+# This is required for the Quartz Deployer plugin to work
+org.quartz.scheduler.jobFactory.class=org.gplugins.quartz.QuartzJobFactory
+      </attribute>
+      <reference name="ThreadPool">
+        <!-- The thread pool that will be used -->
+        <pattern>
+          <name>DefaultThreadPool</name>
+        </pattern>
+      </reference>
+    </gbean>
+  </config-xml-content>
+</geronimo-plugin>

Added: geronimo/sandbox/quartz-plugin/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/quartz-plugin/pom.xml?rev=660557&view=auto
==============================================================================
--- geronimo/sandbox/quartz-plugin/pom.xml (added)
+++ geronimo/sandbox/quartz-plugin/pom.xml Tue May 27 08:22:56 2008
@@ -0,0 +1,285 @@
+<project
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>gplugins</groupId>
+    <artifactId>quartz-parent</artifactId>
+    <packaging>pom</packaging>
+    <version>1.0</version>
+    <name>Quartz Plugin for Geronimo</name>
+    <properties>
+        <quartz-plugin-version>1.0</quartz-plugin-version>
+        <geronimo-version>1.1.1</geronimo-version>
+    </properties>
+    <modules>
+        <module>base/scheduler</module>
+        <module>base/deployer</module>
+        <module>base/console</module>
+        <module>plugins</module>
+        <module>dependencies</module>
+    </modules>
+
+    <repositories>
+        <repository>
+            <id>aaron-people-repository</id>
+            <name>Aaron's People Repository</name>
+            <url>http://people.apache.org/~ammulder/</url>
+        </repository>
+    </repositories>
+
+    <pluginRepositories>
+        <pluginRepository>
+            <id>apache-snapshots</id>
+            <name>Apache Snapshots Repository</name>
+            <url>http://people.apache.org/repo/m2-snapshot-repository</url>
+            <layout>default</layout>
+            <snapshots>
+                <enabled>true</enabled>
+                <updatePolicy>daily</updatePolicy>
+                <checksumPolicy>ignore</checksumPolicy>
+            </snapshots>
+            <releases>
+                <enabled>false</enabled>
+            </releases>
+        </pluginRepository>
+        <pluginRepository>
+            <id>codehaus-snapshots</id>
+            <name>Codehaus Snapshots Repository</name>
+            <url>http://snapshots.repository.codehaus.org/</url>
+            <layout>default</layout>
+            <snapshots>
+                <enabled>true</enabled>
+                <updatePolicy>daily</updatePolicy>
+                <checksumPolicy>ignore</checksumPolicy>
+            </snapshots>
+            <releases>
+                <enabled>false</enabled>
+            </releases>
+        </pluginRepository>
+    </pluginRepositories>
+
+  <dependencyManagement>
+    <dependencies>
+      <!-- Modules built by this project -->
+        <dependency>
+            <groupId>gplugins</groupId>
+            <artifactId>quartz-scheduler-service</artifactId>
+            <version>${quartz-plugin-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>gplugins</groupId>
+            <artifactId>quartz-deployer-service</artifactId>
+            <version>${quartz-plugin-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>gplugins</groupId>
+            <artifactId>quartz-console-service</artifactId>
+            <version>${quartz-plugin-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>gplugins</groupId>
+            <artifactId>quartz-plugin-dependencies</artifactId>
+            <version>${quartz-plugin-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>gplugins</groupId>
+            <artifactId>quartz-scheduler</artifactId>
+            <version>${quartz-plugin-version}</version>
+            <type>car</type>
+        </dependency>
+        <dependency>
+            <groupId>gplugins</groupId>
+            <artifactId>quartz-deployer</artifactId>
+            <version>${quartz-plugin-version}</version>
+            <type>car</type>
+        </dependency>
+        <dependency>
+            <groupId>gplugins</groupId>
+            <artifactId>quartz-console</artifactId>
+            <version>${quartz-plugin-version}</version>
+            <type>car</type>
+        </dependency>
+
+      <!-- Modules from other projects -->
+        <dependency>
+            <groupId>gplugins</groupId>
+            <artifactId>common</artifactId>
+            <version>1.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-kernel</artifactId>
+            <version>${geronimo-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-core</artifactId>
+            <version>${geronimo-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-transaction</artifactId>
+            <version>${geronimo-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-security</artifactId>
+            <version>${geronimo-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-util</artifactId>
+            <version>${geronimo-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-webservices</artifactId>
+            <version>${geronimo-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-naming</artifactId>
+            <version>${geronimo-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-deployment</artifactId>
+            <version>${geronimo-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-system</artifactId>
+            <version>${geronimo-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-service-builder</artifactId>
+            <version>${geronimo-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-common</artifactId>
+            <version>${geronimo-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-naming-builder</artifactId>
+            <version>${geronimo-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-j2ee-builder</artifactId>
+            <version>${geronimo-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-j2ee-schema</artifactId>
+            <version>${geronimo-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-j2ee</artifactId>
+            <version>${geronimo-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>rmi-naming</artifactId>
+            <version>${geronimo-version}</version>
+            <type>car</type>
+        </dependency>
+
+        <dependency>
+            <groupId>mx4j</groupId>
+            <artifactId>mx4j</artifactId>
+            <version>3.0.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>opensymphony</groupId>
+            <artifactId>quartz</artifactId>
+            <version>1.5.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+            <version>1.0.4</version>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>3.8.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>xmlbeans</groupId>
+            <artifactId>xbean</artifactId>
+            <version>2.0.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>stax</groupId>
+            <artifactId>stax-api</artifactId>
+            <version>1.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>taglibs</groupId>
+            <artifactId>standard</artifactId>
+            <version>1.1.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>jstl</groupId>
+            <artifactId>jstl</artifactId>
+            <version>1.1.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>portlet-api</groupId>
+            <artifactId>portlet-api</artifactId>
+            <version>1.0</version>
+        </dependency>
+
+    </dependencies>
+  </dependencyManagement>
+
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-clean-plugin</artifactId>
+                    <version>2.1</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.geronimo.plugins</groupId>
+                    <artifactId>car-maven-plugin</artifactId>
+                    <version>1.1</version>
+                    <extensions>true</extensions>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+</project>