- JAX-RS Base Server improvements:
- Fixed a bug where
Problem
responses would default toapplication/octet-stream
unexpectedly in some cases, it should now make best effort to conform to an appropriateContent-Type
based on clientsAccept
header and any content negotation the JAX-RS framework has done prior to the problem being generated as a response.- A new
toResponse(HttpHeaders)
overload is added to facilitate this behaviour
- A new
- Fixed a bug where
- Projector improvements:
- Added new
RejectSink
for explicitly rejecting items that don't match a filter condition.
- Added new
- Event Source improvements:
- Added new
EventHeaderSink
for modifying events by adding headers based upon generator functions, including built-in support for generating Telicent standard headers. TelicentHeaders
adds constants for more Telicent standard headers.- Adds missing documentation for the existing and new event sinks
- Added new
- JAX-RS Base Server improvements:
- Added support for serializing
Problem
response as plain text
- Added support for serializing
- Projector improvements:
- Added new
CleanupSink
to help with scenarios where a projection pipeline may require someCloseable
resources that are not encapsulated in the pipeline itself, e.g. they're only used for initial setup/health probes. This new sink allows those to be encapsulated into a pipeline step so that however a pipeline exits it guarantees toclose()
those resources.
- Added new
- Live Reporter improvements:
LiveReporter
now logs a warning if destination sink fails to accept a heartbeat rather than aborting unexpectedly.LiveErrorReporter
now logs a warning if destination sink fails to accept an error report rather than erroring unexpectedly.
- Observability improvements:
RuntimeInfo.printRuntimeInfo()
now includes available processors information.
- CLI improvements:
LiveReporterOptions
now offers saferteardown()
method that handles any unexpected teardown errors such that they don't confuse/hide the actual causes of the application termination. Old teardown methods are marked as@Deprecated
with pointers to use the new method.
- Kafka Event Source improvements:
- Improved
KafkaSink
error handling so any Kafka producer errors are reliably surfaced viaSinkException
's when interacting with the sink
- Improved
- CLI improvements:
AbstractProjectorCommand
more proactively cancels theProjectorDriver
on receiving an interrupt, this mainly affected scenarios where a command was run in the background for integration tests
- Build improvements:
- Apache Kafka upgraded to 3.9.0
- Jackson upgraded to 2.18.1
- Logback upgraded to 1.5.12
- OpenTelemetry SDK upgraded to 1.44.1
- Various build and test plugins upgraded to latest available
- Kafka Event Source improvements:
KafkaTestCluster
abstract class now has agetClientProperties()
method to supply a default set of additional client properties needed to connect to the Kafka cluster type being tested. This simplifies writing unit and integration tests against secure clusters in particular
- CLI improvements:
- Fix several cases where extra Kafka configuration is not passed into ancillary components - Live Reporter and DLQs
debug
CLI commands modified to work with secured Kafka configuration
- Build improvements:
- Apache Jena upgraded to 5.2.0
- Jersey upgraded to 3.1.9
- JWT Servlet Auth upgraded to 0.17.4
- Logback upgraded to 1.5.11
- OpenTelemetry SDK upgraded to 1.43.0
- RDF ABAC upgraded to 0.72.0
- Various build and test dependencies upgraded to latest available
- JAX-RS Base Server improvements:
- Improved error messages when API parameters are defined via
@BeanParam
annotated parameters
- Improved error messages when API parameters are defined via
- Build improvements:
- JWT Servlet Auth upgraded to 0.17.3
- Various build and test dependencies upgraded to latest available
- Build improvements:
- Addressing Trivy OOM errors in pipeline
- Kafka Event Source improvements:
- BREAKING:
KafkaTestCluster
is now an abstract class, useBasicKafkaTestCluster
for the default implementation of the interface - New
MutualTlsKafkaTestCluster
can be used to create a single node mTLS Authenticated Kafka Cluster provided that suitable Key and Trust Stores are generated - New
certs-helper
artifact provides helper scripts to enable generating these in other modules and test environments
- BREAKING:
- CLI improvements:
- Added new
--kafka-login-type
option to select between different SASL mechanisms - Added new
--kafka-property
option to supply custom Kafka configuration properties directly at command line - Added new
--kafka-properties
option to supply Kafka properties file where more complex configuration is necessary, or users don't want to expose sensitive values in the CLI arguments
- Added new
- Build improvements:
- Excluded
protobuf-java
from transitive dependencies due to CVE-2024-7254 and adding explicit dependency on 4.28.2 - Removed
apache-jena-libs
from dependency management in favour of explicit dependencies on specific Jena libraries we use - JWT Servlet Auth upgraded to 0.17.0
- Logback upgraded to 1.5.8
- OpenTelemetry SDK upgraded to 1.42.1
- RDF ABAC upgraded to 0.71.8
- Various build and test dependencies upgraded to latest available
- Excluded
- JAX-RS Base Server improvements:
ServerBuilder
now defaults to listening on0.0.0.0
, i.e. all interfaces, rather thanlocalhost
which reduces inadvertent configuration errors where the server only listens onlocalhost
and isn't accessible in some deployment scenarios e.g. running in a container.ServerBuilder
adds newallInterfaces()
method to make it explicit that you want to listen on all interfaces when building your server.- New
RandomPortProvider
intests
module to make it easier to manage generating a sequence of psuedo-random port numbers to avoid port collisions between tests. AbstractHealthResource
now caches the computedHealthStatus
for 30 seconds to remove the ability for a malicious user to DoS attack a server (and its underlying services where those are probed as part of computing the health status) via its/healthz
endpoint.- BREAKING:
AbstractApplication
MUST now override a newgetHealthResourceClass()
method to supply either a resource class derived fromAbstractHealthResource
ornull
if it does not want to provide a/healthz
endpoint. This change is designed to ensure that all application developers at least consider whether a health resource is needed and to ensure they receive the DoS attack mitigation also included in this release.
- Build improvements:
- Removed unnecessary
logback.xml
from some library modules as these could conflict with application provided logging configurations - Removed Jetty dependency since only a tiny piece of utility code was being used and was replaced by usage of Apache Commons Lang
- Apache Commons Lang upgraded to 3.17.0
- Jersey upgraded to 3.1.8
- JWT Servlet Auth upgraded to 0.16.0
- Logback upgraded to 1.5.7
- OpenTelemetry Agent upgraded to 1.33.6
- OpenTelemetry SDK upgraded to 1.41.0
- OpenTelemetry Semantic Convetions upgraded to 1.27.0-alpha
- SLF4J upgraded to 2.0.16
- Various build and test dependencies upgraded to latest available
- Removed unnecessary
- Build improvements:
- Apache Commons Lang upgraded to 3.15.0
- Apache Jena upgraded to 5.1.0
- Apache Kafka upgraded to 3.8.0
- Jetty upgraded to 12.0.12
- JWT Servlet Auth upgraded to 0.15.3
- OpenTelemetry Agent upgraded to 1.33.5
- OpenTelemetry Semantic Conventions upgraded to 1.26.0-alpha
- RDF ABAC upgraded to 0.71.4
- Various build and test dependencies upgraded to latest available
- CLI improvements:
HealthProbeServer
now runs on a background daemon thread with a more minimal thread pool footprint to improve health probe responsiveness and reduce resource consumptionHealthProbeServer
now listens on0.0.0.0
so is more reliably usable in containerised environments
- General improvements:
- Several background threads that may be run by various APIs now explicitly set the thread name where possible to make it easier to debug applications using these features.
- CLI improvements:
- New
cli-probe-server
module provides an embeddableHealthProbeServer
that allows adding a minimalist HTTP server into CLI apps to provide suitable endpoints for Liveness and Readiness checks. - New
HealthProbeServerOptions
class incli-core
for adding this capability into your commands - BREAKING
AbstractProjectorCommand
now automatically includesHealthProbeServerOptions
and sets up the server, derived classes need to implement a newSupplier<HealthStatus> getHealthProbeSupplier()
method to supply a function that computes their applications readiness status.
- New
- JAX-RS Base Server Improvements:
HealthStatus
now provides a builder API
- Build Improvements:
- Debug tools image now runs as
telicent-service
user instead ofroot
- Jackson upgraded to 2.17.2
- Jetty upgraded to 12.0.11
- JWT Servlet Auth upgraded to 0.15.1
- Apache Kafka upgraded to 3.7.1
- Lombok upgraded to 1.18.34
- OpenTelemetry upgraded to 1.40.0
- Servlet API upgraded to 6.1.0
- Various build plugins upgraded to latest available
- Debug tools image now runs as
- Build Improvements:
- Nexus Staging plugin is now defined in a profile
telicent-oss
allowing it to be disabled for projects using this as a parent which don't wish to deploy via Sonatype OSS repositories
- Nexus Staging plugin is now defined in a profile
- JAX-RS Base Server Improvements:
FallbackExceptionMapper
explicitly logs the stack trace for otherwise unhandled exceptions to aid in diagnosis of the underlying issues
- Build Improvements:
- Upgraded various plugins to latest available
- Build improvements:
- Reverted target JDK to 17 to increase portability
- Upgraded JWT Servlet Auth to 0.15.0
- First public release to Maven Central
- Build improvements:
- Added Maven GPG Plugin and Sonatype Nexus Plugin to facilitate release to Maven Central
- Build improvements:
- Add some missing metadata towards meeting Maven Central release requirements
- Jersey upgraded to 3.1.7
- Jetty upgraded to 12.0.10
- JWT Servlet Auth upgraded to 0.14.0
- OpenTelemetry Agent upgraded to 1.33.3
- OpenTelemetry upgraded to 1.39.0
- RDF ABAC upgraded to 0.71.2
- Various build plugins upgraded to latest available
- Bug Fixes:
- Fixed a bug with how
PropertiesSource
resolves configuration values in some cases that could cause configuration to not be picked up correctly
- Fixed a bug with how
- Build improvements:
- Target JDK is now 21
- JWT Servlet Auth upgraded to 0.12.0
- New
jwt-auth-common
module abstracts some constants and common configuration functionality out ofjaxrs-base-server
module to make it easier to reuse this in services that aren't using our JAX-RS base server.- BREAKING
AuthConstants
class moved to a new package in thejwt-auth-common
module to avoid package overlap between this and thejaxrs-base-server
module
- BREAKING
- Build improvements:
- Jetty upgraded to 12.0.8
- JWT Servlet Auth upgraded to 0.11.1
- OpenTelemetry upgraded to 1.38.0
- Various test dependencies upgraded to latest available
- Build improvements:
- Fix wrong dependency scope on some dependencies in the configurator module
- JAX-RS Base Server improvements:
JwtAuthInitializer
refactored to utilise automated configuration support injwt-servlet-auth
libraries- JWT Authentication now supports additional configuration:
- Default configuration amended to support common deployments better
- Header Names and Prefixes used to detect and extract tokens may now be configured
- Username claims may now be configured
- New
MockKeyServer
in thetests
module for creating a key server that can mock JWKS and AWS ELB key lookup and provide private keys for signing tokens in tests - Removed
development
mode authentication and authorization as it was fundamentally insecure and could lead to a false sense of security.
- Build improvements:
- JWT Servlet Auth upgraded to 0.10.0
- Logback upgraded to 1.5.6
- OpenTelemetry upgraded to 1.33.2
- RDF-ABAC upgraded to 0.71.0
- Various plugins and test dependencies upgraded to latest available
- Logging improvements:
- Standardised logging configuration for CLI tools
- Reduced test logging to minimalise unnecessary build output
- Added optional
logback-debug.xml
configuration file for use during tests via-Dlogback.configurationFile=logback-debug.xml
- Build improvements:
- Various plugins and test dependencies upgraded to latest available
- Event Source improvements:
- Malformed
RdfPayload
's can also be written back to a Kafka topic as-is allowing them to be pushed to a DLQ for further analysis.
- Malformed
- CLI improvements:
- BREAKING Type signature for
AbstractProjectorCommand.prepareDeadLetterSink()
changed to better reflect intended API usage and permit for creating multiple sinks for different points in the pipeline where desired.
- BREAKING Type signature for
- Build improvements:
- Various dependencies upgraded:
- Logback upgraded to 1.5.5
- OpenTelemetry upgraded to 1.37.0
- SLF4J upgraded to 2.0.13
- Various plugins and test dependencies upgraded to latest available
- Various dependencies upgraded:
- Event Source improvements:
RdfPayload
's are now lazily deserialized to avoid Kafka Head-of-Line blocking.
- Internal improvements:
- Micro-optimisation of some internal logic to use more optimal code paths
- CLI improvements:
- Some debugging scripts renamed to have explicit
.sh
extensions
- Some debugging scripts renamed to have explicit
- JAX-RS Base Server improvements:
ServerBuilder
now exposes some ability to provide configuration around HTTP Header limits (quanity and size)
- Build improvements:
- Various dependencies upgraded:
- Apache Jena upgraded to 5.0.0
- Jackson upgraded to 2.17.0
- Jersey upgraded to 3.1.6
- Jetty upgraded to 12.0.8
- Kafka upgraded to 3.7.0
- Logback upgraded to 1.5.3
- OpenTelemetry upgraded to 1.36.0
- Various plugins upgraded to latest available
- Various test dependencies upgraded to latest available
- Various dependencies upgraded:
- Build improvements:
- Various dependencies upgraded:
- Apache Jena upgraded to 5.0.0-RC1
- Jetty upgraded to 12.0.6
- JWT Servlet Auth upgraded to 0.8.0
- OpenTelemetry upgraded to 1.35.0
- RDF ABAC upgraded to 0.70.0
- SLF4J upgraded to 2.0.12
- Various test dependencies upgraded to latest available
- Various dependencies upgraded:
- Minor non-breaking additional factory methods on metric events.
- Build improvements:
- Various dependencies upgraded:
- Jackson upgraded to 2.16.1
- Jersey upgraded to 3.1.5
- Jetty upgraded to 12.0.5
- JWT Servlet Auth upgraded to 0.7.0
- OpenTelemetry upgraded to 1.34.0
- resilience4j upgraded to 2.2.0
- SLF4J upgraded to 2.0.10
- Various test dependencies upgraded to latest available
- Various build plugins upgraded to latest available
- Various dependencies upgraded:
- Build improvements:
- Reverted maven-source-plugin due to a bug when doing a mvn release:perform
NOTE Due to a Maven plugin issue that causes mvn release:perform to fail 0.13.1 is not published as a release
- Build improvements:
- Various dependencies upgraded:
- resilience4j upgraded to 2.1.0
- OpenTelemetry upgraded to 1.33.0
- Airline upgraded to 3.0.0
- Various test dependencies upgraded to latest available
- Various build plugins upgraded to latest available
- Various dependencies upgraded:
- Build improvements:
- Various dependencies upgraded:
- Apache Commons Lang upgraded to 3.14.0
- Jackson upgraded to 2.16.0
- Jersey upgraded to 3.1.4
- Jetty upgraded to 12.0.4
- Servlet API upgraded to 6.0.0
- RDF ABAC upgraded to 0.50.0
- Kafka upgraded to 3.6.1
- Logback Classic upgraded to 1.4.14
- OpenTelemetry upgraded to 1.32.0
- Various build plugins upgraded to latest available
- Added Cyclone-DX Plugin for generating Bill of Materials (BOM) for each module
- Various dependencies upgraded:
- Event Source improvements:
- Reverted
AbstractKafkaEventSourceBuilder.topic()
method to be consistent with pre 0.12.4 behaviour of setting a singular topic for the source
- Reverted
- CLI improvements:
- Added new
-dlq
/--dlq-topic
option for configuring a Dead Letter Topic for suitably enabled Kafka processing commands
- Added new
- JAX-RS Base Server improvements:
- Added new
MockAttributesServer
into thetests
artifact for simpler testing of server applications that require an external authorisation source
- Added new
- JAX-RS Base Server improvements:
- Adds a new default filter into
AbstractApplication
declared classes so that any request failure (status >= 400) is explicitly logged with the failure reason (if available)
- Adds a new default filter into
- Add CLI configuration parameters for DLQ topic, and provide a default implementation sink for indexing errors, when configured.
- Event Source Improvements:
- New
OffsetStore
API for external offset storage KafkaEventSource
's can now be configured with an externalOffsetStore
for use as offset storage in addition to the existing usage of Kafka consumer groups- A
KafkaEventSource
can now read from multiple topics
- New
- Build Improvements:
- Various dependencies updated to latest releases as appropriate
- Observability
- Add events model to allow components' behaviour to be observed.
- Add metrics model so components' processing can be observed as metrics.
- Create
OpenTelemetryMetricsAdapter
to bridge our observable metrics to Open Telemetry.
- Add dead letter queue message header,
TelicentHeaders.DEAD_LETTER_REASON
- JAX-RS Base Server improvements:
- Fix a bug where
ServerBuilder.contextPath()
could not be called with a plain/
as the context path even though that is the default value indicating the root context. - Added a new
ServerBuilder.rootContextPath()
method to explicitly configure/
as the desired context path.
- Fix a bug where
- Build Improvements:
- When
-DskipTests
is used on a build code coverage enforcement is now also skipped
- When
- General Improvements:
- Builder APIs that provide base classes now use self-referential type parameters to make their APIs more fluent and remove compiler constraints on calling the derived and base methods in any particular order.
Sink
is now a Java@FunctionalInterface
and has a default no-opclose()
implementation allowing simple sinks to be defined using lambdas.- Various dependencies upgraded to latest versions as appropriate.
- Event Source Improvements:
- New
consumerConfig()
andproducerConfig()
methods on relevant builders to allow injecting arbitrary Kafka configuration properties. - New
plainLogin()
methods on relevant builders to allow providing credentials for Kafka clusters that enable authentication via Plaintext SASL. - New
SecureKafkaTestCluster
test harness for writing unit and integration tests against Kafka with Plaintext SASL login enabled. KafkaEvent
now exposes agetConsumerRecord()
which provides access to the underlying KafkaConsumerRecord
instance where necessary.
- New
- CLI Improvements:
SmartCacheCommand
now provides--verbose
,--trace
and--quiet
options that can reconfigure the root logging level at runtime. These are automatically provided to and honoured by any command that uses theSmartCacheCommand
API to run itself. Since only the root logger level is changed any application logging configuration that explicitly sets the level for another logger remains honoured.SmartCacheCommand
processing will now dump runtime environment information (Memory, Java Version and OS) during command startup unless disabled via new--no-runtime-info
option.- Added
--kafka-username
and--kafka-password
options for supplying Kafka credentials for use with Plaintext SASL authentication. - BREAKING Deprecated
Defaults
class in favour of newConfigurator
API
- JAX-RS Base Server improvements:
- Added
Accept
,Content-Disposition
andContent-Type
intoAccess-Control-Allowed-Headers
response to CORS requests. WhileAccept
andContent-Type
were implicitly permitted due to the CORS safe-list not all values for those headers were permitted which prevented some APIs being called from a browser. - BREAKING Deprecated
CorsResponseFilter
in favour ofCrossOriginFilter
(from Jetty) - Added new
CorsConfigurationBuilder
for configuring CORS as desired.ServerBuilder
gains newwithCors()
andwithoutCors()
methods for passing in/manipulating this configuration as needed. - Default automatic server initialisation now includes printing runtime environment information (Memory, Java Version and OS).
- Added
- Debugging Improvements:
- Packaged the
debug
CLI into a Docker image and provides some wrapper scripts for invoking common debug functionality needed by developers.
- Packaged the
- New
configurator
module- Provides a minimalist lightweight abstraction for obtaining configuration values
- Makes it much easier for developers to write unit and integration tests that require specific configurations
- Fix
KafkaEventSource
shutdown interruption being overly aggressive preventing actual graceful shutdown - JaCoCo Code Coverage plugin configuration in parent
pom.xml
setsappend
to true so modules that run their tests via multiple independent Maven SureFire/FailSafe invocations have all their coverage collected and reported
- Event Source improvements:
KafkaEventSource
:- Now handles a background thread calling
processed()
correctly by delaying offset commits until the thread that owns the underlyingKafkaConsumer
next accesses it. - Logging has been toned down to be less noisy at default log level (
INFO
) and some warnings are now issued less frequently - Topic existence checking used to avoid flooding the logs with Unknown Topic or Partition errors
- Blocking
poll()
calls should be promptly interrupted when an application is shutting down
- Now handles a background thread calling
- Projector Driver changes:
- BREAKING: Removed
pollWarnThreshold()
and associated logging fromProjectorDriver
and its builder since this logging has proved to be unnecessary noise. - Toned down various aspects of the logging and made some statements be issued less frequently
- BREAKING: Removed
- CLI Improvements:
- If a projector command dies with an unexpected
Throwable
we now print the stack trace to standard error
- If a projector command dies with an unexpected
- New
live-reporter
module- Provides a
LiveReporter
for reporting application status heartbeats for use by our Telicent Live monitoring application. - Provides a
LiveErrorReporter
for reporting application errors for use by our Telicent Live monitoring application.
- Provides a
- Event Source changes:
- BREAKING:
event-source-file
module has refactored the internal implementation ofYamlEventSource
to reuse the Kafka serializers and deserializers to remove special case code. This involved some breaking changes to the internal APIs and implementations that are reflected elsewhere in these libraries.- Added a new
SingleFileEventSource
for special case of just ingesting a single file - Added a new
RdfFileEventSource
for ingesting plain RDF files (onlyContent-Type
header derived from file format and no key support) - Added new
FileEventFormatProvider
interface driven by JVMServiceLoader
withFileEventFormats
registry
- Added a new
- BREAKING:
- Projector Driver changes:
- BREAKING:
ProjectorDriver
no longer has a public constructor and must now be built using a Builder pattern viaProjectorDriver.create()
- BREAKING: Moved all driver related classes into
driver
package to avoid split package between this module andprojectors-core
- BREAKING:
- CLI improvements:
- Added new
--live-reporter
/--no-live-reporter
option to relevant commands for enabling/disabling the new Live Reporter feature. - Added
--live-reporter-topic
and--live-reporter-interval
options for configuring the Kafka topic to which status heartbeats are sent and how frequently they are sent. - Added
--live-bootstrap-servers
option for configuring the Kafka bootstrap topic for commands that wouldn't normally involve a Kafka connection. - Improved the restrictions related to configuring the event source, this should make it easier to use file event sources for testing when desired.
- Added new
--source-file
option for providing a single file as an event source - Improved
--source-format
and--capture-format
options to more actively reflect supported event file formats
- Added new
- Base Server improvements:
- Added new
RequestIdFilter
to the base application specification. This adds aRequest-ID
header to all HTTP requests and places it into the LoggingMDC
so logging configuration can include it in their patterns. CorsResponseFilter
now permits additional headers in pre-flight requests and responses.- When running in blocking mode on a background thread ensures that the server is stopped when that background thread is cancelled/interrupted
- Added new
- BREAKING:
entity-collector
andies-configuration
modules removed:- These module have been migrated into the Smart Cache Search repository
- Dependencies
- Various dependencies upgraded to latest minor/patch versions as appropriate
- Upgrade to jwt-servlet-auth 0.4.0
- JAX-RS Base Server improvements:
JwtAuthEngineWithProblemChallenges
now supports configuring multiple possible authentication header sourcesJwtAuthInitializer
now defaults to supporting bothAuthorization
andX-Amzn-OIDC-Data
headers even when AWS token verification is not configured. AWS mode continues to only supportX-Amzn-OIDC-Data
header.
- NB Due to incorrect merge of 0.11.0-SNAPSHOT features into branch this release was removed
- Upgrade to rdf-abac 0.8.0
- Entity Collector changes:
- Added new
PrimaryImageConverter
- Added new
- Entity Collector changes:
MetadataConverter
can now exclude the usage ofGeneratedAtConverter
which can lead to making every generated document unique leading to unnecessary document processing
- Entity Collector changes:
Ies4DocumentProviderV1
andIes4DocumentProviderV2
documentation updated to reflect some practical experience of their usage.
- Dependencies
- Bump various dependencies and Maven plugins to latest available releases
- Event Source improvements:
- Added new
RdfPayload
container type that can hold either an additive RDF Dataset or a mutative RDF Patch - Corresponding Kafka serializer/deserializer support for the new type
- New
KafkaRdfPayloadSource
and corresponding builder
- Added new
- Entity Collector improvements:
EntityCentricProjector
now operates over events withRdfPayload
valueEntityToMapSink
now preserves the inputEntity
value as the key of the output event- New
EntityDocumentFormatProvider
interface for providingServiceLoader
driven selection of desired output document format expressed as a set ofEntityMapOutputConverter
instances - New
EntityToMapOutputConverter
implementations for adding metadata to generated documents
- CLI improvements:
AbstractKafkaRdfProjectionCommand
now defined in terms ofRdfPayload
instead ofDatasetGraph
SmartCacheCommandTester
now captures standard output and error for each test to files, or optionally tee's them directly to actual standard output and error to aid in debugging failing tests
- Removed Prometheus Metrics in favour of Open Telemetry, added a new
observability-core
module to provide some helper utilities around this - Added a new
/version-info
endpoint to thejaxrs-base-server
entity-collector
improvements:- Added
hasAnyLiterals()
method toEntity
class - Added new
EntityToMapOutputConverter
implementations that produce more upsert friendly document structures
- Added
- CLI improvements:
cli-core
tests classifier artifact now provides a framework for writing unit test cases around CLI commands viaSmartCacheCommandTester
- Projector commands now have a configurable
--poll-timeout
option available to configure how long to wait on eachpoll()
call to the underlyingEventSource
event-source-kafka
improvements:- Added a
KafkaSink
for writingEvent
instances back to Kafka - Added a
KafkaTestCluster
into the tests classifier artifact that provides a simple test Kafka cluster via Test Containers - Fixed a bug where offsets were not correctly committed on
close()
if aKafkaEventSource
was in auto-commit mode and the source was closed precisely when its internal events buffer was empty
- Added a
- Fix bug with automatic configuration of Hierarchy Lookup URL by
UserAttributesInitializer
- Fix bug with default labels not being fully realised in entity to document conversions which can potentially result in
subsequent overwriting of default labels
- Also ensures
PrimaryNameConverter
includes fine-grained security labels in its output
- Also ensures
- Add new
PrimaryNameConverter
for outputting top levelprimaryName
field in entity to document pipelines
- The
AbstractHealthResource
injaxrs-base-server
module now protects against bad derived implementations that fail to generate a suitableHealthStatus
object generating an appropriate 503 Service Unavailable when this is the case - Upgrade rdf-abac dependency to 0.6.0
- Upgrade rdf-abac dependency to 0.5.0
- Added support for plaintext event capture format
- Fix
--capture-format
option not generating the correct file extension on event files when usingYAML_GZ
as the format
- Simplified some APIs around event capture
FileEventReader
andFileEventWriter
merged into a single interface- Added a
GZipEventReaderWriter
as a decorator that compresses and decompresses events with GZip - New
CapturingEventSource
as a decorator around anotherEventSource
to more cleanly introduce the event capture sink
- Add Fluent
SinkBuilder
API to make defining pipelines easier - In
jaxrs-base-server
theHealthStatus
andProblem
model classes are now fully deserializable EventSource
now has aprocessed()
method that can be called to indicate when events have actually been processed allowing implementations to delay relevant state storage e.g. committing Kafka offsets- New
EventProcessedSink
as a terminal sink that calls this
- New
Event
can now optionally provide a reference back to itsEventSource
- Fixed some corner case bugs with
KafkaEventSource
andKafkaReadPolicy
implementations:- If re-assigned the same partition multiple times during application lifetime don't seek multiple times
- Ensure underlying
KafkaConsumer
is explicitly closed when the event source is closed
- Added a
FileEventSource
that supports replaying events from files on disk- Added an
EventCapturingSink
for capturing events for later replay - Added a
--source-directory
and--capture-directory
option to abstract commands incli-core
that enables this as an event source and/or a capture target
- Added an
- Bug fix around handling of namespace prefixes in relation to security labels graph processing
- Ensure default security labels are stored with each portion of the document so if defaults change in future events the previously applied labels are not overridden
- Entity Collector Changes
EntityData
now stores values asSecurityLabelledNodes
that allow attaching a security label to each node- Various
EntityToMapOutputConverter
instances are now able to include security labels in their output
ServerBuilder
can now optionally exclude some paths from authentication e.g./healthz
- Fixed JAX-RS Base Server not supporting encoded slashes in URIs which is needed as often our IDs are URIs which we percent encode for use in an API call and this bug was preventing that from working
- Added a new
jaxrs-base-server
module for rapidly spinning up new JAX-RS Server applications- Provides a
ServiceLoadedServletContextInitialiser
which means only a singleServletContextListener
need be registered in an application to pull in all the common configuration listeners- Includes listeners for setting up JWT Authentication and User Attribute Authorization
- Provides
Problem
and a selection of baseExceptionMapper
's for consistently reporting errors as RFC 7807 Problem data structures - Provides base classes for easily creating JAX-RS server instances for testing and runtime deployment
- Provides a
- Improved Kafka lag instrumentation and reporting
EventSource
can now report its remaining events (if known and/or calculable)KafakEventSource
and its subclasses will now regularly report current read positions for all assigned partitions at a configurable interval (default 1 minute)ProjectorDriver
checks and reports remaining events when encountering a stall (no events received after blocking)- New
PeriodicAction
class to avoid flooding the logs with low lag warnings when an application is caught up
- Added Prometheus metrics support to relevant APIs
ThroughputTracker
now reports items received, processed and processing rateKafkaEventSource
(and derived types) report poll timings, fetch sizes (in number of events) and current lagcli-core
module now includesPrometheusOptions
onSmartCacheCommand
that allows any CLI to opt into exposing Prometheus metricsjaxrs-base-server
module has opt-in support for collecting HTTP request metrics and exporting Prometheus metrics from the server
- Fluent API Improvements
ThroughputTracker
's are now defined via a fluent builder interfaceKafkaEventSource
(and derived types) are now defined via a fluent builder interface
- Entity Collector Improvements
- All
EntityToMapOutputConverter
implementations omit their output field if they generate no output for a given entity. IesTypeSelector
handles some special cases that come up when working with IES knowledge
- All
- Introduced an
Event
interface that is now returned from anEventSource
- This provides access to event headers as well as both the key and value
EventSource
must now take both a key and value type parameter- Various other types have additional type parameters in order to satisfy this new contract
- Added
EventKeySink
andEventValueSink
for transforming from an event to just its key/value
- Added new
KafkaDatasetGraphSource
and associatedDatasetGraphDeserializer
- Deprecated the existing
KafkaGraphSource
- Deprecated the existing
- Entity Collection APIs refactored to operate over
Event
instancesEntity
may now have a security labels associated with itEntityCentricProjector
now operates overEvent<TKey, DatasetGraph>
and projectsEvent<TKey, Entity>
EntityToMapSink
now operates overEvent<TKey, Entity>
and outputsEvent<TKey, Map<String, Object>>
SecurityLabelsConverter
for outputting security labels
EntitySelector.select()
now takes in security labels as well as the graph to select entities from
- Renamed
EventSource.availableInFuture()
toEventSource.isExhausted()
and clarified associated documentation and usage examples
- Improved type safety of some
Sink
implementations by providing explicit generic type parameters
- Search API moved out of this repository
- Initial documentation provided
- Split out into separate repository
- Removed ElasticSearch implementation from this repository
- Initial API definitions for common Smart Cache functionality
- Event Sources
- Projectors and Sinks
- Entity Collection
- Search index management, indexing and search
- Configurability for all the above
- ElasticSearch Indexing pipeline built upon these APIs