Commit Graph

1406 Commits

Author SHA1 Message Date
Mahmoud Ben Hassine
4629294b65 Fix object graph deletion in SimpleJobRepository#deleteJobExecution
Before this commit, SimpleJobRepository#deleteJobExecution
did not delete associated step executions as specified in the
contract of the method.

This commit fixes the implementation to delete the entire
object graph as specified.

Resolves #4249
2023-02-20 08:41:34 +01:00
Mahmoud Ben Hassine
9883cbc30e Add default converters for java.time types
Resolves #4257
2023-02-15 23:50:45 +01:00
Mahmoud Ben Hassine
30563cd25c Polish date converters 2023-02-15 23:46:03 +01:00
Mahmoud Ben Hassine
7ecac1c2ff Add default converters for java.util.Date parameter type
Resolves #4297
Resolves #4270
2023-02-15 19:05:47 +01:00
Mahmoud Ben Hassine
8aaf1d3d52 Fix decoding of default job parameter type in extended notation
Resolves #4299
2023-02-13 17:32:08 +01:00
Philippe Marschall
23878c6cca Remove unused method
Remove the unused #contains method
2023-02-13 13:33:17 +01:00
Henning Poettker
f4f00fbf49 Synchronize reader for multithreaded test 2023-02-13 13:25:42 +01:00
Mahmoud Ben Hassine
15069aa1dc Fix typos 2022-11-23 15:52:10 +01:00
Danilo Piazzalunga
fc0ec01ff8 Throw IllegalStateException from afterPropertiesSet
Consistently use Assert.state in the afterPropertiesSet()
methods to throw IllegalStateException instead of
IllegalArgumentException when some properties are missing
and/or invalid.

Resolves #2244
2022-11-23 12:22:26 +01:00
Mahmoud Ben Hassine
66e0b9afde Register a JobOperator and a JobRegistryBPP with the default configuration
This commit registers a `SimpleJobOperator` with the default
batch configuration through `EnableBatchProcessing` and
`DefaultBatchConfiguration`.

It also registers a `JobRegistryBeanPostProcessor` to automatically
populate the registry with user defined jobs.

Resolves #3941
2022-11-23 10:26:17 +01:00
Mahmoud Ben Hassine
171a3c8508 Add method getJobInstance in JobOperator
Issue #3930
2022-11-23 08:31:30 +01:00
Mahmoud Ben Hassine
596ee705c8 Refine contribution #3932
* Add default methods in interfaces
* Update tests/Javadoc
* Optimize imports
* Apply code style formatting
2022-11-23 08:08:23 +01:00
Parikshit Dutta
5a35b03300 Add getJobInstance method in JobExplorer/JobRepository
Resolves #3930
2022-11-23 07:44:24 +01:00
Henning Poettker
92238260f1 Fix JdbcJobExecutionDaoTests 2022-11-18 11:20:09 +01:00
Marvin Deng
1498f90158 Upgrade job execution status from STOPPING to STOPPED if it has already ended
Resolves #4064
2022-11-18 11:20:08 +01:00
Marvin Deng
bbf35b79f7 Make the meaning of running status consistent
- A running status is STARTING, STARTED, or STOPPING.
- Update related tests.

 Resolves #1483
2022-11-17 15:40:29 +01:00
Mahmoud Ben Hassine
930bb0243c Implement default methods in SimpleJobRepository
Resolves #4229
2022-11-16 16:11:33 +01:00
Mahmoud Ben Hassine
2edd4006d2 Change the return type of counting methods in various DAOs from int to long
This is required for job repository/explorer implementations
that use the Long type to count records in the database.

Resolves #4227
2022-11-08 22:06:16 +01:00
Mahmoud Ben Hassine
621ec92586 Add Micrometer counter for job launches
Resolves #4226
2022-11-08 12:28:43 +01:00
Mahmoud Ben Hassine
d889f84735 Remove the static configuration of Micrometer's observation registry
Resolves #4222
2022-11-08 07:48:45 +01:00
Mahmoud Ben Hassine
524e9564c0 Add full support for MariaDB
This commit adds full support for MariaDB as
a job repository and removes the code that
treats it as MySQL.

Resolves #3891
Resolves #4217
2022-10-25 11:11:57 +02:00
Henning Poettker
15ef22284a Update MySQL Connector/J and use new Maven coordinates 2022-10-19 17:16:20 +02:00
Mahmoud Ben Hassine
0b694117eb Add Spring Batch version in the execution context
Resolves #4215
2022-10-19 16:48:08 +02:00
Mahmoud Ben Hassine
de567e8c6f Fix JavaBean setter collision
This commit changes the name of the overloaded
setter for isolationLevelForCreate to remove
ambiguity in setter selection by Spring Framework.

