-
Notifications
You must be signed in to change notification settings - Fork 566
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
JBatch example for Helidon 3.x (#3927)
* JBatch example for Helidon 3.x * Copyright and style fixes
- Loading branch information
1 parent
5d7e61e
commit c5ac83e
Showing
19 changed files
with
752 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -73,3 +73,4 @@ user.txt | |
ObjectStore/ | ||
PutObjectStoreDirHere/ | ||
package-lock.json | ||
RUNTIMEDB/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
# Helidon + jBatch | ||
|
||
Minimal Helidon MP + jBatch PoC. | ||
|
||
## Build and run | ||
|
||
With JDK11+ | ||
```bash | ||
mvn package | ||
java -jar target/helidon-jbatch-example.jar | ||
``` | ||
|
||
## Exercise the application | ||
|
||
``` | ||
curl -X GET http://localhost:8080/batch | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<!-- | ||
Copyright (c) 2022 Oracle and/or its affiliates. | ||
Licensed under the Apache License, Version 2.0 (the "License"); | ||
you may not use this file except in compliance with the License. | ||
You may obtain a copy of the License at | ||
http://www.apache.org/licenses/LICENSE-2.0 | ||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. | ||
--> | ||
<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> | ||
<parent> | ||
<groupId>io.helidon.applications</groupId> | ||
<artifactId>helidon-mp</artifactId> | ||
<version>3.0.0-SNAPSHOT</version> | ||
<relativePath>../../applications/mp/pom.xml</relativePath> | ||
</parent> | ||
<groupId>io.helidon.examples.jbatch</groupId> | ||
<artifactId>helidon-examples-jbatch</artifactId> | ||
<name>jbatch-example</name> | ||
|
||
<properties> | ||
<version.lib.jbatch-api>2.1.0-M2</version.lib.jbatch-api> | ||
<version.lib.jbatch.container>2.1.0-M2</version.lib.jbatch.container> | ||
<version.lib.derby>10.13.1.1</version.lib.derby> | ||
<version.lib.jaxb-api>3.0.1</version.lib.jaxb-api> | ||
</properties> | ||
|
||
<dependencies> | ||
<dependency> | ||
<groupId>io.helidon.microprofile.bundles</groupId> | ||
<artifactId>helidon-microprofile-core</artifactId> | ||
</dependency> | ||
<dependency> | ||
<groupId>jakarta.json</groupId> | ||
<artifactId>jakarta.json-api</artifactId> | ||
</dependency> | ||
<dependency> | ||
<groupId>jakarta.transaction</groupId> | ||
<artifactId>jakarta.transaction-api</artifactId> | ||
</dependency> | ||
<dependency> | ||
<groupId>jakarta.batch</groupId> | ||
<artifactId>jakarta.batch-api</artifactId> | ||
<version>${version.lib.jbatch-api}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>com.ibm.jbatch</groupId> | ||
<artifactId>com.ibm.jbatch.spi</artifactId> | ||
<version>${version.lib.jbatch.container}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.glassfish.jaxb</groupId> | ||
<artifactId>jaxb-runtime</artifactId> | ||
<version>${version.lib.jaxb-api}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>jakarta.xml.bind</groupId> | ||
<artifactId>jakarta.xml.bind-api</artifactId> | ||
<version>${version.lib.jaxb-api}</version> | ||
</dependency> | ||
|
||
|
||
<dependency> | ||
<groupId>jakarta.activation</groupId> | ||
<artifactId>jakarta.activation-api</artifactId> | ||
<scope>runtime</scope> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.jboss</groupId> | ||
<artifactId>jandex</artifactId> | ||
<scope>runtime</scope> | ||
<optional>true</optional> | ||
</dependency> | ||
<dependency> | ||
<groupId>com.ibm.jbatch</groupId> | ||
<artifactId>com.ibm.jbatch.container</artifactId> | ||
<version>${version.lib.jbatch.container}</version> | ||
<scope>runtime</scope> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.apache.derby</groupId> | ||
<artifactId>derby</artifactId> | ||
<version>${version.lib.derby}</version> | ||
<scope>runtime</scope> | ||
</dependency> | ||
|
||
<dependency> | ||
<groupId>org.junit.jupiter</groupId> | ||
<artifactId>junit-jupiter-api</artifactId> | ||
<scope>test</scope> | ||
</dependency> | ||
<dependency> | ||
<groupId>io.helidon.microprofile.tests</groupId> | ||
<artifactId>helidon-microprofile-tests-junit5</artifactId> | ||
<scope>test</scope> | ||
</dependency> | ||
</dependencies> | ||
|
||
<build> | ||
<plugins> | ||
<plugin> | ||
<groupId>org.apache.maven.plugins</groupId> | ||
<artifactId>maven-dependency-plugin</artifactId> | ||
<executions> | ||
<execution> | ||
<id>copy-libs</id> | ||
</execution> | ||
</executions> | ||
</plugin> | ||
<plugin> | ||
<groupId>org.jboss.jandex</groupId> | ||
<artifactId>jandex-maven-plugin</artifactId> | ||
<executions> | ||
<execution> | ||
<id>make-index</id> | ||
</execution> | ||
</executions> | ||
</plugin> | ||
<plugin> | ||
<groupId>io.helidon.build-tools</groupId> | ||
<artifactId>helidon-maven-plugin</artifactId> | ||
<executions> | ||
<execution> | ||
<id>third-party-license-report</id> | ||
</execution> | ||
</executions> | ||
</plugin> | ||
</plugins> | ||
</build> | ||
</project> |
94 changes: 94 additions & 0 deletions
94
examples/jbatch/src/main/java/io/helidon/jbatch/example/BatchResource.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
/* | ||
* Copyright (c) 2022 Oracle and/or its affiliates. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* | ||
*/ | ||
package io.helidon.jbatch.example; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Arrays; | ||
import java.util.Collections; | ||
import java.util.List; | ||
import java.util.Properties; | ||
|
||
import com.ibm.jbatch.spi.BatchSPIManager; | ||
import jakarta.batch.operations.JobOperator; | ||
import jakarta.batch.runtime.JobExecution; | ||
import jakarta.batch.runtime.StepExecution; | ||
import jakarta.enterprise.context.ApplicationScoped; | ||
import jakarta.json.Json; | ||
import jakarta.json.JsonBuilderFactory; | ||
import jakarta.json.JsonObject; | ||
import jakarta.ws.rs.GET; | ||
import jakarta.ws.rs.Path; | ||
import jakarta.ws.rs.PathParam; | ||
import jakarta.ws.rs.Produces; | ||
import jakarta.ws.rs.core.MediaType; | ||
|
||
|
||
import static jakarta.batch.runtime.BatchRuntime.getJobOperator; | ||
|
||
|
||
/** | ||
* Trigger a batch process using resource. | ||
*/ | ||
@Path("/batch") | ||
@ApplicationScoped | ||
public class BatchResource { | ||
private static final JsonBuilderFactory JSON = Json.createBuilderFactory(Collections.emptyMap()); | ||
|
||
private JobOperator jobOperator; | ||
|
||
/** | ||
* Run a JBatch process when endpoint called. | ||
* @return JsonObject with the result. | ||
*/ | ||
@GET | ||
@Produces(MediaType.APPLICATION_JSON) | ||
public JsonObject executeBatch() { | ||
|
||
BatchSPIManager batchSPIManager = BatchSPIManager.getInstance(); | ||
batchSPIManager.registerPlatformMode(BatchSPIManager.PlatformMode.SE); | ||
batchSPIManager.registerExecutorServiceProvider(new HelidonExecutorServiceProvider()); | ||
|
||
jobOperator = getJobOperator(); | ||
Long executionId = jobOperator.start("myJob", new Properties()); | ||
|
||
return JSON.createObjectBuilder() | ||
.add("Started a job with Execution ID: ", executionId) | ||
.build(); | ||
} | ||
|
||
/** | ||
* Check the job status. | ||
* @param executionId the job ID. | ||
* @return JsonObject with status. | ||
*/ | ||
@GET | ||
@Path("/status/{execution-id}") | ||
public JsonObject status(@PathParam("execution-id") Long executionId){ | ||
JobExecution jobExecution = jobOperator.getJobExecution(executionId); | ||
|
||
List<StepExecution> stepExecutions = jobOperator.getStepExecutions(executionId); | ||
List<String> executedSteps = new ArrayList<>(); | ||
for (StepExecution stepExecution : stepExecutions) { | ||
executedSteps.add(stepExecution.getStepName()); | ||
} | ||
|
||
return JSON.createObjectBuilder() | ||
.add("Steps executed", Arrays.toString(executedSteps.toArray())) | ||
.add("Status", jobExecution.getBatchStatus().toString()) | ||
.build(); | ||
} | ||
} |
34 changes: 34 additions & 0 deletions
34
examples/jbatch/src/main/java/io/helidon/jbatch/example/HelidonExecutorServiceProvider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
/* | ||
* Copyright (c) 2022 Oracle and/or its affiliates. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* | ||
*/ | ||
package io.helidon.jbatch.example; | ||
|
||
import java.util.concurrent.ExecutorService; | ||
|
||
import io.helidon.common.configurable.ThreadPoolSupplier; | ||
|
||
import com.ibm.jbatch.spi.ExecutorServiceProvider; | ||
|
||
|
||
/** | ||
* Executor service for batch processing. | ||
*/ | ||
public class HelidonExecutorServiceProvider implements ExecutorServiceProvider { | ||
@Override | ||
public ExecutorService getExecutorService() { | ||
return ThreadPoolSupplier.builder().corePoolSize(2).build().get(); | ||
} | ||
} |
37 changes: 37 additions & 0 deletions
37
examples/jbatch/src/main/java/io/helidon/jbatch/example/jobs/MyBatchlet.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
/* | ||
* Copyright (c) 2022 Oracle and/or its affiliates. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* | ||
*/ | ||
package io.helidon.jbatch.example.jobs; | ||
|
||
import jakarta.batch.api.AbstractBatchlet; | ||
|
||
/** | ||
* Batchlet example. | ||
*/ | ||
public class MyBatchlet extends AbstractBatchlet { | ||
|
||
/** | ||
* Run inside a batchlet. | ||
* | ||
* @return String with status. | ||
*/ | ||
@Override | ||
public String process() { | ||
System.out.println("Running inside a batchlet"); | ||
return "COMPLETED"; | ||
} | ||
|
||
} |
45 changes: 45 additions & 0 deletions
45
examples/jbatch/src/main/java/io/helidon/jbatch/example/jobs/MyInputRecord.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
/* | ||
* Copyright (c) 2022 Oracle and/or its affiliates. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* | ||
*/ | ||
package io.helidon.jbatch.example.jobs; | ||
|
||
/** | ||
* Example of an Input Record. | ||
*/ | ||
public class MyInputRecord { | ||
private int id; | ||
|
||
/** | ||
* Constructor for Input Record. | ||
* @param id | ||
*/ | ||
public MyInputRecord(int id) { | ||
this.id = id; | ||
} | ||
|
||
public int getId() { | ||
return id; | ||
} | ||
|
||
public void setId(int id) { | ||
this.id = id; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return "MyInputRecord: " + id; | ||
} | ||
} |
Oops, something went wrong.