View Javadoc

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