Resolves #4213
2022-10-18 11:46:02 +02:00
Mahmoud Ben Hassine
26c39cbbae Refine contribution #3967
Related to #752
2022-10-12 17:23:58 +02:00
Philippe Truche
746c919372 Support command as array of strings
setCommand now supports passing in an array of strings. When a single
string is supplied, it is tokenized by the Runtime#exec method. When an
array of strings is supplied, the array is supplied as is to the
Runtime#exec method in which case no tokenization takes place.

Resolves #752
2022-10-12 16:36:30 +02:00
Mahmoud Ben Hassine
4eefb1d287 Refine contribution #3972
Related to #3955
2022-10-12 15:37:45 +02:00
Stefano Cordio
eccea800fb Add CommandRunner and JvmCommandRunner in SystemCommandTasklet
This improves the testability of `SystemCommandTasklet` when the
target command is not available during test execution.

Resolves #3955
2022-10-12 14:56:07 +02:00
Mahmoud Ben Hassine
d66372a0fb Fix timestamp precision in schema-hsqldb-extended.sql
Related to 81728c00ed
2022-10-12 08:06:13 +02:00
Mahmoud Ben Hassine
1a65c00b8d Change type of timestamp fields in JobExecution/StepExecution to LocalDateTime
This commit changes the type of fields `startTime`, `endTime`,
`createTime` and `lastUpdated` in `JobExecution` and `StepExecution`
from `java.util.Date` to `java.time.LocalDateTime`.

Resolves #1014
2022-10-11 22:09:16 +02:00
Mahmoud Ben Hassine
2b258d1b88 Change the default execution context serializer to DefaultExecutionContextSerializer
This commit changes the default execution context serializer to
DefaultExecutionContextSerializer, which makes Jackson an optional
dependency.

Resolves #4140
2022-10-10 10:39:50 +02:00
Mahmoud Ben Hassine
c65e0f27d4 Change DefaultExecutionContextSerializer to produce Base64 content
Resolves #4122
Related to #3983
2022-10-10 10:20:13 +02:00
Henning Poettker
a3c692d5fa Upgrade Derby to version 10.16.1.1 2022-10-04 23:20:59 +02:00
Mahmoud Ben Hassine
2660f2bb27 Add support to use any type as a job parameter
This commit also changes the way job parameters
are parsed and persisted.

NB: This commit should ideally have been split
into two change sets. But the changes are tightly
related that is was not possible to separate them.

Related to:

* https://github.com/spring-projects/spring-batch/issues/3960
* https://github.com/spring-projects/spring-batch/issues/2122
* https://github.com/spring-projects/spring-batch/issues/1035
* https://github.com/spring-projects/spring-batch/issues/1983
2022-10-04 20:35:50 +02:00
Mahmoud Ben Hassine
e33659cae5 Add support to customize transaction attributes in infrastructure beans
Before this commit, the transaction attributes were hardcoded and not
configurable in the proxy created by Job explorer/repository/operator
factory beans.

This commit adds the possibility to customize the transaction attributes
in addition to the transaction manager. It is now possible to configure
the transaction's isolation level as well as its propagation for each
method if needed.

Resolves #4195
2022-09-21 10:20:57 +02:00
Mahmoud Ben Hassine
6ad3596401 Add support for transaction customization in SimpleJobOperator
This commit adds support to configure and create a transactional
proxy around SimpleJobOperator through a factory bean.

The usage of `@Transactional` was removed in favor of
the programmatic way of customizing the proxy through
the factory bean.

Resolves #1078
2022-09-21 04:34:34 +02:00
Mahmoud Ben Hassine
40b4be3c14 Add transaction support in JobExplorerFactoryBean
This commit adds support to create a transactional
proxy around the JobExplorer created by the
JobExplorerFactoryBean.

Resolves #1307
2022-09-21 03:28:59 +02:00
Mahmoud Ben Hassine
aaf22e1860 Remove bean reference checks in BatchRegistrar
These checks occur too early in the bean creation/registration
process and might cause issues when initializing the context.

Related to #3942
2022-09-20 15:35:31 +02:00
Mahmoud Ben Hassine
48e437ae17 Revisit the configuration code of EnableBatchProcessing
Before this commit, the configuration of infrastructure beans
was confusing and not straightforward to customize. This commit
changes the way Batch infrastructure beans are configured.
The most important changes are:

* EnableBatchProcessing now provides new attributes to
configure properties of infrastructure beans
* Bean registration is now done programmatically with a
BeanDefinitionRegistrar instead of importing a class with
statically annotated bean definition methods
* Bean are now resolved from the application context directly
instead of being resolved from a BatchConfigurer
* Both a data source and a transaction manager are now
required to be defined in the application context
* A new configuration class called DefaultBatchConfiguration
with default infrastructure bean definitions is now provided
and can be extended to customize the default configuration

