View Javadoc

1   /*
2    * $Id: MuleReceiverJob.java 8561 2007-09-24 17:10:17Z aperepel $
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.providers.quartz.jobs;
12  
13  import org.mule.MuleManager;
14  import org.mule.impl.MuleMessage;
15  import org.mule.providers.AbstractConnector;
16  import org.mule.providers.AbstractMessageReceiver;
17  import org.mule.providers.NullPayload;
18  import org.mule.providers.quartz.QuartzConnector;
19  import org.mule.providers.quartz.QuartzMessageReceiver;
20  import org.mule.providers.quartz.i18n.QuartzMessages;
21  import org.mule.umo.manager.ObjectNotFoundException;
22  import org.mule.util.StringUtils;
23  
24  import org.apache.commons.logging.Log;
25  import org.apache.commons.logging.LogFactory;
26  import org.quartz.Job;
27  import org.quartz.JobDataMap;
28  import org.quartz.JobExecutionContext;
29  import org.quartz.JobExecutionException;
30  
31  /**
32   * Invokes a Quartz Message receiver with the payload attached to the Quartz job.
33   */
34  public class MuleReceiverJob implements Job
35  {
36  
37      /**
38       * The logger used for this class
39       */
40      protected transient Log logger = LogFactory.getLog(getClass());
41  
42      public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException
43      {
44          JobDataMap map = jobExecutionContext.getJobDetail().getJobDataMap();
45  
46          String receiverKey = (String)map.get(QuartzMessageReceiver.QUARTZ_RECEIVER_PROPERTY);
47          if (receiverKey == null)
48              throw new JobExecutionException(QuartzMessages.receiverNotInJobDataMap().getMessage());
49  
50          String connectorName = (String)map.get(QuartzMessageReceiver.QUARTZ_CONNECTOR_PROPERTY);
51          if (connectorName == null)
52              throw new JobExecutionException(QuartzMessages.connectorNotInJobDataMap().getMessage());
53  
54          AbstractConnector connector = (AbstractConnector)MuleManager.getInstance().lookupConnector(connectorName);
55          if (connector == null)
56              throw new JobExecutionException(QuartzMessages.noConnectorFound(connectorName).getMessage());
57  
58          AbstractMessageReceiver receiver = (AbstractMessageReceiver)connector.lookupReceiver(receiverKey);
59          if (receiver == null)
60              throw new JobExecutionException(
61                  QuartzMessages.noReceiverInConnector(receiverKey, connectorName).getMessage());
62  
63          Object payload = jobExecutionContext.getJobDetail().getJobDataMap().get(
64              QuartzConnector.PROPERTY_PAYLOAD);
65  
66          try
67          {
68              if (payload == null)
69              {
70                  String ref = jobExecutionContext.getJobDetail().getJobDataMap().getString(
71                      QuartzConnector.PROPERTY_PAYLOAD_REFERENCE);
72                  // for backward compatibility check the old payload Class property
73                  // too
74                  if (ref == null)
75                  {
76                      ref = StringUtils.defaultIfEmpty(jobExecutionContext.getJobDetail().getJobDataMap().getString(
77                          QuartzConnector.PROPERTY_PAYLOAD_CLASS_NAME), null); // treat empty string as null
78                  }
79                  try
80                  {
81                      if (ref == null)
82                      {
83                          payload = NullPayload.getInstance();
84                      }
85                      else 
86                      {
87                          payload = MuleManager.getInstance().getContainerContext().getComponent(ref);
88                      }
89                  }
90                  catch (ObjectNotFoundException e)
91                  {
92                      logger.warn("There is no payload attached to this quartz job. Sending Null payload");
93                      payload = NullPayload.getInstance();
94                  }
95              }
96              receiver.routeMessage(new MuleMessage(receiver.getConnector().getMessageAdapter(payload)));
97          }
98          catch (Exception e)
99          {
100             receiver.handleException(e);
101         }
102     }
103 }