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