Skip to main content

· 2 min read

ActiveJ v5.5 was released on Jun 15, 2023 (see on Maven). This release introduces bug fixes, as well as some performance improvements.

  • General
    • Updated dependency versions.
    • Changed logging levels in some components to be more appropriate.
    • Added method for parsing InetSocketAddress that tries to resolve the address.
    • Made Checks enabled by default if Java's assertions are enabled.
  • ByteBuf
    • Fixed UTF-8 encoding in ByteBufStrings.
  • Eventloop
    • Improved performance of scheduled tasks. Minimized garbage collection required for task scheduling.
  • Inject
    • Added the ability to create bindings out of Java's constructors.
    • Simplified wildcard types in KeyPattern.
  • RPC
    • Improved RpcClient start/stop routine.
    • Added launcher for multithreaded RPC server.
    • Added RpcClient#withForcedShutdown method to allow shutting down the RpcClient even if there are active connections.
  • HTTP
    • Fixed inspector notification about malformed data exceptions.
    • Improved shutdown routine of HttpClient.
    • Added the ability to forcefully shutdown HttpClient.
    • Made response code of HttpResponse mutable.
    • Fixed multipart/form-data request parsing by considering the last CRLF optional, as per RFC.
  • Datastream
    • Fixed ChannelSerializer behavior on exception occurances.
    • Added StreamLimiter class that limits number of items that pass via datastream pipeline.
    • Added StreamSkip class that omits N first items that pass via datastream pipeline.
    • Fixed stats aggregation in StreamStatsForwarder.
  • Codegen
    • Fixed method invocations on interfaces.
    • Improved class caching in RecordScheme.
    • Compared fields in RecordScheme are now transfered to the projection.
  • Serializer
    • Restricted non-static inner classes to be used for serialization.
    • Fixed closing routine in StreamInput.
    • Removed caching from StreamCodecs.
    • Added StreamCodecs#reference method that introduces an effective way to serialize/deserialize duplicate item instances.
  • Specializer
    • Refactored ActiveJ Specializer to perform well on conditional code.
  • JMX
    • Added JMX reducers (Average, Any).
    • Added built-in support for JMX attributes/operations of Enum type.
    • Added built-in support for JMX attributes/operations of InetSocketAddress type.

· One min read

ActiveJ v5.4.3 was released on Sep 16, 2022 (see on Maven). This release introduces a simplified approach for creating serializers for custom classes.

  • Added an abstract SimpleSerializerDef class that simplifies the creation of custom serializers. Serializers for custom classes can now be created without the use of the Expressions API

· One min read

ActiveJ v5.4.2 was released on Sep 5, 2022 (see on Maven). This release includes minor bug fixes for stream codecs.

  • Fixed a bug when a stream codec tried to safely decode more items than are present in the input of the stream.
  • Relative path tests in ActiveJ FS are ignored when the project directory is located on a drive other than the temporary directory.

· One min read

ActiveJ v5.4.1 was released on Aug 31, 2022 (see on Maven). This release includes optimizations for Stream Codecs to optimize memory usage.

  • Optimized encoding and decoding of arrays of primitives, as well as arrays of variable-length ints and longs.
  • Minimized the required number of flushes when writing data to a byte array.

· One min read

ActiveJ v5.4 was released on Aug 19, 2022 (see on Maven). This release includes improvements to ActiveJ Codegen,ActiveJ Serializer, and minor fixes to other components.

  • ActiveJ Codegen
    • Generated method calls that use self instances as method arguments are now automatically resolved.
    • Slightly optimized method lookup.
  • ActiveJ Serializer
    • Optimized serializer builder's cache. Ensured that previously defined serializers are reused.
    • Ensured that dangling references are cleaned up if serialization fails.
  • Net
    • Fix order of promise completion when SSL socket receives close_notify message.
  • HTTP
    • Multimap of HTTP headers is now properly resized.
    • Fatal errors in HTTP server connections are now handled correctly.
    • Added the HttpMessage#takeBodyStream method instead of the HttpMessage#getBodyStream method as it has a more semantically correct name. HttpMessage#getBodyStream method is now deprecated and is a candidate for removal in the next major release.
  • Misc
    • Added additional application error logging in Launcher.
    • Fixed @NotNull annotations for function parameters.

· One min read

ActiveJ v5.3 was released Jun 17, 2022 (see on Maven). This release includes minor improvements to JMX, as well as several bug fixes.

  • JMX
    • Added the ability to use custom JmxReducers for @JmxOperations.
    • JMX attributes and operations of Map type now respect the specified JmxReducer when reducing map values.
    • Added the ability to specify a predicate for whether worker instances should be registered in JMX or not.
  • ActiveJ Codegen
    • Ability to use parameterized types for record fields has been added.
  • HTTP
    • Fixed a bug with quality factors parsing in headers.
    • Improved handling of runtime exceptions.
  • Datastream
    • Fixed acknowledgement completion in StreamReducer as well as in several StreamConsumers