Resolves #3942
2022-09-20 12:24:10 +02:00
Mahmoud Ben Hassine
f39f07075a Improve Step/Job builder APIs to guide users to set mandatory properties
Before this commit, the user had to manually set the job repository and transaction
manager on `JobBuilder` and `StepBuilder` instances with a chained call to
`.repository(jobRepository)` and `.transactionManager(transactionManager)`.
This is error prone and can lead to runtime errors if these properties are not set.

This commit introduces new APIs to guide the user to set these properties at
builder creation time.

Resolves #4192
2022-09-17 22:31:12 +02:00
Mahmoud Ben Hassine
d11b5b2c3a Remove BatchConfigurer#getTransactionManager
Before this commit, the transaction manager was configurable
by implementing `BatchConfigurer#getTransactionManager`.

The transaction manager being an implementation detail of the
`JobRepository`, it should not be configurable at the same level
as the `JobRepository` (ie in the same interface).

This commit removes the method `getTransactionManager` from
the `BatchConfigurer` interface. If needed, a custom transaction
manager could be supplied by implementing `getJobRepository`,
or via the constructor of `DefaultBatchConfigurer`.

Resolves https://github.com/spring-projects/spring-batch/issues/4191
2022-09-13 20:02:32 +02:00
Mahmoud Ben Hassine
6e443cb1b1 Deprecate Job/Step builder factories
This commit deprecates JobBuilderFactory and StepBuilderFactory
in favor of the respective builders they create.

It also removes the exposure of such utilities as beans in the
application context when using `@EnableBatchProcessing`.

Resolves https://github.com/spring-projects/spring-batch/issues/4188
2022-09-13 16:56:01 +02:00
Mahmoud Ben Hassine
7c8fb172a7 Move the transaction manager configuration to AbstractTaskletStepBuilder
Before this commit, the transaction manager was configurable
at the StepBuilder level, which is inconsistent with the XML
config style in addition to be not needed for most step types.

This commit moves the configuration of the transaction manager
from the StepBuilder down to the AbstractTaskletStepBuilder,
which is the level where the transaction manager is needed.

Resolves #4130
2022-09-08 11:35:14 +02:00
Mahmoud Ben Hassine
bd25df6770 Put back "Fix StepScopeProxyTargetClassOverrideIntegrationTests"
Related to bbf7086765.
2022-08-24 20:07:21 +02:00
Mahmoud Ben Hassine
bbf7086765 Revert "Fix StepScopeProxyTargetClassOverrideIntegrationTests"
This reverts commit bf2e6ab0e5
as the change was made after spring-framework 6.0.0-M5 was
released. This version is required to release spring-batch
5.0.0-M5

This change will be put back after releasing 5.0.0-M5.
2022-08-24 18:11:18 +02:00
Mahmoud Ben Hassine
c425137eec Remove datasource dependency in JobRepositoryTestUtils
Before this commit, the `JobRepositoryTestUtils` was
tied to the JDBC implementation of the `JobRepository`
as it was requiring a datasource. This makes it unusable
with implementations that do not rely on a datasource
to store batch meta-data (A MongoDB job repository for
instance where no datasource is used).

This commit decouples the `JobRepositoryTestUtils` from
the implementation details of the `JobRepository` by making
it working against the `JobRepository` interface.

This commit also introduces the necessary methods in the
`JobRepository` interface as well as various DAOs to
implement the utilities without having to deal with the
details of the underlying repository implementation.

Resolves #4070
2022-08-23 21:33:06 +02:00
Mahmoud Ben Hassine
fe40370f39 Refine contribution #4167
The documentation generation change introduced
in #4167 seems to scan more files than previously
WRT checking the code formatting style.

This commit fixes the formatting of the files
that do not conform to the Spring style.
2022-08-21 09:52:35 +02:00
Mahmoud Ben Hassine
e67c0069f1 Use the Chunk API consistently
This commit replaces the usage of List with Chunk
where appropriate. Summary of changes:

- The Chunk class was moved from the `org.springframework.batch.core.step.item` package to the `org.springframework.batch.item` package
- The signature of the method `ItemWriter#write(List)` was changed to `ItemWriter#write(Chunk)`
- All implementations of `ItemWriter` were updated to use the Chunk API instead of List
- All methods in the `ItemWriteListener` interface were updated to use the Chunk API instead of List
- All implementations of `ItemWriteListener` were updated to use the Chunk API instead of List
- The constructor of `ChunkRequest` was changed to accept a Chunk instead of a Collection of items
- The return type of `ChunkRequest#getItems()` was changed from List to Chunk

Resolves #3954
2022-08-19 13:40:09 +02:00
Mahmoud Ben Hassine
bf2e6ab0e5 Fix StepScopeProxyTargetClassOverrideIntegrationTests
This test started failing after an upstream change in Spring Framework,
see https://github.com/spring-projects/spring-framework/issues/28115
2022-08-16 11:49:30 +02:00
Henning Poettker
2fdb68d28e Migrate Spring Batch Core to JUnit Jupiter 2022-08-02 21:25:54 +02:00