我是Mule的新手,我无法找到如何在Mule中从Java触发Quartz Endpoint,尤其是在单元测试的上下文中。
首先,位于Mule内的Quartz API在哪里?我在Mule网站上找不到这个。但是,在Quartz网站上,我发现了“http://quartz-scheduler.org/api/2.1.0/”,这似乎是一般的Quartz API。这个API和Mule使用的API有什么区别吗?如果没有,在我将"./MuleStudio_3.4.0/plugins/org.mule.tooling.server.3.4.0.ee_3.4.0.201312031922/mule/mule/mule-transport-quartz-3.4.0.jar"
的jar文件添加到我的构建路径后,Mule Studio无法解析“org.quartz”,这是Quartz API的核心包。如果存在差异,我需要知道Mule使用的Quartz API。
以下是我要测试的XML:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:mongo="http://www.mulesoft.org/schema/mule/mongo" xmlns:quartz="http://www.mulesoft.org/schema/mule/quartz" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:core="http://www.mulesoft.org/schema/mule/core" version="EE-3.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/mongo http://www.mulesoft.org/schema/mule/mongo/2.0/mule-mongo.xsd
http://www.mulesoft.org/schema/mule/quartz http://www.mulesoft.org/schema/mule/quartz/current/mule-quartz.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">
<quartz:connector name="QuartzConnName" validateConnections="true" doc:name="Quartz"/>
<flow name="flow_name" doc:name="flow_name">
<quartz:inbound-endpoint jobName="QuartzJobName" cronExpression="${cron.start}" repeatInterval="0" responseTimeout="10000" connector-ref="QuartzConnName" doc:name="Scheduler">
<quartz:event-generator-job/>
</quartz:inbound-endpoint>
</flow>
</mule>
内部Mule服务器版本为3.4,Mule Studio版本为3.4.0。
答案 0 :(得分:2)
除非你在MuleSoft开发这种传输工作,否则我真的看不到测试Quartz端点的价值。您应该仅测试自己的流量和组件。
如果您只想在FunctionalTestCase @Test方法中使用Quartz入站调度程序触发流,则可以使用一些虚拟消息直接调用流:
Flow flow = (Flow) getFlowConstruct("myFlow1");
MuleEvent event = getTestEvent("", flow);
MuleEvent result = flow.process(event);
String returnData = result.getMessage().getPayloadAsString();
答案 1 :(得分:0)
有关如何测试Quartz端点的参考,请查看此传输的Mule测试: https://github.com/mulesoft/mule/tree/mule-3.x/transports/quartz/src/test/java/org/mule/transport/quartz
答案 2 :(得分:0)
我将Quartz端点添加到全局端点列表中。
在我的流程中,我随后在通用入站端点中引用该端点。
以下是我所做的一个例子。
全局连接器文件
<quartz:connector name="quartz_connector" validateConnections="true" doc:name="Quartz"/>
全球端点文件
<quartz:endpoint name="QUARTZ_ENDPOINT_NAME" jobName="JOB_NAME" cronExpression="${cron.start}" repeatInterval="0" responseTimeout="10000" connector-ref="quartz_connector" doc:name="Scheduler">
<quartz:event-generator-job/>
</quartz:endpoint>
流量
<flow name="some_flow" doc:name="some_flow">
<inbound-endpoint ref="QUARTZ_ENDPOINT_NAME" doc:name="QUARTZ_ENDPOINT_NAME_DOC"/>
</flow>
全局测试端点和连接器文件
<vm:endpoint name="QUARTZ_ENDPOINT_NAME" path="VM_PATH_ATTRIBUTE_VALUE" exchange-pattern="request-response"/>
JUnit测试
@Test
public void testSend() throws Exception
{
MuleClient client = muleContext.getClient();
Map<String,Object> noMsg = new HashMap<String, Object>();
//Start the process by sending a message to the Quartz "Queue"
MuleMessage response = client.send("vm://VM_PATH_ATTRIBUTE_VALUE",new String(""), noMsg);
}