1
2
3
4
5
6
7
8
9
10
11 package org.mule.transport.quartz.jobs;
12
13 import org.mule.api.MuleException;
14 import org.mule.api.MuleMessage;
15 import org.mule.api.ThreadSafeAccess;
16 import org.mule.api.transport.PropertyScope;
17 import org.mule.module.client.MuleClient;
18 import org.mule.transport.quartz.QuartzConnector;
19 import org.mule.transport.quartz.QuartzMessageReceiver;
20 import org.mule.transport.quartz.i18n.QuartzMessages;
21 import org.mule.transport.AbstractConnector;
22 import org.mule.transport.AbstractMessageReceiver;
23 import org.mule.RegistryContext;
24
25 import org.apache.commons.logging.Log;
26 import org.apache.commons.logging.LogFactory;
27 import org.quartz.Job;
28 import org.quartz.JobDataMap;
29 import org.quartz.JobExecutionContext;
30 import org.quartz.JobExecutionException;
31
32
33
34
35 public class EndpointPollingJob implements Job
36 {
37
38
39
40 protected transient Log logger = LogFactory.getLog(getClass());
41
42 public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException
43 {
44 JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
45
46
47 String receiverKey = (String) jobDataMap.get(QuartzMessageReceiver.QUARTZ_RECEIVER_PROPERTY);
48 if (receiverKey == null)
49 {
50 throw new JobExecutionException(QuartzMessages.receiverNotInJobDataMap().getMessage());
51 }
52
53 String connectorName = (String) jobDataMap.get(QuartzMessageReceiver.QUARTZ_CONNECTOR_PROPERTY);
54 if (connectorName == null)
55 {
56 throw new JobExecutionException(QuartzMessages.connectorNotInJobDataMap().getMessage());
57 }
58
59 AbstractConnector connector = (AbstractConnector) RegistryContext.getRegistry().lookupConnector(connectorName);
60 if (connector == null)
61 {
62 throw new JobExecutionException(QuartzMessages.noConnectorFound(connectorName).getMessage());
63 }
64
65 AbstractMessageReceiver receiver = (AbstractMessageReceiver) connector.lookupReceiver(receiverKey);
66 if (receiver == null)
67 {
68 throw new JobExecutionException(
69 QuartzMessages.noReceiverInConnector(receiverKey, connectorName).getMessage());
70 }
71
72
73 EndpointPollingJobConfig jobConfig = (EndpointPollingJobConfig) jobDataMap.get(QuartzConnector.PROPERTY_JOB_CONFIG);
74 if (jobConfig == null)
75 {
76 throw new JobExecutionException(
77 QuartzMessages.missingJobDetail(QuartzConnector.PROPERTY_JOB_CONFIG).getMessage());
78 }
79
80
81 try
82 {
83 MuleClient client = new MuleClient();
84 logger.debug("Attempting to receive event on: " + jobConfig.getEndpointRef());
85 MuleMessage result = client.request(jobConfig.getEndpointRef(), jobConfig.getTimeout());
86 if (result != null)
87 {
88 if (logger.isDebugEnabled())
89 {
90 logger.debug("Received event on: " + jobConfig.getEndpointRef());
91 }
92
93 result = (MuleMessage)((ThreadSafeAccess)result).newThreadCopy();
94
95
96 result.addProperties(jobDataMap, PropertyScope.INVOCATION);
97
98 receiver.routeMessage(result);
99 }
100 }
101 catch (MuleException e)
102 {
103 throw new JobExecutionException(e);
104 }
105 }
106 }