1
2
3
4
5
6
7
8
9
10
11 package org.mule.transport.quartz.jobs;
12
13 import org.mule.api.MuleContext;
14 import org.mule.api.MuleMessage;
15 import org.mule.api.config.MuleProperties;
16 import org.mule.transport.AbstractConnector;
17 import org.mule.transport.AbstractMessageReceiver;
18 import org.mule.transport.NullPayload;
19 import org.mule.transport.quartz.QuartzConnector;
20 import org.mule.transport.quartz.QuartzMessageReceiver;
21 import org.mule.transport.quartz.i18n.QuartzMessages;
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 import org.quartz.SchedulerException;
30
31
32
33
34
35
36
37
38 public class EventGeneratorJob implements Job
39 {
40
41
42
43
44 protected transient Log logger = LogFactory.getLog(getClass());
45
46 public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException
47 {
48 MuleContext muleContext;
49 try
50 {
51 muleContext = (MuleContext)jobExecutionContext.getScheduler().getContext().get(MuleProperties.MULE_CONTEXT_PROPERTY);
52 }
53 catch (SchedulerException e)
54 {
55 throw new JobExecutionException("Failed to retrieve Mulecontext from the Scheduler Context: " + e.getMessage(), e);
56 }
57
58 JobDataMap map = jobExecutionContext.getJobDetail().getJobDataMap();
59
60 String receiverKey = (String)map.get(QuartzMessageReceiver.QUARTZ_RECEIVER_PROPERTY);
61 if (receiverKey == null)
62 {
63 throw new JobExecutionException(QuartzMessages.receiverNotInJobDataMap().getMessage());
64 }
65
66 String connectorName = (String)map.get(QuartzMessageReceiver.QUARTZ_CONNECTOR_PROPERTY);
67 if (connectorName == null)
68 {
69 throw new JobExecutionException(QuartzMessages.connectorNotInJobDataMap().getMessage());
70 }
71
72 AbstractConnector connector = (AbstractConnector) muleContext.getRegistry().lookupConnector(connectorName);
73 if (connector == null)
74 {
75 throw new JobExecutionException(QuartzMessages.noConnectorFound(connectorName).getMessage());
76 }
77
78 AbstractMessageReceiver receiver = (AbstractMessageReceiver)connector.lookupReceiver(receiverKey);
79 if (receiver == null)
80 {
81 throw new JobExecutionException(
82 QuartzMessages.noReceiverInConnector(receiverKey, connectorName).getMessage());
83 }
84
85 Object payload = jobExecutionContext.getJobDetail().getJobDataMap().get(
86 QuartzConnector.PROPERTY_PAYLOAD);
87
88 try
89 {
90 if (payload == null)
91 {
92 String ref = jobExecutionContext.getJobDetail().getJobDataMap().getString(
93 QuartzConnector.PROPERTY_PAYLOAD);
94
95 if (ref == null)
96 {
97 payload = NullPayload.getInstance();
98 }
99 else
100 {
101 payload = muleContext.getRegistry().lookupObject(ref);
102 }
103
104 if (payload==null)
105 {
106 logger.warn("There is no payload attached to this quartz job. Sending Null payload");
107 payload = NullPayload.getInstance();
108 }
109 }
110
111 MuleMessage msg = receiver.createMuleMessage(payload, receiver.getEndpoint().getEncoding());
112
113 msg.setInvocationProperty(
114 QuartzConnector.PROPERTY_JOB_DATA, jobExecutionContext.getJobDetail().getJobDataMap());
115 receiver.routeMessage(msg);
116 }
117 catch (Exception e)
118 {
119 muleContext.getExceptionListener().handleException(e);
120 }
121 }
122 }