Skip to content
Switch branches/tags
Go to file
5 contributors

Users who have contributed to this file

@dmoebius @Keymaster65 @siordache @austermann @theodiefenthal
246 lines (213 sloc) 14.7 KB
COPPER 5.3.0
- New feature: compatible with Java 15 and 16
- New feature: allow specifying additional options for the workflow compiler (via system property "org.copperengine.workflow.compiler.options")
- Bugfix: For issue 107 - GitWorkflowRepository.updateLocalGitRepositories() fails if credentials are needed (
COPPER 5.2.0
- New feature: compatible with Java 14
- Bugfix: Fix for missing CLOB support in PostgreSQL and MySQL (thanks to Winfried Klum)
COPPER 5.1.0
- New feature: Lightweight CI/CD pipeline using git repositories only for changes in workflows (see GitWorkflowRepository).
- Maintenance: Added compatibility tests for reordering local variables
- Maintenance: Added tests that shows copper internals (AnalyseTest)
COPPER 5.0.2
- Maintenance: Now using ASM 7.0
COPPER 5.0.1
- Bugfix: Fixed SQL bug in Postgres Dialect
COPPER 5.0.0
- New feature: compatible with Java 9 and 10 (in addition to Java 8)
- New feature: added support for the Java Platform Module System
- New feature: Query Workflow data with pagination (i.e. offset and max. number workflows in result). => For monitoring UI.
- New feature: Delete or restart workflows based on a filter.
- New feature: TransientLockManager as analogon to PersistentLockmanager but for transient engines. (Have a simple to use in memory lock for workflows with COPPER wait.)
- New feature: You can assign your engine an appClusterId. All engines with the same appClusterId will be grouped together in Monitoring UI (and it is assumed that they work on the same database in cluster mode).
- Bugfix: Acknowledges from engine.notify were sometimes neither accepted nor rejected.
- Info: Java 7 and older versions no longer supported
- Breaking: Against COPPER 4.X: The PersistentLockManagerImpl now resides in another package, namingly org.copperengine.core.lockmgr.persistent and extends LockManager interface instead of PersistentLockManager interface. Further, the constructor expects an enum of the "spoken database language" instead of a PersistentLockManagerDialect. This provides a new abstraction layer as the user should just specify which kind of database is used for the persistent lock manager and shouldn't care if therefore a subclass needs to be constructed or not.
COPPER 4.4.0
- New feature: Delete a broken workflow from the database (Can be called via JMX): PersistentProcessingEngineMXBean.deleteBroken(id)
COPPER 4.3.0
- Maintenance: Renamed PersistentLockManagerDialectSQL.insertOrUpdate() into insertLock()
- New feature: #65 Extend JMX Interface
- Refactoring: removed old Java FX Monitoring GUI - will be replaced by a new web GUI see
- New feature: ScottyDBStorage.startup is now idempotent, i.e. multipe invokations do not start multiple ENQUEUE threads (which would cause problems)
COPPER 4.2.0
- New feature: Multi-engine support for MySQL and Postgres (Attention! DB schema of MySQL, Postgres, DerbyDB and H2 has changed!)
- Maintenance: Removed various deprecated methods
- New feature: YamlSerializer - using the YAML format for storing workflow data in the database
- New feature: #64 Monitor application- and db-server clocks (Oracle only)
- New feature: Upgrade of various dependencies, e.g. gradle, c3p0, derby, h2, etc.
COPPER 4.1.2
- New feature: COPPER performance test available. See
- New feature: Configurable concurrent or downstream response loading in OracleDialect
- New feature: Log also 'count' in LoggingStatisticCollector
- Bugfix: Some SQL statistics were missing in OracleDialect
COPPER 4.1.1
- New feature: Speed up of "Workflow.resubmit" and wait/notify with response arriving before wait is called
- Bugfix: Issue #62 Copper might remove too much responses when a workflow instances finishes
COPPER 4.1.0
- New feature: Issue #61 Speed up PersistentLockManager - Attention! The interface and usage of PersistentLockManager has changed in this release! Also Oracle package "copper-body.sql" has changed.
- Refactoring: Removed hard-coded datasources from regression test - replaced by configuration via property files
COPPER 4.0.3
- Bugfix: Issue #60 PersistentScottyEngine.notifyProcessorPoolsOnResponse without effect when using PersistentLockManager
- Bugfix: Issue #59 SortedReponseList StackOverflow
- Refactoring: No NOT use spring framework in regression tests where possible
COPPER 4.0.2
- Bugfix: Issue #56 preserve response order
- Bugfix: Issue #58 PreparedStatement leak in org.copperengine.core.persistent.SqlNotify
COPPER 4.0.1
- New feature: Some extension in the JMX interface
- New feature: In persistent engines using an RDBMS, responses provided to getAndRemoveRespone(s) are ordered by response TS
COPPER 4.0.0
- New feature: Some extension in the JMX interface
- New feature: New method Workflow.savepoint() - Causes the engine to stop processing of this workflow instance and to enqueue it again. May be used in case of processor pool change or to create a 'savepoint' in a persistent engine.
- Bugfix: Issue #53 Workflow.wait(..NO_TIMEOUT..) does not work for MySQL
- New feature: Apache Cassandra Support! Use a Cassandra NoSQL DB for persistence - this enables high available and scalable solutions
- New feature: New WorkflowRepository - ClasspathWorkflowRepository: Very easy to use but with less features in comparison to FileBasedWorkflowRepository
- New feature: Simplified creation of a persistent engine with CassandraEngineFactory and RdbmsEngineFactory - these factories do most of the work for you, creating and plugging everything together
- New feature: now returns the wfInstanceId
- Maintenance: Now using ASM 5.0.4
- Info: Java 6 no more supported (only 7 and 8)
COPPER 3.2.2
- New feature: Added support for OSGi metadata in build artefacts
COPPER 3.2.1
- Refactoring: Fixed many typos in copper-monitoring.
- Refactoring: Renamed Dashboard as Configuration in copper-monitoring-client.
- New feature: Preliminary version of the new Dashboard view.
- Bugfix: Issue #43: Copper Monitoring Workflows View - Total Count always 0.
- Bugfix: Issue #44: Copper Monitoring View - Workflow Repository multiple entry for workflow names.
- Bugfix: Issue #45: Copper Monitoring: High loading times for Dashboard and Resources views.
- New feature: Support for Java 8
- gradle update (now using version 2.0)
COPPER 3.1.1
- Bugfix: COPPER doesn't work with MySQL with case-sensistive table names #42
- New feature: PersistentLockManager - a service to obtain/manager persistent locks, e.g. to functionally synchronize workflow instances.
- New feature: PersistentProcessorPool.suspendDequeue/resumeDequeue Suspends/resumes dequeuing of workflow instances from the storage.
- New feature: New utility org.copperengine.core.util.Backchannel, that offers functionality to signal a response from within a persistent workflow to its originator
- New feature: support for the H2 database
- New feature: added SimpleJmxExporter in copper-coreengine to ease the registering of JMX beans when COPPER runs without Spring
- Maven: copper-coreengine: moved dependency on C3P0 to copper-regtest. Removed *ConnectionCustomizer classes, because they broke the JDBC spec regarding autoCommit; also removed OracleConnectionTester as it can be substituted by setting 'preferredTestQuery="SELECT 1 FROM DUAL"' in C3P0 datasource.
- Maven: copper-coreengine: removed unnecessary dependencies on aopalliance, findbugs-annotations and commons-codec, so the only remaining dependencies are on ASM and slf4j-api
- no changes
- New feature: COPPER now uses the Eclipse compiler ecj (or any other JSR-199 compatible java compiler) when found on the CLASSPATH and the default Java compiler is not available. Thus you can run COPPER on a normal JRE instead of a full JDK, ie. you no longer need to provide tools.jar as long as you add ecj.jar to your runtime dependencies.
- Bugfix: Issue #26: Removed commons-logging from dependencies
- Bugfix: Issue #25: Removed log4j dependency from copper-coreengine
- interim release for build testing purposes only; nothing added or changed
- interim release for build testing purposes only; nothing added or changed
- First public release on Maven Central
- Refactoring: Renamed COPPER major Throwable from "de.scoopgmbh.copper.InterruptException" to "org.copperengine.core.Interrupt". Persistent workflow instances and responses in existing databases keep compatible due to a loadtime adaptation feature - see StandardJavaSerializer.classnameReplacement
- Refactoring: COPPER's toplevel package has been renamed from "de.scoopgmbh.copper" to "org.copperengine". Persistent workflow instances and responses in existing databases keep compatible due to a loadtime adaptation feature - see StandardJavaSerializer.classnameReplacement
- Refactoring: All Spring supporting classes have been moved to an own subproject: copper-spring. Attention! SpringTransactionController and SpringTxnAuditTrail have been moved to another package
- Refactoring: de.scoopgmbh.copper.audit.BatchingAuditTrail does no longer implement spring's InitializingBean. This makes copper less dependent on spring stuff.
- Refactoring: de.scoopgmbh.copper.Response.internalProcessingTimeout changed from Integer to Long to enable really LONG timeouts
- New feature: Added new wait methods, e.g. de.scoopgmbh.copper.Workflow.wait(WaitMode, long, TimeUnit, String...)
- New feature: throws DuplicateIdException if an existing workflow instance id is used - this is also implemented for the transient engine which substitutes throwing an IllegalStateException
- New feature: Default value for property "loadNonWorkflowClasses" in "FileBasedWorkflowRepository" changed from false to true, due to various problems, e.g. Switch-case not working out-of-the-box
- Bugfix: ArrayIndexOutOfBoundsException and other exceptions during workflow instrumentation when extensively using nested blocks and local variables
- New feature: Extended JMX interface
- New feature: COPPER now allows for multipe responses for the same correlationId - see new method Workflow.getAndRemoveResponses(..)
- New feature: Custom persistence - persist application specific data in extra database tables and columns. This enables viewing (and modifying) data with standard SQL
- New feature: Monitoring GUI (beta)
- Maintenance: Now using ASM 4.1
- Bugfix: Timeout signaled for missing responses in case of WaitMode.FIRST
- New feature: generic return value for RetryingTransaction
- internal development release - not published
- Now using gradle instead of ant for build
- New feature: Refactoring of StandardJavaSerializer to enable easy subclassing
- New feature: Batching latency time now configurable
- New feature: Extendable/customizable AuditTrail, see issue #38
- New feature: Disengageable early response handling, see issue #37
- New feature: Versioning of Workflows now supported by COPPER
- New minor feature: LoggingStatisticCollector.setResetAfterLogging
- Documentation enhancement: Compatibility rules for workflow modifications
- Documentation enhancement: Revised example copper project
- New feature: Check consistency of all workflow instances during startup (optional) - IDs of inconsistent workflows are logged
- Bugfix: Incorrect handling of INVALID workflow instances
- New feature: workflow object state and data are serialized in different DB columns
- Bugfix: wait(First) followed by wait(?) containing same correlation id caused unique constraint violation exception
- New feature: PersistentProcessor now public to allow subclassing
- New feature: Processor Pools wait up to 30 seconds (configurable) for termination of their processors.
- New feature: Configurable transaction management - COPPER comes with internal or Spring transaction management
- Refactoring: of DB layer: one single db storage class and various configurable DBMS specific SQL dialects; Configurable Transaction Mgmt
- New feature: suspend/resume ProcessorPools
- Bugfix: for MySQL, Postgres & DerbyDB
- New feature: custom stale response timeout
- New feature: Workflow classname in DB - for debugging/monitoring
- New feature: New property for DBStorage: staleResponseRemovalTimeout
- Bugfix: in instrumentation: Bad exception handling may cause non deterministic behavior
- New feature: Implement a custom batch runner. Used e.g. for custom transaction handling
- New feature: Allow custom seqnr for audit trail events
- New feature: Store exceptions during "registerCallback/wait" in database error table
- Bugfix: for AuditTrail on Oracle DB when payload.length >= 4000
- New feature: JMX interface to query AuditTrails
- New feature: PostgreSQL support
- New feature: Hook custom code into the transaction context of COPPER "wait" checkpoints.
- Bugfix: Internal VerifyError when using inner classes.
- New feature: for FileBasedWorkflowRepository: Multiple source directories and multiple source archives
- New feature: Provide db connection used for engine.notify
- New feature: Provide custom javac compiler options for workflow compilation
- Refactoring: Now using slf4j (simple logging fascade for java) instead of log4j
- Bugfix: Fixed some minor bugs or typos
- JMX Management & Monitoring
- support for Java 7
- Enable restart of INVALID workflow instances via COPPER API
- Compression/Base64-Encoding for AuditTrail
- Enable to keep finished workflow instances in the DB
- many bugfixes (see svn history for details)
Unreleased first COPPER version with all basic features, e.g.
- lightweighted and high performant workflow engine
- workflows described in java
- asynchronous waits without thread blocking
- persistent or transient workflows
- configurable amount and size of processor pools
- persistence support for Oracle and MySQL
- any many more...