View Javadoc

1   /*
2    * $Id: EventGeneratorJob.java 11613 2008-04-20 20:30:10Z rossmason $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.transport.quartz.jobs;
12  
13  import org.mule.DefaultMuleMessage;
14  import org.mule.RegistryContext;
15  import org.mule.transport.AbstractConnector;
16  import org.mule.transport.AbstractMessageReceiver;
17  import org.mule.transport.NullPayload;
18  import org.mule.transport.quartz.QuartzConnector;
19  import org.mule.transport.quartz.QuartzMessageReceiver;
20  import org.mule.transport.quartz.i18n.QuartzMessages;
21  
22  import org.apache.commons.logging.Log;
23  import org.apache.commons.logging.LogFactory;
24  import org.quartz.Job;
25  import org.quartz.JobDataMap;
26  import org.quartz.JobExecutionContext;
27  import org.quartz.JobExecutionException;
28  
29  /**
30   * Will generate a new event based o the scheduled time. The payload of the event is
31   * currently a static object or instance of {@link org.mule.transport.NullPayload} if no payload
32   * has been set.
33   *
34   * We may want to extend this but allowing the payload to be generated using a factory.
35   */
36  public class EventGeneratorJob implements Job
37  {
38  
39      /**
40       * The logger used for this class
41       */
42      protected transient Log logger = LogFactory.getLog(getClass());
43  
44      public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException
45      {
46          JobDataMap map = jobExecutionContext.getJobDetail().getJobDataMap();
47  
48          String receiverKey = (String)map.get(QuartzMessageReceiver.QUARTZ_RECEIVER_PROPERTY);
49          if (receiverKey == null)
50              throw new JobExecutionException(QuartzMessages.receiverNotInJobDataMap().getMessage());
51  
52          String connectorName = (String)map.get(QuartzMessageReceiver.QUARTZ_CONNECTOR_PROPERTY);
53          if (connectorName == null)
54              throw new JobExecutionException(QuartzMessages.connectorNotInJobDataMap().getMessage());
55  
56          AbstractConnector connector = (AbstractConnector) RegistryContext.getRegistry().lookupConnector(connectorName);
57          if (connector == null)
58              throw new JobExecutionException(QuartzMessages.noConnectorFound(connectorName).getMessage());
59  
60          AbstractMessageReceiver receiver = (AbstractMessageReceiver)connector.lookupReceiver(receiverKey);
61          if (receiver == null)
62              throw new JobExecutionException(
63                  QuartzMessages.noReceiverInConnector(receiverKey, connectorName).getMessage());
64  
65          Object payload = jobExecutionContext.getJobDetail().getJobDataMap().get(
66              QuartzConnector.PROPERTY_PAYLOAD);
67  
68          try
69          {
70              if (payload == null)
71              {
72                  String ref = jobExecutionContext.getJobDetail().getJobDataMap().getString(
73                      QuartzConnector.PROPERTY_PAYLOAD);
74  
75                  if (ref == null)
76                  {
77                      payload = NullPayload.getInstance();
78                  }
79                  else
80                  {
81                      payload = RegistryContext.getRegistry().lookupObject(ref);
82                  }
83  
84                  if (payload==null)
85                  {
86                      logger.warn("There is no payload attached to this quartz job. Sending Null payload");
87                      payload = NullPayload.getInstance();
88                  }
89              }
90              receiver.routeMessage(new DefaultMuleMessage(receiver.getConnector().getMessageAdapter(payload)));
91          }
92          catch (Exception e)
93          {
94              receiver.handleException(e);
95          }
96      }
97  }