如何在JBossESB上创建一个非常简单的cron作业
我正在寻找一种最简单的方法来安排一个简单的作业——一个不与任何其他ESB组件交互的作业。[这是我在ESB土地上的第一个小时,对我放松点。] 我知道有一个如何在JBossESB上创建一个非常简单的cron作业,cron,jboss-esb,Cron,Jboss Esb,我正在寻找一种最简单的方法来安排一个简单的作业——一个不与任何其他ESB组件交互的作业。[这是我在ESB土地上的第一个小时,对我放松点。] 我知道有一个cron调度程序producer。如果您熟悉cron,它看起来非常简单: <providers> <schedule-provider name="schedule"> <cron-schedule scheduleid="cron-trigger" cronExpression="0/1 * * * *
cron调度程序
producer。如果您熟悉cron
,它看起来非常简单:
<providers>
<schedule-provider name="schedule">
<cron-schedule scheduleid="cron-trigger" cronExpression="0/1 * * * * ?" />
</schedule-provider>
</providers>
接下来是一个监听器(引用生产者)来处理计划的事件
<services>
<service category="ServiceCat" name="ServiceName" description="Test Service">
<listeners>
<scheduled-listener name="cron-schedule-listener"
scheduleidref="cron-trigger"
event-processor="org.example.MyListener" />
</listeners>
</service>
</services>
考虑到我的工作行动不会发送任何消息,也不需要通知任何关于成功或失败的信息。我是否可以简单地扩展和重写该方法,并在那里实现我的作业执行,而不创建操作
即使这是可能的,为这个简单的模式使用一个动作会有什么好处吗
我正在使用JBoss ESB 4.9。我加入了自己的几乎为空的
ScheduledEventMessageComposer
,并让我的工作扩展了AbstractActionLifecycle
jbossesb.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.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();
}
}
}
}
我加入了自己的几乎为空的
ScheduledEventMessageComposer
,并让我的工作扩展了AbstractActionLifecycle
jbossesb.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.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();
}
}
}
}
另一种方法是实现org.jboss.soa.esb.schedule.ScheduledEventListener类 因此,您的jboss-esb.xml如下所示:
<?xml version="1.0"?>
<jbossesb parameterReloadSecs="5" xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.3.0.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.3.0.xsd http://anonsvn.jboss.org/repos/labs/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.3.0.xsd">
<providers>
<schedule-provider name="myDaemonProvider">
<cron-schedule cronExpression="0 */1 * * * ?" scheduleid="my-daemon-trigger"/>
</schedule-provider>
</providers>
<services>
<service category="Cron" description="My Cron Daemon" name="MyDaemon">
<listeners>
<scheduled-listener event-processor="com.myCompany.esb.myDaemon.main.MyDaemonScheduledEventListener" name="my-daemon-listener" scheduleidref="my-daemon-trigger"/>
</listeners>
</service>
</services>
</jbossesb>
因此,当您部署它时,它将导致onSchedule()每分钟运行一次。另一种方法是实现org.jboss.soa.esb.schedule.ScheduledEventListener类 因此,您的jboss-esb.xml如下所示:
<?xml version="1.0"?>
<jbossesb parameterReloadSecs="5" xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.3.0.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.3.0.xsd http://anonsvn.jboss.org/repos/labs/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.3.0.xsd">
<providers>
<schedule-provider name="myDaemonProvider">
<cron-schedule cronExpression="0 */1 * * * ?" scheduleid="my-daemon-trigger"/>
</schedule-provider>
</providers>
<services>
<service category="Cron" description="My Cron Daemon" name="MyDaemon">
<listeners>
<scheduled-listener event-processor="com.myCompany.esb.myDaemon.main.MyDaemonScheduledEventListener" name="my-daemon-listener" scheduleidref="my-daemon-trigger"/>
</listeners>
</service>
</services>
</jbossesb>
因此,当您部署它时,它将导致onSchedule()每分钟运行一次。1k+视图,而且没有一次投票!有徽章吗?祝福所有投票的人,但我不会接受任何慈善。如果我知道该问谁,我会要求撤回,因为我很难相信ESB精灵。记住,只有当这个问题在现实生活中有用时,才进行投票。1k+视图,没有一次投票!有徽章吗?祝福所有投票的人,但我不会接受任何慈善。如果我知道该问谁,我会要求撤回,因为我很难相信ESB精灵。记住,只有当这个问题在现实生活中有用时,才进行投票。