我下注并添加了我自己的几乎空的ScheduledEventMessageComposer
并且我的工作延长了AbstractActionLifecycle
jboss-esb.xml
:
<?xml version="1.0"?>
<jbossesb parameterReloadSecs="300"
xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd">
<providers>
<schedule-provider name="schedule">
<!-- fire every hour -->
<cron-schedule cronExpression="0 1 * * * ?" scheduleid="cron-trigger"/>
</schedule-provider>
</providers>
<services>
<service category="dummy" description="create dummy message" name="dummy-message">
<listeners>
<scheduled-listener event-processor="org.example.ActionMsgComposer"
name="cron-schedule-listener" scheduleidref="cron-trigger"/>
</listeners>
<actions mep="OneWay">
<action class="org.example.CronAction" name="action" process="execute"/>
</actions>
</service>
</services>
</jbossesb>
org.example.ActionMsgComposer
:
package org.example;
import org.jboss.soa.esb.ConfigurationException;
import org.jboss.soa.esb.helpers.ConfigTree;
import org.jboss.soa.esb.listeners.ScheduledEventMessageComposer;
import org.jboss.soa.esb.message.Message;
import org.jboss.soa.esb.message.format.MessageFactory;
import org.jboss.soa.esb.message.format.MessageType;
import org.jboss.soa.esb.schedule.SchedulingException;
public class ActionMsgComposer implements ScheduledEventMessageComposer {
public void initialize(ConfigTree config) throws ConfigurationException {
}
public void uninitialize() {
}
public Message composeMessage() throws SchedulingException {
Message myMessage = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
myMessage.getBody().add("dummy");
return myMessage;
}
public Message onProcessingComplete(Message message)
throws SchedulingException {
return message;
}
}
org.example.CronAction
:
package org.example;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Collection;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.regex.Pattern;
import org.jboss.soa.esb.actions.AbstractActionLifecycle;
import org.jboss.soa.esb.actions.ActionLifecycleException;
import org.jboss.soa.esb.helpers.ConfigTree;
import org.jboss.soa.esb.message.Message;
public class CronAction extends AbstractActionLifecycle {
private ConfigTree configTree;
private boolean initialized = false;
private final Lock initLock = new ReentrantLock(true);
private final Condition initCondition = initLock.newCondition();
public CronAction(ConfigTree config) {
configTree = config;
}
public ConfigTree getConfigTree() {
return configTree;
}
@Override
public void initialise() throws ActionLifecycleException {
try {
initLock.lock();
super.initialise();
// ** do any one-time initialization for cron job here **
initialized = true;
initCondition.signalAll();
} finally {
initLock.unlock();
}
}
public Message exec(Message message) {
waitUntilInitialized();
// ** do cron job here **
return message;
}
@Override
public void destroy() throws ActionLifecycleException {
super.destroy();
// ** do any clean-up for cron job here **
}
private void waitUntilInitialized() {
if (!initialized) {
try {
initLock.lock();
while (!initialized) {
initCondition.await();
}
} catch (InterruptedException e) {
// ignore
} finally {
initLock.unlock();
}
}
}
}