· One min read

ActiveJ v5.2 was released Apr 19, 2022 (see on Maven). This release includes minor improvements mainly for HTTP client/server and ActiveJ Serializer.

  • HTTP
    • Added dedicated enum for setting SameSite policy on cookies.
    • Malformed HTTP requests now result in a code 400 response rather than connection drop.
    • HTTP inspectors can now inspect malformed HTTP requests and responses.
    • RoutingServlet now correctly decodes percent-encoded URL path parts.
    • Added checks for DNS label sizes.
    • Minor improvements of the UrlParser.
  • ActiveJ Serializer
    • Added additional preconditions for subclass serializer.
    • Removed unnecessary caching from SerializerBuilder.
  • ActiveJ FS
    • Storage paths are now normalized, so local file systems now work properly with relative storage paths.

· One min read

ActiveJ v5.1 was released Jan 4, 2022 (see on Maven). This release includes improvements to ActiveJ FS, ActiveJ Inject and boot modules in general.

  • ActiveJ Inject and boot modules
    • TriggersModule now properly handles optional dependencies
    • Nested optional dependencies (e.g. OptionalDependency<OptionalDependency<?>>) are prohibited
    • Services (as well as those obtained from an optional dependencies) are guaranteed to start/stop exactly once
    • Added shortcuts for obtaining optional dependencies from Injector
  • ActiveJ FS
    • Added a new exception to indicate errors in a structure of a file system.
    • Added a precondition that checks whether local file systems (LocalActiveFs and LocalBlockingFs) were started before being used.

· 2 min read

ActiveJ v5.0 was released Oct 29, 2021 (see on Maven). This release includes major changes in ActiveJ Inject, ActiveJ Codegen, ActiveJ Serializer promises API. The release also introduced improved type scanning facility and overall minor improvements in other components.

  • ActiveJ Inject
    • Refactored and simplified inner components to speed up dependency injection and provide better support for binding specialization
    • Simplified type resolution in dependency injection
    • Added the ability to transform imported and exported bindings using patterns (see example)
    • Replaced @Optional annotation with an explicit OptionalDependency class
  • ActiveJ Codegen
    • Improved ClassBuilder and DefiningClassLoader classes
    • Class generation may now be 100% lazy
    • Added in-memory ClassBuilder caches
    • Added the ability to use BytecodeStorage as a persistent cache for generated bytecode
    • Added the ability to call super methods as well as protected methods
    • Improved built-in expressions for array/collection/map iteration
  • ActiveJ Serializer
    • Added the ability to specify serializer annotations directly on type use (see example)
    • Automatic class member ordering is now supported within the same JVM
    • Added support for serializer annotation aliases
    • Improved array serialization as well as serialization of booleans
    • Refactored class hierarchy of collection serializers.
    • Abstract collection serializers now support builder pattern
  • Promise
    • Greatly improved exception handling
    • Renamed promise chaining methods thenEx and mapEx to then and map
    • Added new conditional chaining methods as well as dedicated null-handling chaining methods
    • All the changing methods now take "throwing" functions. If a checked exception is thrown in a chaining function, the whole promise is completed exceptionally
  • Miscellaneous improvements
    • Removed codec module. Components that require JSON marshalling now internally use the DSL-JSON library
    • Added new types module which contains various reflection and type utilities, including advanced type scanner
    • Common module has been massively refactored to make common functions and components more consistent
    • Restructured asynchronous exceptions
    • Unchecked exception handling can now be precisely configured using a thread-scoped or global FatalErrorHandler facility
    • Made ActiveJ compatible with Java 17
    • Added various DiscoveryService interfaces for node discovery within server cluster (RPC, FS)
    • Removed AsyncServletDecorator facility
    • Removed StreamCodecRegistry facility
    • Multiple small improvements and fixes

· One min read

ActiveJ v4.3 was released May 28, 2021 (see on Maven). This release introduced small improvements for multiple modules.

  • Added new method onConnecting to AsyncHttpClient 's Inspector. Now, the number of connection that are being established can be monitored via JmxInspector#getConnecting attribute
  • When HTTP connection closes, the proper exception is propagated to HTTP request and response body suppliers
  • ThrottlingController now throttles all the processing if tasks consecutively execute for abnormally long time
  • ForwardingStreamSupplier now correctly binds peer StreamSupplier to StreamConsumer
  • Fixed asynchronous recursion in ChannelSerializer
  • Missing measures in Aggregation are initialized with default 'zero' values
  • HyperLogLog now correctly adds int values