mule - 如何在 mule 4 中在运行时创建流
问题描述
我想基于流模板在运行时创建一个新的 mule 流。我发现 mule 4 中的 Java 模块可以帮助我解决这个问题,所以在我的主要流程中,我尝试调用 Java 实例方法:
<http:listener doc:name="Listener" doc:id="5b0f79ff-1a60-4c1a-bc9d-fbe350f4e595" config-ref="HTTP_Listener_config" path="/producer"/>
<java:new doc:name="New DynamicProducerFlowGenerator" doc:id="6c8cf087-0601-4b89-9d24-16650b9a6e6f" class="DynamicProducerFlowGenerator" constructor="DynamicProducerFlowGenerator()" target="DynamicProducerFlowGenerator"/>
<java:invoke doc:name="Invoke" doc:id="d5258c18-74e8-4c86-a0ae-758ad41d1b32" instance="#[vars.DynamicProducerFlowGenerator]" class="DynamicProducerFlowGenerator" method="initialise()"/>
为了调用这个方法,我创建了一个名为 DynamicProducerFlowGenerator 的 Java 类,这是我的 Java 代码:
公共类 DynamicProducerFlowGenerator {
public DynamicProducerFlowGenerator() {
}
public void initialise() {
MuleContextFactory muleContextFactory = new DefaultMuleContextFactory();
ConfigurationBuilder builder = new SpringXmlConfigurationBuilder("dynamic-producer-flow-template.xml");
MuleContext muleContext = muleContextFactory.createMuleContext();
builder.configure(muleContext);
muleContext.start();
}
}
但是,当我尝试运行它时,我总是遇到错误:
Message : Invocation of Method 'initialise()' from Class 'DynamicProducerFlowGenerator' without any argument resulted in an error.
Cause: org.mule.api.MuleRuntimeException - Couldn't find config via SPI mechanism. Corrupted Mule core jar?
我认为问题在于这行代码
“MuleContext muleContext = muleContextFactory.createMuleContext();”
但我不知道如何解决它。这是我在 pom.xml 中的一些依赖项:
<dependency>
<groupId>org.mule.tools.devkit</groupId>
<artifactId>mule-devkit-annotations</artifactId>
<version>3.9.7</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mule</groupId>
<artifactId>mule-core</artifactId>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>org.mule.module</groupId>
<artifactId>mule-java-module</artifactId>
<version>1.2.6</version>
<classifier>mule-plugin</classifier>
</dependency>
<dependency>
<groupId>org.mule.modules</groupId>
<artifactId>mule-module-spring-config</artifactId>
<version>3.9.0</version>
谁能帮我解决这个问题?还有另一种方法可以用来在 mule 4 的运行时创建新流程吗?
先感谢您
解决方案
首先,您的依赖项似乎混合了 Mule 3 和 Mule 4 依赖项。那永远行不通,它们是不相容的。例如 Devkit 是一个 Mule 3 工具。如果您使用的是用于 Mule 3 的方法,如您的示例中所示,则在 Mule 3 中使用时将不起作用。
其次,我会问您要通过动态创建流程来解决什么问题。我不确定 Mule 4 是否支持它们。我认为这不是一个好习惯。从 Java 组件中的 mule-core 或类似的 Mule 库调用任何东西肯定不是一个好习惯。例如,即使在连接器中访问 Mule 上下文也不是一个好习惯。
我建议准确定义您需要实现的目标,并尝试更好地支持和推荐的替代方法。例如,使用XML SDK从流中创建参数化的“连接器”,或使用Java SDK在 Java 中创建连接器和模块。
推荐阅读
- apache-spark - `spark-submit --master local[4]` 中的 `[4]` 是什么意思?
- ruby-on-rails - 使用 Apache2 和 Puma 部署 Rails 6 应用程序
- sql-server - Pentaho 数据集成错误 - '' 附近的语法不正确
- javascript - 使用 Javascript 将选项数组转换为变量数组
- javascript - 返回已解决的承诺值而不是承诺的NodeJS函数?
- c++ - c++中如何判断字符是否为中文?
- python - 为什么我的网页抓取会生成 HTML,但不会返回任何文本?
- javascript - 用 try/catch 替换 then 语句
- c - 通过获取先前的位置来计算位移。(C)
- ios - NavigationView 下的 SwiftUI WKWebView 不接受 displayMode