Как создать поток во время выполнения в mule 4 - PullRequest
0 голосов
/ 21 июня 2020

Я хочу создать новый поток мулов во время выполнения на основе шаблона потока. Я обнаружил, что модуль Java в mule 4 может мне помочь в этом, поэтому в моем основном потоке я попытался вызвать метод экземпляра 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()"/>

Чтобы вызвать этот метод, я создал Java класс под названием DynamicProducerFlowGenerator, это мой Java код:

publi c class 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?

Заранее спасибо

1 Ответ

0 голосов
/ 21 июня 2020

Во-первых, кажется, что ваши зависимости смешивают зависимости Mule 3 и Mule 4. Это никогда не сработает, они несовместимы. Например, Devkit - это инструмент Mule 3. Если вы используете метод, предназначенный для Mule 3, как это кажется в вашем примере, он не будет работать при использовании в Mule 3.

Во-вторых, я бы спросил, какую проблему вы пытаетесь решить. создавая потоки динамически. Я не уверен, что они поддерживаются в Mule 4. Я не думаю, что это хорошая практика. Вызов чего-либо из mule-core или аналогичных библиотек Mule внутри компонента Java, безусловно, не является хорошей практикой. Например, доступ к Mule Context не является хорошей практикой даже в соединителе .

Я советую точно определить, чего вам нужно достичь, и попробовать альтернативные методы, которые лучше поддерживаются и рекомендуются. Например, с помощью XML SDK для создания параметризованных «соединителей» из потоков или Java SDK для создания соединителей и модулей в Java.

...