I built a Mule 4 module/connector with the Mule Java SDK using mule-module-batch-ee (4.5.0-20220622) internally.
To build the 'batch-manager-connector' project, I used the Maven archetype org.mule.extensions:mule-extensions-archetype-maven-plugin:1.2.0. I can build the 'batch-manager-connector' and include it in my 'test_mule_project' application (Anypoint Studio 7.15.0). But when I run it, it fails and I get a 'java.lang.NoClassDefFoundError: com/mulesoft/mule/runtime/module/batch/internal/DefaultBatchManager
' because the library cannot be found.
To make the library available at runtime, what must I do?
Any help would be appreciated
I was able to add more images to my post on the official Mulesoft forum.
Error:
********************************************************************************
Message : java.lang.NoClassDefFoundError: com/mulesoft/mule/runtime/module/batch/internal/DefaultBatchManager
Element : batchProcessCSVAccounts/processors/3 @ test_mule_project:test_mule_project.xml:39 (Get all batch jobs)
Element DSL : <batchmanager:get-all-batch-jobs doc:name="Get all batch jobs" doc:id="c14b575f-d739-4b4a-aef6-69c5985c8a50"></batchmanager:get-all-batch-jobs>
Error type : MULE:FATAL_JVM_ERROR
FlowStack : at batchProcessCSVAccounts(batchProcessCSVAccounts/processors/3 @ test_mule_project:test_mule_project.xml:39 (Get all batch jobs))
Payload Type : com.mulesoft.mule.runtime.module.batch.internal.ImmutableBatchJobInstance
--------------------------------------------------------------------------------
Root Exception stack trace:
java.lang.ClassNotFoundException: com.mulesoft.mule.runtime.module.batch.internal.DefaultBatchManager
at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
at org.mule.runtime.module.artifact.api.classloader.FineGrainedControlClassLoader.findLocalClass(FineGrainedControlClassLoader.java:178)
at org.mule.runtime.module.artifact.api.classloader.FineGrainedControlClassLoader.loadClass(FineGrainedControlClassLoader.java:90)
at org.mule.runtime.module.artifact.api.classloader.MuleArtifactClassLoader.loadClass(MuleArtifactClassLoader.java:263)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at org.mule.extension.batchmanager.internal.BatchManagerOperations.getAllBatchJobs(BatchManagerOperations.java:31)
at org.mule.extension.batchmanager.internal.BatchManagerOperations$getAllBatchJobs$MethodComponentExecutor_test_mule_project.execute(Unknown Source)
at org.mule.runtime.module.extension.internal.runtime.execution.GeneratedMethodComponentExecutor.execute(GeneratedMethodComponentExecutor.java:94)
at org.mule.runtime.module.extension.internal.runtime.execution.CompletableMethodOperationExecutor.doExecute(CompletableMethodOperationExecutor.java:26)
at org.mule.runtime.module.extension.internal.runtime.execution.AbstractCompletableMethodOperationExecutor.execute(AbstractCompletableMethodOperationExecutor.java:61)
at org.mule.runtime.module.extension.internal.runtime.operation.DefaultExecutionMediator.executeCommand(DefaultExecutionMediator.java:237)
at org.mule.runtime.module.extension.internal.runtime.operation.DefaultExecutionMediator.executeWithInterceptors(DefaultExecutionMediator.java:221)
at org.mule.runtime.module.extension.internal.runtime.operation.DefaultExecutionMediator.lambda$execute$1(DefaultExecutionMediator.java:130)
at org.mule.runtime.module.extension.internal.runtime.operation.DefaultExecutionMediator.lambda$new$0(DefaultExecutionMediator.java:73)
at org.mule.runtime.module.extension.internal.runtime.operation.DefaultExecutionMediator.withExecutionTemplate(DefaultExecutionMediator.java:316)
at org.mule.runtime.module.extension.internal.runtime.operation.DefaultExecutionMediator.execute(DefaultExecutionMediator.java:129)
at org.mule.runtime.module.extension.internal.runtime.operation.ComponentMessageProcessor.executeOperation(ComponentMessageProcessor.java:581)
at org.mule.runtime.module.extension.internal.runtime.operation.ComponentMessageProcessor.prepareAndExecuteOperation(ComponentMessageProcessor.java:820)
at org.mule.runtime.module.extension.internal.runtime.operation.ComponentMessageProcessor.lambda$onEventSynchronous$16(ComponentMessageProcessor.java:483)
at org.mule.runtime.module.extension.internal.runtime.operation.ComponentMessageProcessor.onEventSynchronous(ComponentMessageProcessor.java:490)
at org.mule.runtime.module.extension.internal.runtime.operation.ComponentMessageProcessor.lambda$null$6(ComponentMessageProcessor.java:399)
at reactor.core.publisher.FluxPeekFuseable$PeekFuseableConditionalSubscriber.onNext(FluxPeekFuseable.java:482)
at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:287)
at reactor.core.publisher.FluxPeekFuseable$PeekFuseableConditionalSubscriber.onNext(FluxPeekFuseable.java:496)
at org.mule.runtime.core.privileged.processor.chain.AbstractMessageProcessorChain$2.onNext(AbstractMessageProcessorChain.java:527)
at org.mule.runtime.core.privileged.processor.chain.AbstractMessageProcessorChain$2.onNext(AbstractMessageProcessorChain.java:522)
at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:127)
at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:204)
at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:351)
at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:204)
at reactor.core.publisher.FluxContextStart$ContextStartSubscriber.onNext(FluxContextStart.java:103)
at reactor.core.publisher.FluxContextStart$ContextStartSubscriber.onNext(FluxContextStart.java:103)
at reactor.core.publisher.FluxMap$MapConditionalSubscriber.onNext(FluxMap.java:213)
at reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onNext(MonoFlatMapMany.java:242)
at reactor.core.publisher.FluxFlatMap$FlatMapMain.tryEmit(FluxFlatMap.java:537)
at reactor.core.publisher.FluxFlatMap$FlatMapInner.onNext(FluxFlatMap.java:999)
at reactor.core.publisher.FluxContextStart$ContextStartSubscriber.onNext(FluxContextStart.java:103)
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76)
at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:204)
at org.mule.runtime.core.privileged.processor.chain.AbstractMessageProcessorChain$2.onNext(AbstractMessageProcessorChain.java:527)
at org.mule.runtime.core.privileged.processor.chain.AbstractMessageProcessorChain$2.onNext(AbstractMessageProcessorChain.java:522)
at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:127)
at reactor.core.publisher.FluxHandleFuseable$HandleFuseableSubscriber.onNext(FluxHandleFuseable.java:180)
at org.mule.runtime.core.privileged.processor.chain.AbstractMessageProcessorChain$2.onNext(AbstractMessageProcessorChain.java:527)
at org.mule.runtime.core.privileged.processor.chain.AbstractMessageProcessorChain$2.onNext(AbstractMessageProcessorChain.java:522)
at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:127)
at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:204)
at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:351)
at reactor.core.publisher.FluxSubscribeOnValue$ScheduledScalar.run(FluxSubscribeOnValue.java:178)
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:50)
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:27)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.mule.service.scheduler.internal.AbstractRunnableFutureDecorator.doRun(AbstractRunnableFutureDecorator.java:151)
at org.mule.service.scheduler.internal.RunnableFutureDecorator.run(RunnableFutureDecorator.java:54)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
********************************************************************************
Java: 1.8.0_381 & Maven: 3.9.4
Batch Manager - BatchManagerOperations Class (line 29+):
package org.mule.extension.batchmanager.internal;
import static org.mule.runtime.extension.api.annotation.param.MediaType.ANY;
import org.mule.runtime.extension.api.annotation.param.MediaType;
import org.mule.runtime.extension.api.annotation.param.Config;
import org.mule.runtime.extension.api.annotation.param.Connection;
import com.mulesoft.mule.runtime.module.batch.internal.DefaultBatchManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This class is a container for operations, every public method in this class will be taken as an extension operation.
*/
public class BatchManagerOperations {
private static final Logger LOGGER = LoggerFactory.getLogger(BatchManagerOperations.class);
/**
* Example of an operation that uses the configuration and a connection instance to perform some action.
*/
@MediaType(value = ANY, strict = false)
public String retrieveInfo(@Config BatchManagerConfiguration configuration, @Connection BatchManagerConnection connection){
return "Using Configuration [" + configuration.getConfigId() + "] with Connection id [" + connection.getId() + "]";
}
@MediaType(value = ANY, strict = false)
public String getAllBatchJobs() {
DefaultBatchManager bm = new DefaultBatchManager();
String jobs = bm.getBatchJobs().toString();
LOGGER.info(jobs);
return jobs;
}
}
Batch Manager - pom.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.BatchManager.muleConnector</groupId>
<artifactId>mulesoft-batchmanager-connector</artifactId>
<version>1.0.4</version>
<packaging>mule-extension</packaging>
<name>BatchManager Extension</name>
<parent>
<groupId>org.mule.extensions</groupId>
<artifactId>mule-modules-parent</artifactId>
<version>1.1.3</version>
</parent>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mulesoft.mule.runtime.modules/mule-module-batch-ee -->
<dependency>
<groupId>com.mulesoft.mule.runtime.modules</groupId>
<artifactId>mule-module-batch-ee</artifactId>
<version>4.5.0-20220622</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mule.runtime/mule-api -->
<dependency>
<groupId>org.mule.runtime</groupId>
<artifactId>mule-api</artifactId>
<version>1.5.0-20220622</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
Batch Manager - Java Build Path: classpath variable:
M2_REPO/com/mulesoft/mule/runtime/modules/mule-module-batch-ee/4.5.0-20220622/mule-module-batch-ee-4.5.0-20220622.jar - C:\Users{username}.m2\repository\com\mulesoft\mule\runtime\modules\mule-module-batch-ee\4.5.0-20220622\mule-module-batch-ee-4.5.0-20220622