ActiveJ Release Notes

v4.3

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

v4.2

ActiveJ v4.2 was released Apr 13, 2021 (see on Maven). This release expanded functionality of some components.

  • ActiveJ Redis client
  • RecordScheme
    • Added ability to specify fields in RecordScheme that would be used for equals() and hashCode() implementation
    • Added ability to specify fields that would be used to generate a record Comparator
  • FileLocker
    • Made FileLocker constructors public
    • FileLocker now implements java.io.Closeable interface
  • StateManager
    • Added tryLoadSnapshot() and tryLoadDiff() methods that return null rather than throwing an exception
    • Added tryLoad() method to FileStateManager that returns null rather than throwing an exception
    • Added save() method to FileStateManager that takes up a revision for the state to be saved with
  • Improved processing of HTTP requests with large URLs

v4.1

ActiveJ v4.1 was released Mar 19, 2021 (see on Maven). This release included optimization and simplification of HTTP code, expanding functionality of some components.

  • HTTP refactoring and optimizations
    • Optimized and simplified processing of incoming HTTP messages, headers and URLs
    • Added preconditions for an HTTP message which guard against using recycled messages
    • User-created HTTP messages (HttpRequest for AsyncHttpClient / HttpResponse in AsyncServlet) are not recycled anymore (only message body is recycled if present), thus making it possible to cache and reuse them
  • Added Promise<Void> fetch() method to OTStateManager. Fetched changes are stored without being applied to the current state.
  • Improved casting of deserialized fields in ActiveJ Serializer
  • Added default Initializers for common components
  • Added preconditions when applying operations to LogOTState
  • Removed JmxModule from common HTTP launchers
  • Added new JMX stats to RpcClient for monitoring unresponsive RPC servers
  • Added ApplicationSettings method for obtaining a default Locale
  • Stick to using en-US locale when formatting EventStats and ValueStats

v4.0

ActiveJ v4.0 was released Feb 16, 2021 (see on Maven). This release included major refactoring of exceptions. This release also introduces asynchronous high-performance ActiveJ Redis client. Other components were optimized for the performance.

  • Exceptions refactoring
    • All public constant exceptions were removed/hidden.
    • StacklessException was removed. Classes that extended StacklessException now extend regular Exception, some of them are still stackless. Stackless exceptions provide the ability to include stack trace for debugging purposes. This can be achieved by setting exception’s ApplicationSetting withStackTrace to true.
    • Renamed exceptions:
    • Added new exceptions for top-level components, etc.
  • Introduced asynchronous lightweight high-performance ActiveJ Redis Client with extendable API. Examples and benchmarks for Redis client were added as well.
  • Optimizations in network code, HTTP processing (especially in pipelining mode), and data serialization.
  • Renamed ByteBufQueue -> ByteBufs. Added byte index to ByteScanner, refactored ByteBufs::scanBytes. Added ByteBufs::consumeBytes method that works like ByteBufs::scanBytes, but actually consumes scanned bytes/bufs.
  • Removed StreamMapper, now stream mapping can be achieved via StreamFilter.mapper(Function<I, O>)
  • Removed Transducer, StreamTransducer, AbstractStreamReducer, StreamMerger classes. Merging of streams can be done via StreamReducer
  • Renamed MergeSortReducer -> MergeReducer, MergeDistinctReducer -> DeduplicateReducer
  • Added ability to obtain irrelevant chunks from Cube by calling Cube::getIrrelevantChunks. Irrelevant chunks can be cleaned up by calling CubeConsolidationController::cleanupIrrelevantChunks.
  • Added JUnit test rule ClassBuilderConstantsRule which validates that all of the ClassBuilder’s static constants are cleared after test passes.
  • Renamed most classes/methods that contained parse to contain decode instead.

v3.0.1

ActiveJ v3.0.1 was released Nov 30, 2020 (see on Maven). This release included a minor bug fix for ActiveJ Serializer.

v3.0

ActiveJ v3.0 was released Nov 12, 2020 (see on Maven). This release included numerous changes and improvements:

  • ActiveJ Codegen API for constructors and super-constructors became more streamlined. Records, RecordScheme classes were improved. Introduced RecordProjection class. Also, now you can set the bytecode save directory using system property (via ApplicationSettings). We’ve also added the ability to throw custom exceptions via Expressions.
  • ActiveJ Serializer. StreamInput and StreamOutput classes were introduced as an alternative to Java’s DataInputStream and DataOutputStream. StreamCodecFactory was introduced alongside StreamCodecRegistry and StreamCodecs classes. SerializerBuilder was greatly improved. Also minor refactoring and improvements were performed.
  • ActiveJ FS - file durability options were added to LocalActiveFs, LocalBlockingFs. We’ve added LocalBlockingFs and simplified LocalActiveFs. There also were minor bug fixes and refactoring performed.
  • ActiveJ Datastream. We’ve reworked and simplified ChannelDeserializer and ChannelSerializer classes, replacing explicit maximum message size with adaptive message size of up to 256MB (as opposed to the 2MB limit in ActiveJ v2.0).
  • ActiveJ HTTP - HTTP connections classes were made public and are now added to requests (on servers) and to responses (on clients). HTTP version was added to HTTP messages. HTTP inspectors were reworked.
  • ActiveJ RPC, ActiveJ CSP, Net, and Cube got minor improvements and bug fixes. This release also introduces FileStateManager in the util-state package.

v2.2

ActiveJ v2.2 was released Sep 11, 2020 (see on Maven). This release included major fixes and improvements of JMX module start up, which greatly sped up Launchers. Now all the HTTP examples launch lightning-fast! The release also included reworks of recycling of iterators, restoring compilation for JDK 8, and other minor bug fixes. We’ve also added a new ActiveJ FS example for deploying cluster file storage.

v2.1

ActiveJ v2.1 was released Sep 4, 2020 (see on Maven). This release included minor bug fixes and introduced support of WebSockets communication protocol. You can explore a basic WebSocket Ping-Pong client-server use case here

v2.0

ActiveJ v2.0 was released Aug 18, 2020 (see on Maven). The release included a list of important improvements and optimizations.

  • ActiveJ Fs library was affected the most. ActiveJ FS client HTTP and TCP implementations got a full support of append and upload operations. A support of concurrent uploads with last-write-wins semantics was added. There also were some important optimizations and minor bug fixes. For your convenience, we’ve added a Javadoc to each of the ActiveFs implementations.

  • ActiveJ Inject, Active Datastream, ActiveJ Eventloop, and ActiveJ Promise components got minor improvements and optimizations

  • ActiveJ Codegen got a full support of static fields and class initializers

  • ActiveJ Serializer got a support of cyclic references

Most of the other ActiveJ components were slightly affected and optimized by the aforementioned improvements.