All Versions
11
Latest Version
Avg Release Cycle
199 days
Latest Release
1673 days ago

Changelog History
Page 1

  • v7.0.0 Changes

    September 24, 2020

    ๐Ÿš€ This release is a major version as it requires Java 11 or above. The main theme for this release is API type safety. There are no new features in this version except updating all APIs to be generic:

    • RecordReader (and its listener): 7ed62a5
    • Batch (and its listener): ba60977
    • RecordWriter (and its listener): d437aa5
    • RecordProcessor (and its listener / sub interfaces): 279ed29
    • Predicate: 063fcc5
    • ๐Ÿ‘ท JobBuilder: 6929936

    โšก๏ธ These changes require updating job definitions to use generics for input/output types in order to enforce the correctness and coherence of expected types between the record reader and writer (More details about this in issue #388).

    Migration guide from v6.1 to v7.0

    โšก๏ธ 1. Job definition updates

    ๐Ÿš€ The most notable change required by this release is regarding job definitions:

    --Job job = new JobBuilder() // v6++Job job = new JobBuilder\<String, Tweet\>() // v7 // define batch components .build();
    

    โš  Specifying input/output types is not mandatory, but not doing so will lead to a raw type usage warning.

    โšก๏ธ 2. RecordProcessor generic types updates

    ๐Ÿ›ฐ Another important change has been introduced in this release about the generic type of RecordProcessor. In v6, the generic types of RecordProcessor were the types of input/output records. In v7, generic types now represent the type of the payload of input/output records:

    --public interface RecordProcessor\<I extends Record, O extends Record\> { // v6-- O processRecord(I record) throws Exception;--}++public interface RecordProcessor\<I, O\> { // v7++ Record\<O\> processRecord(Record\<I\> record) throws Exception; ++}
    

    This change has a direct impact on all interfaces extending RecordProcessor (like RecordFilter, RecordMapper, RecordMarshaller and RecordValidator) and their corresponding implementations.

    โšก๏ธ 3. Other API updates

    โšก๏ธ Any usage of the aforementioned APIs (RecordReader, RecordWriter, Batch, etc) and their associated listeners should be updated to use generics where appropriate.

    ๐Ÿ—„ 4. Deprecated APIs removal

    ๐Ÿš€ All deprecated APIs in v6.0 and v6.1 have been removed in this major release. The suggested replacement (if any) should be found in the Javdoc of the deprecated API.

  • v6.1.0 Changes

    July 14, 2020

    ๐Ÿš€ This is a minor release which can be used as a drop-in replacement for v6.0.0. Here are the major changes:

    ๐Ÿ†• New Features and enhancements

    • Issue #368: Add RetryableRecordProcessor implementation
    • 0๏ธโƒฃ Issue #381: Add default methods in record reader/writer interfaces

    ๐Ÿ› Bug fixes

    • Issue #372: BeanPropertiesPreparedStatementProvider is failing to prepare statement if bean properties has null value

    ๐Ÿ—„ Deprecations

    • ๐Ÿ—„ Issue #380: Deprecate the static factory method JobBuilder#aNewJob
    • ๐Ÿ—„ Issue #379: Deprecate ContentBasedBlockingQueueRecordWriterBuilder
  • v6.0.0 Changes

    February 07, 2020

    ๐Ÿš€ This major release marks a new generation of the framework which is now based on Java 8. It has been an opportunity to improve the framework internals as well as some public APIs. All deprecated APIs in v5.3 and before have been removed. Some APIs have changed in a non-backward compatible way to fix a couple of minor design inconsistencies introduced in the v5 line.

    โšก๏ธ The root package has been updated from org.easybatch to org.jeasy.batch for consistency with other Jeasy projects. Artifact IDs have also been changed to match the same naming pattern as other projects. Please refer to the migration guide below for more details.

    As you will see in the migration guide, many APIs have been deprecated in previous versions and are now completely removed. As Antoine de Saint-Exupery said:

    "Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away"

    ๐Ÿš€ I believe with this release, there is no much more to take away from Easy Batch, but this does not make it perfect! That said, I am very happy and proud to see some serious companies using it in production as well as encouraging feedback from the community. So I would like to thank all contributors who helped making this release possible! Thank you all for your time and efforts! You are awesome ๐Ÿ‘

    ๐Ÿ“š In addition to dependencies and documentation updates, here are the major highlights for v6.0:

    ๐Ÿ†• New features

    • ๐Ÿ‘ Issue #261: Add support for JSON mapping with Yasson (JSON-B RI)
    • ๐Ÿ‘ Issue #311: Add support for Java 8 date/time classes
    • Issue #353: Add converters for Java 8 date/time types
    • ๐Ÿ‘ท Issue #361: Make JobExecutor implement java.lang.AutoCloseable
    • Issue #363: Add batch scanning feature
    • Issue #366: Add formatting option in BeanFieldExtractor

    โœจ Enhancements

    • ๐Ÿ‘ป Issue #351: FileRecordWriter should not throw an Exception at construction time
    • ๐Ÿšš Issue #355: Remove system properties from JobReport#toString
    • ๐Ÿ‘ท Issue #356: Improve job duration formatting
    • ๐Ÿ”Š Issue #357: Show job duration in the logs
    • 0๏ธโƒฃ Issue #364: Add default methods in listener interfaces

    ๐Ÿ› Bug fixes

    • Issue #352: XmlRecordReader should close the input stream
    • ๐Ÿ›  Issue #365: Incorrect fixed length record marshalling

    ๐Ÿ†• New tutorials

    ๐Ÿ’ฅ Breaking changes

    • ๐Ÿ—„ All usages of java.io.File (namely in constructors of all file based record readers/writers) were deprecated in v5.3 and have been replaced with java.nio.file.Path in v6
    • ๐Ÿšš Quartz support was deprecated in v5.3 and has been removed in v6. The entire module easybatch-quartz has been removed in v6. This module used to provide two classes that act as a bridge between Easy Batch APIs and Quartz APIs. Those two classes (EasyBatchJob and EasyBatchJobFactory) can now be copied from the Quartz tutorial.
    • ๐Ÿš€ MongoDB support has been dropped (Issue #354). Please note that this decision was made after releasing v5.3, hence you will not find any @Deprecated annotations on classes of this module in the v5.3 release. Sorry for any inconvenience!
    • ๐Ÿ‘ท JobListener#beforeJobStart and JobListener#afterJobEnd have been renamed to JobListener#beforeJob and JobListener#afterJob (Issue #362)
    • ๐Ÿ‘ Jms reader/writer now work with a JMS Destination instead of Queue to support Topics as well (Issue #359)
    • ๐Ÿ‘ The constructor of JmsMessageTransformer now accepts a javax.jms.Session instead of javax.jms.QueueSession to support both queue and topic sessions (Issue #360)
    • ๐Ÿ‘€ The JmsRecordReader now returns null based on a timeout and not a JmsPoisonMessage anymore (because JmsPoisonMessage has been removed, see "Removed APIs" section of the migration guide)
    • ๐Ÿ‘€ The BlockingQueueRecordReader now returns null based on a timeout and not a PoisonRecord anymore (because PoisonRecord has been removed, see "Removed APIs" section of the migration guide)
    • ๐Ÿšš All EIP related APIs (ContentBasedBlockingQueueRecordWriter, ContentBasedBlockingQueueRecordWriterBuilder, DefaultPredicate, Predicate, RandomBlockingQueueRecordWriter, RoundRobinBlockingQueueRecordWriter) and their JMS equivalent were moved to a new extension module called easy-batch-integration

    Migration guide from v5.3 to v6.0

    Although care has been taken to document all changes in details, a thing or two could have been missed (in which case, apologies upfront).

    Maven coordinates

    • The group id has changed from org.easybatch to org.jeasy
    • โšก๏ธ Artifact IDs have been updated like follows: easybatch-core -> easy-batch-core (same pattern for other artifacts)

    Here is the new maven dependency for the core module:

     \<dependency\> \<groupId\>org.jeasy\</groupId\> \<artifactId\>easy-batch-core\</artifactId\> \<version\>6.0.0\</version\> \</dependency\>
    

    โœ‚ Removed APIs

    • ๐Ÿšš org.easybatch.xml.XmlWrapperTagWriter was deprecated in v5.3 and has been removed in v6
    • ๐Ÿšš org.easybatch.tools.monitoring.CliJobMonitoringListener, org.easybatch.tools.reporting.HtmlJobReportFormatter andorg.easybatch.tools.reporting.JobReportEmailSender were deprecated in v5.3 and have been removed in v6. The entire easybatch-tools module has been removed
    • ๐Ÿšš Quartz support was deprecated in v5.3 and has been removed in v6. The entire module easybatch-quartz has been removed in v6
    • ๐Ÿš€ MongoDB support has been be removed in v6 (See issue #354). Please note that this decision has been made after releasing v5.3, hence you will not find any @Deprecated annotation on classes of this module in the v5.3 release. Sorry for any inconvenience!
    • ๐Ÿšš org.easybatch.jms.JmsPoisonMessage, org.easybatch.jms.JmsPoisonRecord, org.easybatch.jms.JmsPoisonRecordBroadcaster and org.easybatch.jms.JmsPoisonRecordFilter were deprecated in v5.3 and have been removed in v6.
    • ๐Ÿšš org.easybatch.core.record.PoisonRecord, org.easybatch.core.listener.PoisonRecordBroadcaster and org.easybatch.core.filter.PoisonRecordFilter were deprecated in v5.3 and have been removed in v6.
    • ๐Ÿšš The constructor org.jeasy.batch.core.reader.BlockingQueueRecordReader#BlockingQueueRecordReader(java.util.concurrent.BlockingQueue<org.jeasy.batch.core.record.Record>, int) has been removed in v6. Please note that this constructor was not marked with @Deprecated in v5.3 by mistake.
    • ๐Ÿšš The constructor BlockingQueueRecordWriter(final List<BlockingQueue<Record>> has been be removed in v6 as this writer now operates on a single blocking queue instead of multiple queues.
    • ๐Ÿšš org.easybatch.core.listener.RecordProcessingTimeListener was deprecated in v5.3 and has been removed in v6
    • ๐Ÿšš org.easybatch.core.filter.RecordNumberBetweenFilter, org.easybatch.core.filter.RecordNumberEqualToFilter, org.easybatch.core.filter.RecordNumberGreaterThanFilter and org.easybatch.core.filter.RecordNumberLowerThanFilter were deprecated in v5.3 and have been removed in v6
    • ๐Ÿšš JobReportFormatter and DefaultJobReportFormatter were deprecated in v5.3 and have been removed in v6
    • ๐Ÿšš Constructors that take a delimiter and qualifier in DelimitedRecordMarshaller and ApacheCommonCsvRecordMarshaller have been removed. Use the new setters for these parameters instead.

    ๐Ÿšš Replaced/Renamed/Moved APIs

    • ๐Ÿšš org.easybatch.core.filter.FilteredRecordsSavingRecordFilter was deprecated in v5.3 and has been removed in v6. Use the new org.easybatch.core.filter.FilteredRecordsCollector instead
    • ๐Ÿšš org.easybatch.core.filter.StartWithStringRecordFilter was deprecated in v5.3 and has been removed in v6. Use org.easybatch.core.filter.StartsWithStringRecordFilter instead
    • ๐Ÿšš org.easybatch.core.filter.EmptyRecordFilter was deprecated in v5.3 and will be removed in v6. Use org.easybatch.core.filter.EmptyStringRecordFilter instead
    • ๐Ÿšš org.easybatch.core.filter.EndWithStringRecordFilter was deprecated in v5.3 and will be removed in v6. Use org.easybatch.core.filter.EndsWithStringRecordFilter instead
    • ๐Ÿ—„ Usages of java.util.date (namely in Header class) were deprecated in v5.3 and have been replaced with java.time.LocalDateTime in v6
    • ๐Ÿ—„ Usages of java.io.File (namely in constructors of all file based record readers/writers) were deprecated in v5.3 and have been replaced with java.nio.file.Path in v6
    • ๐Ÿšš PayloadExtractor was deprecated in v5.3 and has been removed in v6. Use Utils#extractPayloads instead
    • ๐Ÿ—„ The constructor org.jeasy.batch.extensions.yaml.YamlRecordReader#YamlRecordReader(java.io.InputStream, java.lang.String) has been replaced with one that takes a java.nio.charset.Charset instead of a String for the charset name. Please note that this constructor was not marked with @Deprecated in v5.3 by mistake.
    • ๐Ÿ—„ The constructor org.jeasy.batch.json.JsonRecordReader#JsonRecordReader(java.io.InputStream, java.lang.String) has been replaced with one that takes a java.nio.charset.Charset instead of a String for the charset name. Please note that this constructor was not marked with @Deprecated in v5.3 by mistake.
    • ๐Ÿšš org.easybatch.extensions.stream.StreamRecordReader was moved to the core module under org.easybatch.core.reader
    • ๐Ÿšš Monitoring APIs (namely JobMonitor and JobMonitorMBean) have been moved from org.jeasy.batch.core.job to org.jeasy.batch.core.jmx
    • ๐Ÿ—„ JpaRecordReader#setFetchSize has been renamed to JpaRecordReader#setMaxResults. Note that this has not been deprecated in v5.3.
  • v5.3.0 Changes

    January 14, 2020

    ๐Ÿš€ This is a minor release which is the last release of the v5.x line. Here are the major changes:

    ๐Ÿ†• New features

    • Issue #333: Add Header/Footer callbacks in FileRecordWriter
    • ๐Ÿ”ง Issue #350: Add configurable JobReportFormatter in JobReportEmailSender

    โœจ Enhancements

    • ๐ŸŒฒ Issue #315: Replace Java Util Logging with SLF4J
    • Issue #320: Error Threshold - Zero Errors
    • ๐Ÿ”€ Issue #338: Inefficient JobMetrics merge loops in DefaultJobReportMerger
    • Issue #317: Unused XMLStreamException

    ๐Ÿ› Bug fixes

    • Issue #349: Incorrect writeCount when the transaction in HibernateRecordWriter is rolled back
    • Issue #348: Incorrect writeCount when the transaction in JpaRecordWriter is rolled back
    • Issue #347: Incorrect writeCount when the transaction in JdbcRecordWriter is rolled back
    • Issue #314: Error while setting a date (java.util.Date) field in JdbcRecordWriter
    • ๐Ÿ”Š Issue #345: HtmlJobReportFormatter should not generate apache velocity logs
    • Issue #337: XmlRecordReader throws a ClassCastException when reading a comment line
    • Issue #319: Excel reader Skipping Empty Columns

    ๐Ÿ—„ Deprecations

    For removal

    • ๐Ÿšš org.easybatch.xml.XmlWrapperTagWriter is deprecated in v5.3 and will be removed in v6
    • ๐Ÿšš org.easybatch.tools.monitoring.CliJobMonitoringListener, org.easybatch.tools.reporting.HtmlJobReportFormatter andorg.easybatch.tools.reporting.JobReportEmailSender are deprecated in v5.3 and will be removed in v6. The entire easybatch-tools module will be removed
    • ๐Ÿšš Quartz support is deprecated in v5.3 and will be removed in v6. All classes in easybatch-quartz module are deprecated and the entire module will be removed in v6
    • ๐Ÿš€ MongoDB support will be removed in v6. Please note that this decision has been made after releasing v5.3, hence you will not find any @Deprecated annotation on classes of this module in the v5.3 release.
    • ๐Ÿšš org.easybatch.jms.JmsPoisonMessage, org.easybatch.jms.JmsPoisonRecord, org.easybatch.jms.JmsPoisonRecordBroadcaster and org.easybatch.jms.JmsPoisonRecordFilter are deprecated in v5.3 and will be removed in v6. The JmsRecordReader will return null based on a timeout and not a JmsPoisonMessage.
    • ๐Ÿšš org.easybatch.core.record.PoisonRecord, org.easybatch.core.listener.PoisonRecordBroadcaster and org.easybatch.core.filter.PoisonRecordFilter are deprecated in v5.3 and will be removed in v6. The org.jeasy.batch.core.reader.BlockingQueueRecordReader will return null based on a timeout and not a PoisonRecord
    • ๐Ÿšš The constructor org.jeasy.batch.core.reader.BlockingQueueRecordReader#BlockingQueueRecordReader(java.util.concurrent.BlockingQueue<org.jeasy.batch.core.record.Record>, int) will be removed in v6. Please note that this constructor was not marked with @Deprecated in v5.3 by mistake.
    • ๐Ÿšš The constructor BlockingQueueRecordWriter(final List<BlockingQueue<Record>> will be removed in v6 as this writer will operate on a single blocking queue.
    • ๐Ÿšš org.easybatch.core.listener.RecordProcessingTimeListener is deprecated in v5.3 and will be removed in v6
    • ๐Ÿšš org.easybatch.core.filter.RecordNumberBetweenFilter, org.easybatch.core.filter.RecordNumberEqualToFilter, org.easybatch.core.filter.RecordNumberGreaterThanFilter and org.easybatch.core.filter.RecordNumberLowerThanFilter are deprecated in v5.3 and will be removed in v6
    • ๐Ÿšš JobReportFormatter and DefaultJobReportFormatter are deprecated in v5.3 and will be removed in v6

    With replacement

    • ๐Ÿšš org.easybatch.core.filter.FilteredRecordsSavingRecordFilter is deprecated in v5.3 and will be removed in v6. Use the new org.easybatch.core.filter.FilteredRecordsCollector instead
    • ๐Ÿšš org.easybatch.core.filter.StartWithStringRecordFilter is deprecated in v5.3 and will be removed in v6. Use org.easybatch.core.filter.StartsWithStringRecordFilter instead
    • ๐Ÿšš org.easybatch.core.filter.EmptyRecordFilter is deprecated in v5.3 and will be removed in v6. Use org.easybatch.core.filter.EmptyStringRecordFilter instead
    • ๐Ÿšš org.easybatch.core.filter.EndWithStringRecordFilter is deprecated in v5.3 and will be removed in v6. Use org.easybatch.core.filter.EndsWithStringRecordFilter instead
    • ๐Ÿ—„ Usages of java.util.date (namely in Header class) are deprecated and will be replaced with java.time.LocalDateTime starting from v6
    • ๐Ÿ—„ Usages of java.io.File (namely in constrcutors of all file based record readers/writers) are deprecated and will be replaced with java.nio.file.Path starting from v6
    • ๐Ÿšš PayloadExtractor is deprecated in v5.3 and will be removed in v6. Use Utils#extractPayloads instead
    • ๐Ÿ—„ The constructor org.jeasy.batch.extensions.yaml.YamlRecordReader#YamlRecordReader(java.io.InputStream, java.lang.String) will be replaced with one that takes a java.nio.charset.Charset instead of a String for the charset name. Please note that this constructor was not marked with @Deprecated in v5.3 by mistake.
    • ๐Ÿ—„ The constructor org.jeasy.batch.json.JsonRecordReader#JsonRecordReader(java.io.InputStream, java.lang.String) will be replaced with one that takes a java.nio.charset.Charset instead of a String for the charset name. Please note that this constructor was not marked with @Deprecated in v5.3 by mistake.

    ๐Ÿ—„ For more details about deprecations and replacements, please refer to the Javadocs.

    What's next?

    โšก๏ธ The next version will be v6 and will be based on Java 8. The root package name will be updated from org.easybatch to org.jeasy.batch for consistency with other Jeasy projects. Artifact IDs will also change to match the same naming pattern as other projects.

    โœ… I would like to thank all contributors (@anarayn, @MALPI , @jcamiloradamesa , @IvanAtanasov, @sheikhu, @vian42, @verdi8 and @psoares-resilient) for submitting bug reports, testing fixes and contributing to the project with awesome PRs!

  • v5.2.0 Changes

    November 18, 2017

    ๐Ÿš€ This is the second maintenance release of the v5.x line. It brings some features and bug fixes:

    ๐Ÿ”‹ Features

    • issue #280 : Invert PipelineListener call order
    • issue #283 : Add OSGi headers to manifest
    • issue #303 : Add FilteredRecordsSavingRecordFilter

    ๐Ÿ› Bug fixes

    • issue #291 : XmlRecordReader does not escape gt and lt
    • issue #292 : XmlRecordReader does not call getLocalPart() on QName
    • 0๏ธโƒฃ issue #293 : DefaultJobReportFormatter.formatReport duration rolls over after 24 Hours
    • issue #296 : FilteredCount metric should be renamed to FilterCount

    โœจ Enhancements

    • issue #301 : Add getters for file and charset in AbstractFileRecordReader
    • ๐Ÿ— issue #304 : otherwise method in content based queue record writer builders should be optional

    ๐Ÿ—„ API deprecation

    ๐Ÿ—„ The following methods are deprecated due to renaming FilteredCount to FilterCount in issue #296:

    • ๐Ÿ‘ท Method org.easybatch.core.job.JobMetrics#getFilteredCount
    • ๐Ÿ‘ท Method org.easybatch.core.job.JobMetrics#incrementFilteredCount
    • ๐Ÿ‘ท Method org.easybatch.core.job.JobMonitor#getFilteredCount
    • ๐Ÿ‘ท Method org.easybatch.core.job.JobMonitorMBean#getFilteredCount

    ๐Ÿšš These methods will be removed in v5.3.

    ๐Ÿš€ I would like to thank @DanieleS82, @ipropper and @tobias-- for their time and effort to make this release happen!

  • v5.1.0 Changes

    June 05, 2017

    ๐Ÿš€ This is minor release adding some new features and bug fixes. Here are the most important changes:

    ๐Ÿ†• New features

    • ๐Ÿ‘ท issue #92 : Add email sending job listener
    • ๐Ÿ“œ issue #121 : Add support for univocity-parsers
    • ๐Ÿ‘ issue #122 : Add support for Yaml format
    • issue #254 : Add MultiFileRecordReader
    • issue #255 : Add XmlFileRecordReader
    • issue #256 : Add JsonFileRecordReader
    • ๐Ÿ‘ท issue #260 : Add parameter to control how quartz should act when certain job is delayed for a long time
    • issue #269 : Add encoding parameter in XmlRecordReader
    • issue #270 : Add encoding parameter in JsonRecordReader
    • ๐Ÿ‘ท issue #278 : Add the ability to interrupt a running job
    • ๐Ÿ‘ท issue #279 : Add the ability to wait for jobs to terminate

    ๐Ÿ› Bug fixes

    • issue #266 : Incorrect data source name in text file records
    • issue #267 : Incorrect data source name in JmsRecord header
    • ๐Ÿ‘ท issue #268 : System properties absent from JobReport
    • issue #276 : PreProcessed records are ignored
    • issue #277 : XmlRecordReader should not escape special characters in tag's body

    โœจ Enhancements

    • ๐ŸŽ issue #271 : Improve performance of the JdbcRecordReader
    • issue #263 : JsonFileRecordReader should not throw a FileNotFoundException at construction time
    • issue #264 : XmlFileRecordReader should not throw a FileNotFoundException at construction time
    • ๐Ÿ— issue #178 : Improve the QueueRecordWriter builders to guide the user through predicate/queue mapping

    ๐Ÿ—„ Deprecations

    • issue #265 : XmlFileRecordReader constructor parameters should be swapped
    • ๐Ÿ—„ issue #274 : Deprecate JmsQueueSessionListener
    • ๐Ÿ—„ issue #275 : Deprecate JmsQueueConnectionListener

    โœ… Many thanks to all contributors for reporting bugs and testing fixes.
    ๐Ÿ“œ A special thank to @AussieGuy0 for adding support for uniVocity parsers!

  • v5.0.0 Changes

    October 23, 2016

    The main theme of this new major release is _ less is more _ โ— With this new version, Easy Batch has never been easier! Many APIs have been simplified and improved for more consistency and ease of use. Some APIs have been removed in order for you to do less work and delegate more to the framework ๐Ÿ˜„

    After one year of active development, version 5.0.0 is finally here. This would not have been possible without the amazing open source community !! Many thanks to all contributors who suggested features, filed bugs and reported inconsistencies. I'm really grateful and thankful to all of you!

    Version 5 is _ not _ 100% backward compatible with version 4. It introduces fundamental changes in the core framework in order to fix some inconsistent APIs. The processing workflow has been modified to improve performance.

    ๐Ÿš€ This is the final release of v5.0 after many snapshot versions and 2 release candidates. Please find below the complete change log and a migration guide to help you move from v4 to v5.

    Major changes

    • issue #211 : Inconsistent Batch API
    • issue #233 : Inconsistent RecordReader API
    • issue #223 : Inconsistent RecordWriter API
    • issue #227 : Inconsistent RecordDispatcher API
    • issue #221 : Resource management should be handled by the framework
    • issue #222 : Transaction management should be handled by the framework
    • ๐Ÿ‘ท issue #230 : JobExecutor should use an ExecutorService
    • issue #220 : Adapt listeners to batch processing workflow

    ๐Ÿ†• New features

    • issue #253 : Add MongoDBRecordMarshaller
    • ๐Ÿ‘ issue #251 : Add support for custom metrics
    • ๐Ÿ‘ issue #250 : Add java 8 stream support
    • ๐Ÿ‘ท issue #248 : Add onConnectionOpened method in JobMonitoringListener
    • issue #243 : add OpenCsvRecordMarshaller
    • issue #242 : add XmlRecordValidator
    • issue #241 : add option to activate/deactivate recursivity in FileRecordReader
    • issue #224 : Add RetryableRecordReader
    • issue #225 : Add RetryableRecordWriter
    • issue #226 : Add CompositeRecordWriter

    ๐Ÿ› Bug fixes

    • ๐Ÿ‘ท issue #247 : onConnectionClosed in JobMonitoringListener is inconsistent
    • issue #238 : FlatFileRecordReader should not throw a FileNotFoundException at construction time
    • issue #170 : Unable to determine number of filtered record from batch
    • issue #204 : Unnecessary generic type in BeanValidationRecordValidator
    • issue #209 : Unnecessary generic type in BlockingQueueRecordReader / BlockingQueueRecordWriter
    • ๐Ÿ‘ท issue #228 : Job executionId is not coherent
    • ๐Ÿ‘ท issue #229 : Job name is not a parameter
    • ๐Ÿ‘ท issue #231 : JobStatus.ABORTED is redundant
    • issue #232 : Possible resource leak in XmlWrapperTagWriter

    โœจ Enhancements and API changes

    • issue #252 : MongoDBRecordWriter should use bulk writes
    • โšก๏ธ issue #249 : Update example in maven quick start archetype
    • issue #236 : add constructor with java.nio.file.Path in FileRecordReader
    • issue #239 : add constructor with java.nio.file.Path in FileRecordWriter
    • issue #240 : add constructor with java.nio.file.Path in FlatFileRecordReader
    • issue #244 : ApacheCommonCsvRecord is redundant
    • issue #245 : ApacheCommonCsvRecordReader is redundant
    • ๐Ÿ”ง issue #246 : ApacheCommonCsvRecordMapper should be configurable with field names
    • issue #234 : RecordFieldExtractor is poorly named
    • issue #235 : BeanRecordFieldExtractor is poorly named

    Migration guide

    ๐Ÿ‘ท JobBuilder

    ๐Ÿšš Methods deprecated in v4.2 have been removed in v5:

    • ๐Ÿ‘ท JobBuilder#skip(long)
    • ๐Ÿ‘ท JobBuilder#limit(long)
    • ๐Ÿ‘ท JobBuilder#timeout(long) and JobBuilder#timeout(long, TimeUnit)
    • ๐Ÿ‘ท JobBuilder#silentMode(boolean)
    • ๐Ÿ‘ท JobBuilder#strictMode(boolean)
    • ๐Ÿ‘ท JobBuilder#jmxMode(boolean)
    • ๐Ÿ‘ท JobBuilder#call()

    ๐Ÿšš The keepAlive parameter has been removed since resource handling is now done by the framework ( issue #221 ). Hence the following methods have been removed from JobBuilder:

    • ๐Ÿ‘ท JobBuilder#reader(RecordReader recordReader, boolean keepAlive)
    • ๐Ÿ‘ท JobBuilder#reader(RecordReader recordReader, boolean keepAlive, RetryPolicy retryPolicy)

    ๐Ÿšš The "Retry Read" feature is now done with a decorator of RecordReader (issue #224 ). Hence the method JobBuilder#reader(RecordReader recordReader, RetryPolicy retryPolicy) has been removed

    ๐Ÿšš The RecordDispatcher API has been removed. Hence, the method JobBuilder#dispatcher(RecordDispatcher recordDispatcher) has been removed

    ๐Ÿ‘ท JobExecutor

    • ๐Ÿ‘ท The method org.easybatch.core.job.JobExecutor.execute is no more static, you need to create a JobExecutor instance to execute jobs
    • ๐Ÿ‘ท Job executors must be shutdown explicitly

    Resource handling & transaction management

    • ๐Ÿšš The constructors of JdbcRecordReader/JdbcRecordWriter now take a JDBC DataSource as argument instead of a Connection and the JdbcConnectionListener/JdbcTransactionListener have been removed
    • ๐Ÿšš The constructors of JpaRecordReader/JpaRecordWriter now take a EntityManagerFactory as argument instead of a EntityManager and the JpaEntityManagerListener/JpaTransactionListener have been removed
    • ๐Ÿšš The constructors of HibernateRecordReader/HibernateRecordWriter now take a SessionFactory as argument instead of a Session and the HibernateSessionListener/HibernateTransactionListener have been removed

    ๐Ÿšš Moved APIs

    • ๐Ÿšš org.easybatch.core.dispatcher.Predicate has moved to org.easybatch.core.writer.Predicate
    • ๐Ÿšš org.easybatch.core.dispatcher.DefaultPredicate has moved to org.easybatch.core.writer.DefaultPredicate
    • ๐Ÿšš org.easybatch.core.dispatcher.PoisonRecordBroadcaster has moved to org.easybatch.core.listener.PoisonRecordBroadcaster

    โœ‚ Removed APIs

    ๐Ÿšš The Batch class is no more a Record. Instead, it now contains a list of records. Hence, all interfaces and implementations related to the previous inconsistent Batch API have been removed: BatchReader, BatchFilter, BatchMapper, BatchProcessor, BatchMarshaller, BatchValidator and BatchWriter.

    ๐Ÿšš The "record dispatcher" concept has been removed. All dispatchers have been transformed into writers:

    • BroadcastRecordDispatcher -> BlockingQueueRecordWriter
    • ContentBasedRecordDispatcher -> ContentBasedBlockingQueueRecordWriter
    • ContentBasedRecordDispatcherBuilder -> ContentBasedBlockingQueueRecordWriterBuilder
    • RoundRobinRecordDispatcher -> RoundRobinBlockingQueueRecordWriter
    • RandomRecordDispatcher -> RandomBlockingQueueRecordWriter
    • BroadcastJmsRecordDispatcher -> BroadcastJmsQueueRecordWriter
    • ContentBasedJmsRecordDispatcher -> ContentBasedJmsQueueRecordWriter
    • ContentBasedJmsRecordDispatcherBuilder -> ContentBasedJmsQueueRecordWriterBuilder
    • RandomJmsRecordDispatcher -> RandomJmsQueueRecordWriter
    • RoundRobinJmsRecordDispatcher -> RoundRobinJmsQueueRecordWriter

    ๐Ÿšš Exception handling have been simplified, the following exceptions have been removed:

    • org.easybatch.core.reader.RecordReaderOpeningException
    • org.easybatch.core.reader.RecordReaderClosingException
    • org.easybatch.core.reader.RecordReadingException
    • org.easybatch.core.processor.RecordProcessingException
    • org.easybatch.core.dispatcher.RecordDispatchingException
    • org.easybatch.core.field.RecordFieldExtractionException
    • org.easybatch.core.mapper.RecordMappingException
    • org.easybatch.core.marshaller.RecordMarshallingException
    • org.easybatch.core.validator.RecordValidationException
    • org.easybatch.core.writer.RecordWritingException

    ๐Ÿšš ApacheCommonCsvRecord was removed. This is redundant with StringRecord.
    ๐Ÿšš ApacheCommonCsvRecordReader was removed. This is redundant with FlatFileRecordReader.

    Other changes

    • ๐Ÿšš org.easybatch.core.processor.ComputationalRecordProcessor deprecated in v4.2 has been removed
    • ๐Ÿšš JobResult deprecated in v4.2 has been removed from JobReport, this is related to the removal of ComputationalRecordProcessor
    • All constructors in XmlWrapperTagWriter now take a File instead of FileWriter, this is due to a resource leak
    • BeanValidationRecordValidator is no more parametrized type
    • Predicate is no more a parametrized type
    • BlockingQueueRecordReader is no more a parametrized type
    • BlockingQueueRecordWriter is no more a parametrized type
    • RecordFieldExtractor interface has been renamed to FieldExtractor
    • BeanRecordFieldExtractor class has been renamed to BeanFieldExtractor
  • v5.0.0-RC2 Changes

    October 14, 2016

    ๐Ÿ†• New features

    • issue #243 : add OpenCsvRecordMarshaller
    • issue #242 : add XmlRecordValidator
    • issue #241 : add option to activate/deactivate recursivity in FileRecordReader

    ๐Ÿ› Bug fixes

    • issue #238 : FlatFileRecordReader should not throw a FileNotFoundException at construction time

    โœจ Enhancements and API changes

    • issue #236 : add constructor with java.nio.file.Path in FileRecordReader
    • issue #239 : add constructor with java.nio.file.Path in FileRecordWriter
    • issue #240 : add constructor with java.nio.file.Path in FlatFileRecordReader
    • issue #244 : ApacheCommonCsvRecord is redundant
    • issue #245 : ApacheCommonCsvRecordReader is redundant
    • ๐Ÿ”ง issue #246 : ApacheCommonCsvRecordMapper should be configurable with field names
  • v5.0.0-RC1 Changes

    September 30, 2016

    Major changes

    • issue #211 : Inconsistent Batch API
    • issue #233 : Inconsistent RecordReader API
    • issue #223 : Inconsistent RecordWriter API
    • issue #227 : Inconsistent RecordDispatcher API
    • issue #221 : Resource management should be handled by the framework
    • issue #222 : Transaction management should be handled by the framework
    • ๐Ÿ‘ท issue #230 : JobExecutor should use an ExecutorService
    • issue #220 : Adapt listeners to batch processing workflow

    ๐Ÿ†• New features

    • issue #224 : Add RetryableRecordReader
    • issue #225 : Add RetryableRecordWriter
    • issue #226 : Add CompositeRecordWriter

    โœจ Enhancements

    • issue #234 : RecordFieldExtractor is poorly named
    • issue #235 : BeanRecordFieldExtractor is poorly named

    ๐Ÿ›  Fixed bugs

    • issue #170 : Unable to determine number of filtered record from batch
    • issue #204 : Unnecessary generic type in BeanValidationRecordValidator
    • issue #209 : Unnecessary generic type in BlockingQueueRecordReader / BlockingQueueRecordWriter
    • ๐Ÿ‘ท issue #228 : Job executionId is not coherent
    • ๐Ÿ‘ท issue #229 : Job name is not a parameter
    • ๐Ÿ‘ท issue #231 : JobStatus.ABORTED is redundant
    • issue #232 : Possible resource leak in XmlWrapperTagWriter
  • v4.2.1 Changes

    February 25, 2017

    ๐Ÿš€ This is a bug fix release for the following issue:

    • issue #237 : MsExcel file not closed by the MsExcelRecordReader

    โœ… Many thanks to @packley1 for reporting the issue and testing the fix.