【发布时间】:2016-05-19 08:21:41
【问题描述】:
我必须在不通过 ESB 用户界面的情况下在 WSO2 ESB 配置文件中添加一个任务(XML 格式)。我在基于 Java 的应用程序中从外部编写这个 xml,然后我应该将获得的 XML(它以 <task> 标记开头和结尾)插入到我的企业服务总线中。如何以动态方式插入我的任务(添加、修改或删除任务),以便以安全的方式达到此目标?是否有一些 WSO2 API 可以帮助我?
【问题讨论】:
我必须在不通过 ESB 用户界面的情况下在 WSO2 ESB 配置文件中添加一个任务(XML 格式)。我在基于 Java 的应用程序中从外部编写这个 xml,然后我应该将获得的 XML(它以 <task> 标记开头和结尾)插入到我的企业服务总线中。如何以动态方式插入我的任务(添加、修改或删除任务),以便以安全的方式达到此目标?是否有一些 WSO2 API 可以帮助我?
【问题讨论】:
您可以使用管理服务:打开 CARBON_HOME/repository/conf/carbon.xml 并将 HideAdminServiceWSDLs 属性设置为 false
启动 ESB,您现在可以访问管理服务 wsdl。
你会发现一个名为“TaskAdmin”的服务:https://localhost:8243/services/TaskAdmin?wsdl
里面有一个叫addTaskDescription的操作,但是我没用过,希望对你有帮助。
如果您想要管理服务列表,您可以使用 -DosgiConsole 选项启动 Carbon 服务器以转到 osgi 控制台。如果您在控制台中输入帮助,您将获得所有可用的命令。
listAdminServices 命令将列出所有可用的服务。
也许这个示例会对您有所帮助:这个 javascript 为您提供了一种从中介内部启动/停止计划任务的方法:
<script language="js">importPackage(Packages.org.apache.synapse);
importPackage(Packages.org.apache.synapse.config);
importPackage(Packages.org.apache.synapse.task);
var sc = mc.getConfiguration();
var task = sc.getStartup("TestTask");
var td = task.getTaskDescription()
td.setCount(0);
//td.setCron(null);
task.setTaskDescription(td);
sc.updateStartup(task);
mc.setConfiguration(sc);
task.destroy();
task.init(mc.getEnvironment());</script>
如果您的任务有一个 Cron 表达式,使用 td.setCount(0),任务执行停止,使用 td.setCount(-1),任务执行重新开始。
使用 td.setCount(1) + td.setCron(null),当您在 ESB 控制台中编辑任务时,您可以观察到定义已更新:触发器类型从“Cron”更改为“简单”(使用计数=1 和间隔 =0)。重新启动 ESB 时定义会在内存中更改并丢失
【讨论】: