1
2
3
4
5
6
7
8
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
33
34 public class MuleReceiverJob implements Job
35 {
36
37
38
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
73
74 if (ref == null)
75 {
76 ref = StringUtils.defaultIfEmpty(jobExecutionContext.getJobDetail().getJobDataMap().getString(
77 QuartzConnector.PROPERTY_PAYLOAD_CLASS_NAME), 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 }