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
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
32
33 public class MuleReceiverJob implements Job
34 {
35
36
37
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
72
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 }