- [edison-validation]: Add annotation
@UrlParameterEntity
to mark classes that are used to hold request parameters. Here a400 BadRequest
should be thrown in case of validation errors. When a validation error occurs in a request body we throw a422 Unprocessable Entity
error.
- [all]: Update to Spring Boot 3.3.4
- [general]: increase gradle version to 8.x
- [edison-togglz]
- Fix NullPointerException for togglz check when togglz state is retrieved without HttpServletRequest.
- **[all]
- Upgrade to Spring Boot 3.3.2
- Dependency Updates
- **[edison-mongo]
- Downgrade mongodb version to 4.11.2 because this is the version still used by spring boot 3.2.5
- [all]
- Dependency updates
- [edison-core]
- Add seperator-option to use sections in a parameter name as properties e.g.
some/value
results insome.value
with a seperator of/
- Add seperator-option to use sections in a parameter name as properties e.g.
- [all]
- Spring Boot 3.2.2
- Dependency updates
- [edison-core]
- Add possibility to use authorization for http calls to jobtrigger registry
- [edison-togglz]
- Use UTC in time range activation strategy
- [edison-togglz]
- Add registry for new activation strategies
- [edison-togglz]
- Add activation strategy
TimeRangeActivationStrategy
for time range
- Add activation strategy
- [all]
- Spring Boot 3.1.3
- Dependency updates
- [edison-jobs]
- Fix job check in JobMessageLogAppender
- [all]
- Spring Boot 3.1.1
- Dependency updates
- [all]
- Spring Boot 2.7.13
- Dependency updates
- [all]
- add -parameters compile flag to avoid warnings
- [edison-validation]
- Fix loading of ValidationMessages.properties
- In previous version edison has only loaded the first validation property file instead of merging all candidates
- In the past this has always worked because the error message rendering was always triggered after Spring validations
- With Spring Framework v6.0.10 MethodArgumentNotValidException can also be thrown before validators
- As the resources are permanently cached by Java this issue never occurred before Spring Framework v6.0.10
- Fix uses the existing solution from Hibernate and combines it with our custom Spring message source
- [edison-validation]
- add dot to safe id validator
- change thyemleaf include syntax to new style
- [all]
- Spring Boot 3.0.7
- Spring 6.0.9
- Spring Security 6.1.0
- Togglz 4.0.1
- [all]
- Spring Boot 2.7.12
- Dependency updates
- [edison-jobs]
- Formerly removed JobEventPublisher is back (but still deprecated)
Edison 3.0.0 requires Java 17 or later, see the Readme for a small migration guide.
-
[all]
- Spring Boot 3.0.2
- Spring 6.0.4
- Spring Security 6.0.1
- Togglz 4.0.0-M1
- Hibernate Validator 8.0.0.Final
- Java Validation Api 3.0.2
-
[edison-jobs]
- removed JobEventPublisher
-
[edison-core]
- whitelistedPaths is now allowlistedPaths in ldap configuration
- [all]
- Spring Boot 2.7.8
- [edison-togglz]
- Update to togglz 3.3.3 - Note: You might have to replace chained calls to TestFeatureManager's enable and disable functions with non-chained ones.
- [all]
- Dependency updates, including Spring Security 4.7.5
- [all]
- Update to Spring Boot 2.7.5
- [all]
- Update to Spring Boot 2.7.4
- [all]
- Update to Spring Boot 2.7.2
- [all]
- Update to Spring Boot 2.7.1
- [all]
- Update to Spring Boot 2.7.0 (With metrics bug workaround spring-projects/spring-boot#31150)
- Update to UnboundID LDAP SDK for Java 6.0.5 which was outdated since the minimal variant was aborted 2017
- [edison-jobs]
- Configure read and write timeout in MongoJobMetaRepository
- [edison-mongo]
- Support mongoURI to connect to MongoDB server(s) with property:
edison.mongo.uri
- Support mongoURI to connect to MongoDB server(s) with property:
- [all]
- Update to Spring Boot 2.6.7, Spring Framework 5.3.19 and further dependency updates
- [all]
- Update to Spring Boot 2.6.6 and Spring Framework 5.3.18 to fix Spring4Shell issue
- [all]
- Update to Spring Boot 2.6.5
- [edison-mongo]
- add support for MongoDB ConnectionString (AWS_IAM)
- [all]
- Dependency updates (Spring Boot 2.6.4 etc.)
- [edison-togglz]
- add temporary
EdisonHeaderActivationStrategy
to replace bad performing HeaderActivationStrategy (will be removed when togglz fixes it)
- add temporary
- [edison-togglz]
- add strategy to
FeatureToggleRepresentation
- add HeaderOptOutStrategy to deactivate features when a header exists
- add strategy to
- [all]
- Update to Spring Boot 2.6.2 and other dependencies
- [all]
- Update to Spring Boot 2.6.1
-
[all]
- Update to Spring Boot 2.6.0
-
[edison-oauth]
- REMOVAL: Edison Oauth was based on some deprecated Spring Security parts and was not building any more with the latest versions. Because it was not maintained for some while, the module was removed from Edison Microservice.
-
[edison-mongo]
- add command listener to MongoClient
- [all]
- Update to Spring Boot 2.5.6
- [all]
- Update to Spring Boot 2.5.5
- [edison-togglz]
- add a check that prevents the service to start if both a mongo and an s3 togglz config are applying
- Update to Spring Boot 2.5.4
- [edison-core]
- Update to Spring Boot 2.5.2
- Dependency updates
- [edison-core]
- Update to Spring Boot 2.5.1
- [edison-core]
- Update to Spring Boot 2.5.0 and Spring 5.3.8
- [edison-mongo] add writeConcern to MongoProperties
- [edison-togglz] change ConditionalOnBean(MongoClient) to ConditionalOnClass(MongoClient) for
MongoTogglzConfiguration
MongoTogglzConfiguration must be disabled byedison.togglz.mongo.enabled=false
- [all]
- add Maven
groupId
,artifactId
andversion
asImplementation-Vendor
,Implementation-Title
andImplementation-Version
toMETA-INF/MANIFEST.MF
for each submodule. - Dependency updates (Introduce dependabot)
- add Maven
- [edison-togglz]:
- update to togglz 2.9.5
- Add property to bypass CSRFToken validation under
edison.togglz.console.validateCSRFToken
which defaults to true
- [edison-togglz]:
- Add support for feature groups
- [edison-testsupport]:
- Add support for full featureState to edison-testsupport/togglz
- [edison-core]:
- Update to Spring Boot 2.4.2
- Catch errors in StatusDetailIndicators when aggregating them, so that aggregation is not aborted completely
- Change transient dependency for AWS SDK SSM to compileOnly
- [edison-jobs]
- Fix possible ArithmeticException in MongoJobRepository
-
[all]
- Add dependency constraint to junit 4.13.1 because some dependencies bring an old version which has a security vulnerability
-
[edison-validation]
- disable evaluation of EL in bean validation to prevent injection vulnerability ( see https://securitylab.github.com/research/bean-validation-RCE)
- [edison-core]:
- Update to Spring Boot 2.4.0
- [edison-core]:
- Update to Spring Boot 2.4.0-RC1
- [edison-mongo]: Fix bug in Mongo properties that prevented credentials from being used
Breaking Change:
Edison 2.3.x requires Java 11 or higher.
-
[edison-core]:
- Update to Spring Boot 2.3.0
- Remove AsyncHttpClient and use native Java HTTP Client
-
[edison-mongo]
- Update to Mongo 4 drivers
- Replace embedded mongo in tests
- [edison-jobs] / [edison-mongo]: Introduce a JobCleanupStrategy that looks for too big MongoDB documents that may originate from running jobs with many messages.
-
[edison-mongo]: Discover available compression algorithms for mongodb client-server-compression. Certain compression algorithms require extra dependencies. Edison-mongo does not provide them.
You need to add the following dependencies to your application in order to use certain compression algorithms:- for ZstdCompressor, add the dependency to com.github.luben:zstd-jni:1.4.4-9
- for SnappyCompressor, add the dependency to org.xerial.snappy:snappy-java:1.1.7.4
- [edison-mongo]: Add configuration property
clientServerCompressionEnabled
to enable client-server compression
-
[edison-jobs]: Load MongoJobRepository conditionally on class MongoClient instead of on bean MongoClient.
Current spring boot 2.2.6 seems to have a different order in which beans are instantiated and the MongoClient bean is created after the condition check for MongoJobsRepository.
- [edison-jobs]: Format job timestamps in local browser time on client side
- [general]: Use latest AWS SDK 2.10.56 as per AWS recommendation (important bugfixes)
- [edison-jobs]: DynamoDb Support
- fix ETag handling for DynamoJobRepository
- [edison-jobs]: DynamoDb Support
- creation of tables removed
- Fixes for Enabling Jobs and ClearRunningJob
- Clear table when calling deleteAll instead of deleting and recreating table
- [edison-jobs]: add DynamoDb Support for Edison-Jobs
- Properties for enabling DynamoDb:
- edison.jobs.dynamo.enabled: Enable DynamoDb (disabled by default)
- edison.jobs.mongo.enabled: MongoDb needs to be disabled
- edison.jobs.dynamo.jobinfo.tableName: Name for JobInfo table (gets created if non-existent)
- edison.jobs.dynamo.jobinfo.pageSize: PageSize for scan-requests against JobInfo table
- edison.jobs.dynamo.jobmeta.tableName: Name for JobMeta table (gets created if non-existent)
- Properties for enabling DynamoDb:
- [general]: upgrade aws sdk
- [edison-core]: Fix basic auth credentials retrieval on wrong format
- [general]: Update to Spring Boot 2.2
See https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.2-Release-Notes for a migration guide
- [general]: Update dependencies
- [general]: increase gradle version
- [edison-togglz]:
- Make S3TogglzRepository cache dependent from String instead of Feature in order to support kotlin togglz
- Add
getFeatureFromName(String name)
- function to be able to retrieve current feature by its name
- [edison-togglz]:
- Make FeatureManager @ConditionalOnMissingBean to allow overriding
- Get @Label and other annotations from FeatureManager.getMetaData so that this works with Features that are not enums, too
- Add methods to FeatureManagerSupport that get the FeatureManager as parameter instead of from the FeatureContext
- [edison-validation]: Make error profile configurable via application property 'edison.validation.error-profile'
- [edison-validation]: Add EnumListValidator to be able to validate a list of enums
- [edison-togglz]:
If
edison.togglz.s3.check-bucket
is enabled, the s3 bucket has to be available in order to let the service startup correctly. This prevents the in-memory repository to instantiate.
- [general]: Bugfix: Use async http client version that fits AWS SDK
-
[edison-oauth]: Suppress unnecessary warning on startup
-
[general]: Various dependency upgrades
- [edison-oauth]: Block query of public keys until keys have been initially fetched from server
-
[edison-jobs]:
- Reimplement the JobEventPublisher from Edison 1.x for backwards compatibility
-
[edison-oauth]:
- Add dependency to org.springframework.security:spring-security-web:5.1.4.RELEASE
- Fixes thread-safety issue in OAuthPublicKeyInMemoryRepository
- [edison-togglz]:
Re-Enable Prefetch-Feature for
S3TogglzRepository
in newer Spring versions again
-
[edison-togglz]:
edison.togglz.mongo.enabled
is now true by default -
[edison-jobs]:
edison.jobs.mongo.enabled
is now true by default
- [general]: Updated to Spring Boot 2.1.2
- [general]: Updated to Gradle 5.0
- [general]: Updated to AWS SDK 2.2.0
New Features:
- [edison-core] Enhanced LDAP configuration to require a specific role to access secured paths. To achieve this you
can set the property
edison.ldap.required-role
. As usual, all allowlisted paths will be ignored. - [edison-core] Enhanced LDAP configuration to use more than one prefix path with the
property
edison.ldap.prefixes
.
The old propertyprefix
is now deprecated, but still usable and will be appended toprefixes
.
Deprecation:
- [edison-core] The single value property
edison.ldap.prefix
is now deprecated and replaced by the multi value propertyedison.ldap.prefixes
.
The old propertyprefix
is now deprecated, but still usable and will be appended toprefixes
.
Breaking Changes:
- [edison-aws] AWS-related stuff now requires an AwsCredentialsProvider to be exposed as a Spring bean. No default bean available anymore.
- [edison-aws] S3 togglz repository is automatically used if the property
edison.togglz.s3.bucket-name
is set,edison-togglz.s3.enabled
is not false, and if the S3Client.class is in the classpath of your Edison service. A S3Client bean is required in the ApplicationContext. - [edison-aws] S3TogglzRepository is now part of [edison-togglz] and is automatically used if the property
edison.togglz.s3.bucket-name
is set,edison.togglz.s3.enabled
is true and a bean of typesoftware.amazon.awssdk.services.s3.S3Client
is provided. - [edison-aws] ParamStorePropertySourcePostProcessor moved to [edison-core].
The properties used to configure the paramstore have changed from
edison.aws.config.*
toedison.env.paramstore.*
- [edison-mongo] MongoTogglzRepository is now part of [edison-togglz] and will be autoconfigured
if
edison.togglz.mongo.enabled
is true and a bean of typecom.mongodb.MongoClient
is provided. - [edison-mongo] MongoJobRepository is now part of [edison-jobs] and will be autoconfigured
if
edison.jobs.mongo.enabled
is true and a bean of typecom.mongodb.MongoClient
is provided. - [edison-core] ParamStorePropertySourcePostProcessor moved to [edison-core] and removed project
[edison-paramstore].
The properties used to configure the paramstore have changed from
edison.aws.config.*
toedison.env.paramstore.*
Maintenance:
- [general] Tests have been moved from JUnit4 to JUnit5 in all projects.
- [general]: You need Java >9 to compile, but target compatibility is set back to 1.8
- [edison-mongo] create compound index of
type
andstarted
in job repository
-
[edison-togglz]: TogglzStateRepositories are now always Cache-Repositories with a TTL of 60 Seconds. If you need a non-Cached repo or any other way of handling these states, feel free to write a custom
TogglzConfig
spring bean configuration. -
[edison-aws]: There is now a
S3TogglzRepository
generally available. It will store Togglz-State in S3, caches the state and refreshes it every 60 seconds from S3.
-
[general]: Updated to Spring Boot 2.0.4.RELEASE
-
[general]: Updated to Spring Framework 5.0.8.RELEASE
-
[general]: Updated to Gradle 4.10
-
[general]: Changed to Java 10 SDK
-
[general]: Updated dependencies to latest versions
-
[edison-togglz]: Added Testconfiguration for TogglzTest
-
[edison-core]: remove codahale metrics and use builtin micrometer in Spring Boot 2
-
[edison-aws]: Migrate modules
edisown-aws-s3
andedison-aws-config
into submoduleedison-aws
-
[edison-aws]: Use
testcontainers
-library for local testing withlocalstack
inedison-aws
Breaking Changes:
-
Updated to Spring Boot 2.0.0.M7
- This also requires gradle 4.x for building edison-microservice.
-
upgrade asyncHttpClient version to 2.1.0-RC1
-
Refactored edison-jobs:
- [edison-jobs]: The JobEventPublisher from Edison 1.x is removed now. Messages are attached to JobInfo by
simply
writing a (Logback-) Log message with a
JobMarker
like this:LOG.error(JobMarker.JOB, "Some random error occured");
- [edison-jobs]:
JobRunnable.execute()
is now returning a boolean that is used to indicate, whether the job was executed (true) or skipped (false).
- [edison-jobs]: The JobEventPublisher from Edison 1.x is removed now. Messages are attached to JobInfo by
simply
writing a (Logback-) Log message with a
-
Removed @Beta code:
- [edison-core] Removed prototype code to support dynamic scaling with load detection.
-
Removed @Deprecated stuff:
- [edison-cache] Removed edison-cache because Spring Boot 2.0 does not support this anymore.
- [edison-core] Removed ServiceSpec. Replaced by ServiceDependency.
- [edison-mongo] Default constructor from AbstractMongoRepository is replaced with AbstractMongoRepository(MongoProperties)
- [edison-mongo] Removed property
passwd
from MongoProperties which was replaced withpassword
in order to prevent exposure - [edison-mongo] Removed property
socketTimeout
from MongoProperties. UsedefaultReadTimeout
anddefaultWriteTimeout
instead. - [edison-mongo] Removed property
socketTimeoutForHighTimeoutClient
from MongoProperties, as well as Spring BeansmongoClientWithHighSocketTimeout
andmongoDatabaseWithHighSocketTimeout
. Use custom timeouts on read and write operations instead. - [edison-togglz] LDAP support from edison-togglz is replaced by edison-core
The Spring Boot docs on how to upgrade can be found here:
- Spring Boot 2.0.0-M1 Release Notes
- Spring Boot 2.0.0-M2 Release Notes
- Spring Boot 2.0.0-M3 Release Notes
- Spring Boot 2.0.0-M4 Release Notes
- Spring Boot 2.0.0-M5 Release Notes
- Spring Boot 2.0.0-M6 Release Notes
- Spring Boot 2.0.0-M7 Release Notes
- Spring Boot 2.0.0-RC1 Release Notes
In Spring Boot 1.x, the management.context-path
property is used to configure the path of endpoints relative to the
application's server.context-path
. Beginning with Spring Boot 2.0.0 / Edison 2.0.0, the following configuration must
be changed:
server:
context-path: /my-app
management:
context-path: /internal
will become:
server:
servlet:
context-path: /my-app
management:
endpoints:
web:
base-path: /internal
Edison's ApplicationInfoProperties have been renamed to EdisonApplicationProperties and moved to
de.otto.edison.configuration
.
The property names have changed, too:
Old | New | Default Value |
---|---|---|
edison.status.title | edison.application.title | "Edison µService" |
edison.status.group | edison.application.group | "" |
edison.status.environment | edison.application.environment | "unknown" |
edison.status.description | edison.application.description | "" |
- | edison.application.management.base-path | "/internal" |
Most Edison-Microservices will currently use /internal
for Endpoints, as well as Edison-specific admin pages like
/internal/loggers
or /internal/status
While Edison is currently by default redirecting /internal to /internal/status (see
de.otto.edison.status.controller.InternalController
and the usage of edison.status.redirect-internal.enabled
,
Spring Boot is rendering some kind of "Home Document", obviously in application/hal+json format, for requests to
${management.endpoints.web.base-path} (that is, requests to /internal
). Right now, I can not see how to disable this.
There are two recommended options for Edison Services:
- Disable /internal Redirection and use /internal as a base-path for Spring Boot Actuator endpoints:
Configure edison.status.redirect-internal.enabled=false
: This will disable the redirection of /internal
requests.
Now you can configure Edison and Actuator to use the same base-path, which is the same behaviour as in
Edison 1.x, only that /internal
is not redirecting to /status
anymore.
management.endpoints.web.base-path=/internal
edison.application.management.base-path=/internal
- Separate Spring Boot Actuator Endpoints from Edison:
In order to avoid future hassle with conflicting Actuator endpoints, we should possibly separate endpoints from Edison:
Configure management.endpoints.web.base-path=/actuator
(which is the new default for Spring Boot Actuator endpoints)
and the new edison.application.management.base-path=/internal
. This way, all actuator Endpoints will be available
under different URLs than Edison admin pages.
Because of changes in Spring Boot 2.0.0, the actuator endpoints must now be enabled explicitly.
endpoints:
env:
enabled: true
health:
enabled: true
loggers:
enabled: false
metrics:
enabled: true
trace:
enabled: true
# ...
# ... etc. pp.
# ...
status:
enabled: false
- [edison-mongo] Replace fongo tests with embedded mongo tests, because fongo doesn't work with recent mongo drivers
- [edison-mongo] Updated mongo client library to latest version 3.8.1
- [edison-jobs] Fix Error Status for deactivated jobs
- [edison-validation] Fix deserialization of ErrorHalRepresentation
- [edison-validation] Fix validation helper to use correct message interpolator.
- [edison-validation] InstantValidator accepts null values.
New Features:
- [edison-validation] Add this new module for common validation concerns.
Bug fixes
- [edison-core] Fix server error for empty username/password and allow colons in passwords.
New Features:
- [edison-core] Add property
edison.ldap.encryptionType
which can be configured toStartTLS
(default) orSSL
Maintenance:
- [edison-core] Limit global model attributes to edison packages
- upgrade asyncHttpClient version to 2.2.0 for edison-aws (conflict netty-client with amazon sdk 2.0.0)
Maintenance:
- [edison-core] Don't expose user names at successful login as this is a security issue
New Features:
- [edison-core] Add support for ldaps with SSLLdapConnectionFactory
Breaking Changes:
- [edison-dynamodb] (Beta) Moved to edison-aws repository.
Bugfixes:
- [edison-core] Fix accidential usage of a jdk.nashorn @Immutable annotation, which prevents the usage of edison with Java 9
- [edison-jobs] Timestamps in JobStatus and JobMessage are truncated to milliseconds. This adds compatibility of our current persistence with Java 9, which has a new default clock precision of nanoseconds.
Maintenance:
- [edison-core][edison-jobs] Update of AsyncHttpClient from 1.9.x to 2.0.x.
To not break existing services when upgrading, it was changed to a
compile
dependency instead of acompileOnly
dependency. Important: Please upgrade or remove the AsyncHttpClient dependency in your project. The group name has also changed fromcom.ning
toorg.asynchttpclient
.
Bugfixes:
- [edison-core]
LdapAuthenticationFilter
only throws a warning when authentication against all baseDN's fails.
New Features:
-
[edison-mongo] Instead of using a socket timeout for all reads and writes, you can now use specific timeouts for each operation. Also you can specify a
defaultReadTimeout
and adefaultWriteTimeout
. These will be used for all operations inAbstractMongoRepository
when you do not specify a timeout explicitly.Important: When upgrading to this release, you should remove the
socketTimeout
option in your configs or set it to a very high value. It should be higher than any expected long running query or batch write will take. The new default socket timeout is 0, which means that there is no socket timeout. This is the default in the mongo driver. -
[edison-jobs] When a service is shutting down gracefully, it writes a notification into all currently running job logs.
New Features:
-
[edison-mongo] Add new property:
edison.mongo.sslEnabled
Set this property to true to use ssl for connection. This is needed when using Mongodb Atlas.
Bugfixes:
- [edison-core] Fix user role determination in LDAP authentication filter.
New Features:
-
[edison-dynamodb] (Beta) DynamoDB persistence.
-
[edison-mongo] Add new property:
edison.mongo.authenticationDb
Set this property to use different db for user authentication then for data. This is needed when using Mongodb Atlas. Use "admin" db.
-
[edison-mongo] edison-mongo can create a second mongodb client with different socket timeout now.
This can be useful outside of controllers with small response time limits. One use case is a maintenance job with a query that takes some seconds.
The second client is only created if
edison.mongo.socket-timeout-for-high-timeout-client
is defined in your application properties.You can wire the beans like this in your code:
@Autowired public ExampleRepository(final @Qualifier("mongoDatabaseWithHighSocketTimeout") MongoDatabase mongoDatabaseWithHighSocketTimeout) {...
or
@Autowired public ExampleRepository(final @Qualifier("mongoClientWithHighSocketTimeout") MongoClient mongoClientWithHighSocketTimeout) {...
Side note: The concept of a small socket timeout for the mongodb client to set small query limits is deprecated. We should go for timeouts on DBCursors that result from find operations and for timeouts on WriteConcerns for writing operations. The "second client concept" is more of a workaround for existing services that rely on the current concept of edison-mongo.
Maintenance:
- [edison-core] log ldap auth errors as warning
New Features
-
[edison-core] Allow to configure multiple BaseDN names to bind against LDAP for authentication.
If you use the property file format, you need to add one entry for each BaseDN name. E.g.:
edison.ldap.baseDn[0]=ou=otto,ou=people.. edison.ldap.baseDn[1]=ou=tools,ou=people..
New Features:
- [edison-core] Add thread information to default metrics reporting
Dependency Updates:
- Updated to Spring Boot 1.5.4.RELEASE
- Updated to Spring Framework 4.3.8.RELEASE
Bugfixes:
- Fixed issue #93: SAXParseException when requesting /internal/loggers
New Features:
- Add ServiceDependency for service registry
Bugfixes:
- [edison-core] Fix broken navbar on internal pages when using Thymeleaf 2
Dependency Updates:
- Updated to Spring Boot 1.5.3.RELEASE
- Updated to Spring Framework 4.3.7.RELEASE
- Updated to Mockito Core 2.8.9
Bugfixes:
- [edison-core] Added /internal/js to LDAP allowlist, so the JS can be loaded w/o authentication in case of whilelisted /internal/jobs or /internal/jobdefinitions
- [edison-core] Renamed Spring Bean
authenticationFilter
(seeLdapConfiguration
) toldapAuthenticationFilter
to prevent naming collisions withauthenticationFilter
bean registered byde.otto.hmac.authentication.AuthenticationFilter
fromhmac-auth-server
library.
Deprecations:
- [edison-core] Deprecated the (Beta) ServiceSpecs.
- [edison-togglz] Deprecated the usage of TogglzLdapProperties and TogglzLdapConfiguration. Instead of using this, you should migrate to the LDAP authentication introduced with 1.0.1.RELEASE.
New Features:
- [edison-core] Added a UI to configure the log levels of the service. The UI is added to the right nav bar and is
available under
/internal/loggers
- [edison-core] Introduced the configuration of external dependencies, which is replacing the now deprecated ServiceSpecs. External dependencies include datasources like databases or queues, as well as dependencies to REST or other services.
- [edison-core] Introduced the configuration of information about the criticality of a service.
- [edison-core] Enhanced /internal/status JSON and HTML to return criticality and external dependencies.
- [edison-core] Introduced support to add HTTP request headers to the Slf4j MDC. By default, X-Origin headers are added, so log messages can automatically be enhanced by the value of this header.
- [edison-core] Added support for
git.properties
generated by gradle plugin "com.gorylenko.gradle-git-properties". Added more properties to VersionInfoProperties (for example, user info and commit messages) and added these information to the status page. - [edison-metrics] Added support to filter metrics sent to Graphite.
By default, metrics with names having a postfix of
.m5_rate
,.m15_rate
,.min
,.max
,.mean_rate
,.p50
,.p75
,.p98
or.stddev
are filtered and not reported to graphite. You may configure the filtering by overriding the defaultGraphiteReporterConfiguration.graphiteFilterPredicate
bean definition. - [edison-metrics] Add property
edison.metrics.graphite.addHostToPrefix:true
to switch off the hostname in graphite prefix - [edison-mongo] The new MongoStatusDetailIndicator is autoconfigured and regularly checks the availability of the
MongoDB. The indicator can be disabled by setting the property
edison.mongo.status.enabled=false
. - [edison-jobs] JobEvents can broadcast a log message to all running jobs.
Bugfixes:
- [edison-core] Fix reporting of http request count and time to Graphite
- [edison-mongo] Fixed display of mongo password in /internal/env
New Features:
- [edison-core] Allow LDAP authentication for user-defined paths.
- [edison-mongo] Add @ConditionalOnMissingBean to MongoTogglzRepository
- [edison-mongo] Make ID and ETAG constants public to be able to access them from outside
- [edison-cache] It is now possible to configure
CaffeineCache
instances as Spring beans and use them using@Cacheable
. For example, this way it is possible, to configure loading caches. The newexample-cache
contains a showcase for this. This feature makes the 'old'CacheRegistry
interface obsolete.
Deprecations:
- [edison-cache] The
CacheRegistry
is now deprecated and will be removed in release 2.0.0. - [edison-mongo] Deprecation of
edison.mongo.passwd
. Useedison.mongo.password
instead to sanitize value in environment. The support foredison.mongo.passwd
will be removed in 2.0.0
New Features:
- [edison-jobs] Add the cleanup strategy
DeleteSkippedJobs
to remove skipped jobs first. Configure with propertyedison.jobs.cleanup.number-of-skipped-jobs-to-keep
- [edison-mongo] Extend @ConditionalOnMissingBean for mongoClient & mongoDatabase by name matcher
Maintenance:
- [edison-*] Add gradle task to determine possible dependency updates ( see README.md)
- [edison-*] Gradle test tasks now will generate a coverage report
- [edison-*] Minor dependency updates
Bugfixes:
- [edison-jobs] Catching duplicate key exceptions in
JobMetaRepository.createValue
- [edison-jobs] Fixed
@Value
annotation to configure the Mongo collections inMongoJobsConfiguration
New Features:
- [edison-jobs] Add a button to show the last runs of a job type
New Features:
- [edison-jobs] Introduced possibility to change the collection names used in MongoJob*Repositories using
properties:
edison.jobs.collection.jobinfo
: name of the collection used to store job information. Default value isjobinfo
.edison.jobs.collection.jobmeta
: name of the collection used to store job meta information. Default value isjobmeta
.
Bugfixes:
- [edison-jobs] Fixed: JobDefinitions-Page throws error with RC5
Bugfixes:
- [edison-jobs] Fixed bug in configuration of JobMutexGroups.
- [edison-jobs] Fixed missing
deleteAll()
in JobRepository.
Breaking Changes:
- [edison-jobs] Refactored JobRepository.
New Features:
- [edison-jobs] Introduced JobMetaService and JobMetaRepository to store meta data about jobs.
- [edison-jobs] Introduced MetaJobRunnable to make it easy to implement jobs having metadata like, for example, import jobs that are keeping track of their last read position.
- [edison-jobs] Added the possibility to provide a comment and show it in the UI when disabling jobs.
Bugfixes:
- [edison-core] Fixed version conflict for Thymeleaf; Updated dependencies to Thymeleaf 3.
- [edison-core] Fixed broken links to jobs in status details JSON.
- [edison-jobs] Fix property name numberOfToKeep => numberOfJobsToKeep
- [edison-jobs] Removed MessageEvent.Level and replaced it by de.otto.edison.jobs.domain.Level.
- [edison-jobs] Sleep with retry delay before retry job execution.
New Features:
- [edison-jobs] Added new JobStatus SKIPPED for jobs that have been skipped because there was nothing to do.
JobRunnables can not call
jobEventPublisher.skipped()
to announce skipped jobs. - [edison-jobs] Added buttons to retrigger jobs in the job UI
Breaking Changes:
- [edison-jobs] Refactored JobRepository.
Bugfixes:
- [edison-mongo] Fixed issue Unable to use MongoJobRepository
Bugfixes:
- [edison-core] Fixed issue Status page should always render
vcs.url
- [edison-jobs] Fixed issue add
JobRepository.deleteAll()
New Features:
- [edison-core] Added
@ConfigurationProperties MetricsProperties
- [edison-core] Added
StatusDetail.getLinks()
and rendering hyperlinks on status pages. Job details are now using links; this way you can directly jump from the status page to the job messages. - [edison-*] Added annotations for Java Bean Validation to configuration properties.
- [edison-jobs] Fixed bug that prevented the configuration of
edison.jobs.status.calculator
.
First Release Candidate for Edison 1.0.0.
Beginning with 1.0.0, we will start using semantic versioning of releases.
Because a couple of modules have been removed in this release, you should probably delete your existing project and clone the current version from scratch
Breaking Changes:
- [edison-*] Refactored module structure:
- moved
edison-status
,edison-health
,edison-metrics
,edison-microservice
and?dison-servicediscovery-client
intoedison-core
. - moved
edison-jobs-mongo
intoedison-mongo
- moved
edison-togglz-mongo
intoedison-mongo
- moved
edison-togglz-testsupport
intoedison-testsupport
- moved
- [edison.*] Removed remaining dependencies to guava library.
- [edison.*] Graceful shutdown is now disabled by default. Enable it by
setting
edison.gracefulshutdown.enabled=true
. - [edison-core] Renamed package
de.otto.edison.discovery
tode.otto.edison.registry
. TheDiscoveryClient
was renamed toRegistryClient
. - [edison-core] Properties
edison.servicediscovery.*
renamed toedison.serviceregistry.*
- [edison-togglz] Properties of
edison-togglz
including the togglz console and LDAP has changed. The new structure of the properties is like this:edison.togglz.cache-ttl=100
cache-ttl for feature togglesedison.togglz.console.enabled=true
Enable / Disable Togglz web consoleedison.togglz.console.ldap.enabled=true
Enable LDAP authentication for the web consoleedison.togglz.console.ldap.host=localhost
LDAP hostedison.togglz.console.ldap.port=389
LDAP portedison.togglz.console.ldap.base-dn=test
LDAP base dnedison.togglz.console.ldap.rdn-identifier=test
LDAP rdn identifier
- [edison-guava] Removed the deprecated module
edison-guava
. This is now replaced by edison-cache. - [edison-cache] Removed support for property
edison.cache.web.controller.enabled
. Because the main purpose ofedison-cache
is to provide cache statistics as HTML and/or JSON, it makes no sense to deactivate the controller. - [edison-jobs] Renamed
edison.jobs.*
properties:edison.jobs.web.controller.enabled:true
->edison.jobs.external-trigger:true
edison.jobs.scheduler.thread-count:10
->edison.jobs.thread-count:10
- [edison-jobs] The previous, now unsupported property
edison.jobs.status.indicate-joberror-with-level:ERROR
is replaced by settingedison.jobs.status.calculator.default=errorOnLastJobFailed
.
Bugfixes:
- [edison-jobs] Fixed broken link from job messages to
/jobdefinitions/.
JobDefinitionService.getJobDefition(jobType)
is now case insensitive. - [edison-mongo] Using
primaryPreferred
instead ofprimary
to increase availability during master election.
New Features:
-
[edison-core] Added feature to configure the entries of the navigation bar of /internal/* pages. See
de.otto.edison navigation
for details and have a look at theNavigationConfiguration
in the examples. -
[edison-core] Added support to get status information for service that deployed using green/blue deployments. See
ClusterInfo
,ClusterInfoProperties
andClusterInfoConfiguration
for details. -
[edison-core] Introduced `@ConfigurationProperties and annotation-processor to provide auto-completion in application.property files.
- ApplicationInfoProperties`
TeamInfoProperties
VersionInfoProperties
ClusterInfoProperties
GracefulShutdownProperties
MetricsLoadProperties
ServiceRegistryProperties
MongoProperties
ToggzProperties
JobsProperties
-
[edison-jobs]
JobEvents
not@Beta
anymore. -
[edison-jobs] Refactored
JobStatusDetailIndicator
to use a configurableJobStatusCalculator
to map failed jobs toStatusDetails
.The application property
edison.jobs.status.calculator.default
is used to select one of the following calculator strategies:warningOnLastJobFailed
the default, if nothing is configured. Reports a failed job asStatus.WARNING
errorOnLastJobFailed
Reports a failed job asStatus.ERROR
errorOnLastThreeJobsFailed
Reports a failed job asStatus.WARNING
, orStatus.ERROR
if the last three jobs were failing.errorOnLastTenJobsFailed
Reports a failed job asStatus.WARNING
, orStatus.ERROR
if the last ten jobs were failing.
-
[edison-jobs] The new property-map
edison.jobs.status.calculator:
is used to configure the new JobStatusCalculator strategies (see above) for single job types (->JobDefinition.jobType()
). The job types are case-insensitive, blanks are converted to-
.Example: A job type named
Delta Import
should useerrorOnLastThreeJobsFailed
, while all other jobs should useerrorOnLastJobFailed
:edison.jobs.status.calculator.default = errorOnLastJobFailed
edison.jobs.status.calculator.delta-import = errorOnLastThreeJobsFailed
-
[edison-mongo] Added auto-configuration for
FeatureRepository
andJobRepository
- [edision-mongo] use version of mongo driver to 3.4.1, fongo 2.0.11
- [edison-jobs] add primaryPreferred for jobRepository to avoid data loss while updating a jobState
- [edison-jobs] Show only latest 10 jobs in Job Overview by default
- [edison-mongo] Allow configuration of mongo read preference by setting the property
edison.mongo.readPreference
. The default configuration is primary.
- [edison-service] Make edison-service independent of other edison packages
- This might break your build because you did not write your project dependencies explicitly in your build script. Just add the missing edison packages and everything will be fine.
- [edison-cache] Allow CacheInfoController to be disabled
- [edison-cache] Allow registering custom built caches via
CacheRegistry
to gather cache metrics
- [edison-mongo] Bugfix: AbstractMongoRepository does not accept null as ID of objects anymore.
- [edison.*] Upgrade thymeleaf to version 3.0.2.RELEASE
- [edison-jobs] jobdetails page uses div tags instead of spans
- [edison.*] Upgrade spring boot to 1.4.2.RELEASE
- [edison.*] Upgrade spring version to 4.3.4.RELEASE
- [edison.*] Upgrade guava version to 20.0
- [edison.*] Upgrade caffeine version to 2.3.5
- [edison.*] Upgrade async http client to 1.9.40
- [edison-mongo] Support streaming for findAll methods. The old methods are deprecated now, so please use the new ones.
- [edison-service] Make edison-cache the default caching behaviour
- [edison-jobs] KeepLastJobs is not loading Job messages anymore, avoiding OutOfMemory errors for lots of large jobs.
- [edison-mongo] Make AbstractRepository.byId() and AbstractRepository.matchAll() non final again
- [edison-guava] Make edison-guava deprecated in favor of the new and shiny edison-cache
- [edison-cache] Create edison-cache with support for Caffeine caches instead of Guava
- [edison-jobs], [edison-mongo] Add setJobStatus and setLastUpdate to JobRepository interface and both implementations - This fixes a race condition during keepalive and message. This is a breaking change if you wrote your own JobRepository.
- Removed dependency to edison-hal (was introduced for testing purposes only).
- Removed usage of testng and replaced it by Junit
- [edison-mongo] Refactored AbstractRepository.update() which returns an boolean now.
- [edison-mongo] Breaking change: UpdateIfMatch returns an enum (UpdateIfMatchResult) instead of throwing undocumented exceptions. To migrate, you have to remove the exception handling and evaluate the return code to handle it properly.
- [edison-mongo] Removed NotFoundException from edison-mongo
- [edison-jobs] Log job errors.
- Add some logging information
-
Upgrade Spring Boot to 1.4.0-RELEASE
-
Upgrade Spring to 4.3.2-RELEASE
-
Add spring-boot-starter-test dependency for @SpringBootTest annotation
-
IMPORTANT: Please follow the Migration Guide on https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.4-Release-Notes when upgrading an existing service to this Edison Microservice version
- Upgrade mongodb-driver to 3.3.0
- Upgrade togglz to 2.3.0.Final
- Reduce default shutdown period from 30 to 25 seconds
- do not show distinct jobs if type is given
- optimize createOrUpdate in AbstractMongoRepository by using upsert
- Job Overview shows distinct jobs as default (old behaviour can be activated via distinct=false parameter)
- Add possibility to add slf4j markers to jobevents
- Status page header and title configurable via property
edison.status.application.title
- Add time of start/stop to job status detail
- Add JobEvents class. Use it to avoid handing a JobEventPublisher to helper classes of a Job.
- Indicate job errors with configured mapping in application status (default is ERROR).
The property name is
edison.jobs.status.indicate-joberror-with-level
, possible values areOK
,WARNING
andERROR
- Hide feature toggles menu entry if feature toggles UI is disabled
- Introduced dependency to github.com/otto-de/edison-hal
- Added media type application/hal+json for /internal/status
- indicate job errors as application error instead of warning
- Catch and log RuntimeExceptions that may occur while persisting JobMessages and StateChanges
- Fix circular dependencies in JobConfiguration
- Update to latest Spring Boot version
- Update outdated dependencies
- Fix NullPointerException in disableJobs Feature
- Add possibility to temporarily disable jobs via the jobdefinitions GUI
- Fix ClearDeadLocks Cleanup: Also clear a lock if the JobId does not exist anymore.
- Add
ClearDeadLocks
Cleanup Strategy. - BREAKING CHANGE :
JobRepository
Add methodrunningJobsDocument
. Changed signature ofmarkJobAsRunningIfPossible
- Add parameter distinct=true|false to jobcontroller to get only the latest of each jobs in the overview
- Cronexpressions of JobDefinitions are evaluated on construction of a JobDefinition
- Bugfix: JobLocks are now properly released when Jobs are marked dead.
- Optimization of JobLocking.
- Breaking Change:
JobRepository
interface: add methodsmarkAsRunningIfPossible
andclearRunningMark
. Delete unused methods. - Breaking Change:
StopDeadJobs
constructor now needs aJobService
and aJobRepository
. Those can be obtained by autowiring.
- JobInfo is immutable, this is a breaking change, use the JobInfo.builder() instead
- Modified Mutex Behavior. The new MutexHandler is now able to use a mongoJobLockProvider which persists the mutex-handling in the database. That prevents raceconditions if two jobs of the same type or in the same group should be started at the same time.
- Fixed representation of feature toggles to be consistent with status mediatype.
- Moved html representation of feature toggles from /internal/togglz to /internal/toggles/console
- Moved json representation of feature toggles from /internal/status/togglz to /internal/toggles
- added MetricsFilter to provide counters for http requests
- upgrade spring boot to 1.3.5.RELEASE
- upgrade spring to 4.2.6.RELEASE
- edison-togglz: Fixed a bug in the LDAP authentication filter
- edison-togglz-mongo: Log name of the user switching a toggle also in the mongo state repository
- edison-togglz: added optional LDAP authentication
- Small bugfix: Fix job detail URL in jobs template
- set the /internal/jobs/ in the URL of the Location header
- The JobIds do not contain slashes any more, (/internal/jobs/ is not part of the jobIds)
- Note that jobs which were persisted with older releases might not be accessible any more after the upgrade.
- Also note that some jobs might show up with a red status on your dashboard after the upgrade. Simply rerun the job to fix this.
- togglz: FilterRegistrationBean in TogglzWebConfiguration uses filter name "togglzFilter"
- edison-jobs-(mongo): Moved handling of persisting error status to PersistenceJobEventListener
- Bugfix: Do not aggregate application status in constructor. Use @PostConstruct instead
- New Feature: Mutually exclusion of jobs using JobMutexGroups
- JobDefinition show fixedDelay in seconds if minutes would be zero
- Set job status to error after receiving an error message
- Make mongo codec registry configurable
- Optimized handling of persisting job messages
- add serverSelectionTimeout (default 30secs) to mongo config
- JobStatusDetailIndicator: Indicate error if job could not be retrieved from the repository
- Keep last jobs strategy now keeps the last N jobs of each type
- Create indices in jobs collection
- Return DeleteResult of mongo delete queries
- edison-jobs-mongo: Create index on jobtype and started to sort jobs by date when all job documents are bigger then 32MB
- edison-metrics: Refactored auto configuration of
LoadDetector
to allow strategy selection byapplication.properties
as well as exposing your own bean the same time
- Refactored load indication (see 0.52.0) from edison-status to edison-metrics and introduced new
endpoint
/internal/load
which returns the load status to be used by consumers (ie. auto-scaling drivers). Seeexample-metrics
for an usage example on average response time behaviour.
- Added status indicator allowing the application to signal overload (see
LoadStatusIndicator
), which enables ie. watchers to autoscale the application accordingly - two default strategies to discover load, one making use of metrics library, allowing to leverage
@Timed
annotations on your classes (seeapplication.properties
inexample-status
) - Fixed behaviour of application status aggregation to provide instant calculation instead of waiting until first update has ran
- Updated to Spring Boot 1.3.3 (with Spring 4.2.5)
- edison-guava: Refactored edison-guava. Guava caches can now be configured using GuavaCacheConfig. These caches will now expose cache statistics as /internal/metrics (JSON) and /internal/caches/statistics (HTML). See edison-guava/README.md for more details on how to use Guava caches.
- edison-metrics: Fixed package name (...metrics instead of ...health)
- Housekeeping: Updated Spring Boot to version 1.3.2, MongoDB driver to 3.2.2 and Logback to 1.1.5
- edison-status: Added status to /internal/status.html
- edison-jobs: Bug-Fix in find implementations to limit search result after sorting has happened
- edison-jobs: Added method to find job instances by type and status
- Added InternalController that is redirecting requests from /internal to /internal/status. This can be disabled by setting edison.status.redirect-internal.enabled=false
- Reverted: "removed unnecessary bean from togglz configuration" because embedded containers in Spring Boot don't scan web-fragments
- removed unnecessary bean from togglz configuration
- Extended
JobService
to cover also synchronous job execution
- Fix error on job page for long-running jobs
- Job Lifecycle: set hostname via SystemInfo (to overcome problems on Mesos)
- Added field
hostname
to JobInfo, which allows to track on which server the job gets executed - Updated dependencies: async-http-client (to 1.9.32) and mongodb-driver (to 3.2.1)
- Removed unneeded appId from ServiceSpec and ApplicationInfo
- Fixed path in navigation from /internal to /internal/status
- Using edison.status.application.environment + .group instead of edison.servicediscovery.environment + .group. The properties edison.servicediscovery.environment and edison.servicediscovery.group can be removed from application.properties/.yml
- VCS information are now expected in edison.status.vcs.* instead of info.build.*. Change in build.gradle required
- Added ServiceSpecs to be able to specify dependencies to other services
- Added TeamInfo to the /internal/status
- Added environment, group and appId to /internal/status
- Added convenience methods to
JobEventPublisher
to make logging more fun again - Updated spring-boot to version 1.3.1.
- Update to org.springframework.boot:spring-boot-starter-thymeleaf:1.3.1.RELEASE required
- Fixed bug in navigation: broken path to bootstrap css
- Added some more information to /internal/status
- Fixed the format of the status JSON
- Update to com.github.fakemongo:fongo:2.0.4 required
- Removed StateChangeEvent.State.CREATE, replaced it by START
- Renamed State.STILL_ALIVE to KEEP_ALIVE
- Job HTML templates are now using the Thymeleaf navigation fragments so ?Services have a common menu on all pages.
- Minor refactorings in handling of job events.
- Rebuild job state architecture due to introduce an event bus to separate the JobInfo and the JobRepository. From now on the JobRunner and the specific jobs will report changes (states and messages) to an EventPublisher, which will propagate the events to the JobEventListeners (e.g. persist them or log them). You can register your own JobEventListeners. The JobMonitor is removed.
- If your job has an error, you should throw a RuntimeException with an errorMessage. Then the job will be retriggered ( if retry configured).
- Fixed default JobMonitor to save log messages in JobRepository for every message.
- Minor bugfixes
- Using Guava CacheStats in CacheStatistics
New Features:
- Show the runtime of the job to identify the complete exports with actions.
- Format details in status.json to camel case key names
New Features:
- Broken Jobs are automatically restarted according to the number of retries specified in the
JobDefintion
. JobDefinition
now has a new fieldrestarts
, specifying how often a job is restarted if it failed because of an error.
Breaking Changes:
- Renamed libraries: all libs now have the prefix "edison-".
- The factory methods of the
DefaultJobDefinition
now have an additional parameter for the number of restarts. - Every
JobRunnable
now needs to provide aJobDefinition
- Removed
JobRunnable#getJobType
. The job type is accessed by theJobDefinition
- Renamed to
DefaultJobDefinition#notTriggerableJobDefinition
tomanuallyTriggerableJobDefinition
to clarify purpose - Removed hystrix module
New Features:
- MongoDB persistence: Allow to retrieve the object (including key) when it is created.
Changed signature of
create
andcreateOrUpdate
inAbstractMongoRepository
to return the object instead of void
Bugfixes:
- Allow also a value without key to be given to
AbstractMongoRepository#createOrUpdate
without throwing a NPE application.properties
: renamededison.application.name
(introduced in Release 0.35.0) back intospring.application.name
( see ContextIdApplicationContextInitializer for details on identifying your application)- Added dummy feature toggle implementations (for
FeatureClassProvider
) to example projects, which can now be run on its own again (ie.gradle example-jobs:bootRun
)
- Updated spring-boot to version 1.3.0, hystrix to 1.4.21 and metrics library dependency to 3.1.3
- Update togglz library to 2.2.0
- Cleaned up link construction on internal status and job pages
- Timestamps in JSON status representation are now in ISO-8601 date format (including timezone)
- Fixed possible broken links on /internal pages
- Added servicediscovery-client to edison-microservice
- ServiceDiscovery is only used if edison.servicediscovery.* properties are available
- JobDefinitions extended to support jobs that are not triggered automatically.
- Fixed links on internal pages
New Features:
- New library servicediscovery-client introduced to provide basic ServiceDiscovery features for Edison Microservices. This lib may be used to register services at an Edison JobTrigger.
Bugfixes:
- Fixed possible ConcurrentModificationException if job messages are accessed from JobInfo.
Breaking Changes:
- application.properties is now using server.context-path instead of server.contextPath.
- application.properties is now using edison.application.name instead of application.name.
- Added ID to panel with job messages for identification in JobTrigger
- Added UIs for Status pages
- Nicer internal pages, including reworked jobs and job-definitions
New Features:
- Prepared integration with (upcoming) Edison JobTrigger
- Added Bootstrap UIs for Jobs and /internal
- Added edison-service for typical microservices, including jobs, health, status,
- Using webjars in edison-service to include bootstrap and jquery
Breaking Changes:
- The format of job definitions and jobs has changed.
Bugfixes:
- Fixed critical bug that prevented the startup of the server in combination with usage of edison jobs-mongo
Bugfixes:
- Fixed bugs that prevented the StatusDetails of jobs to be added to status page.
New Features:
- Jobs are rendered with absolute URLs in JSON and HTML representations.
- Introduced the (optional) concept of JobDefinitions to describe the expected frequency etc. to trigger jobs.
- Based on the JobDefinitions, for every Job a StatusDetailIndicator is registered automatically. This may be disabled by either not providing a JobDefinition, or by setting property edison.jobs.status.enabled=false
Breaking Changes:
- Jobs in earlier version where identified by the URI of the job including the servlet context path. Starting with this version, the context path is not part of the identifier anymore. You should DELETE all old jobs, otherwise the URLs a broken.
- Job representations now contain the full URL of the jobs instead of relative URIs.