Перейти к основному содержанию

· Минута чтения

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

· Минута чтения

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.

· Минута чтения

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 мин. чтения

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

· Минута чтения

ActiveJ v4.3 был выпущен 28 мая 2021 (см. на Maven). В этой версии были внесены небольшие улучшения для нескольких модулей.

  • Добавлен новый метод onConnecting в AsyncHttpClient 's Inspector. Теперь, количество соединений которые создаются могут быть промониторены через JmxInspector#getConnecting аттрибут
  • Когда HTTP-соединение закрывается, соответствующее исключение распространяется на поставщиков HTTP-запроса и тела ответа
  • ThrottlingController теперь тротлит всю обработку, если задачи последовательно выполняются слишком долго
  • ForwardingStreamSupplier теперь корректно связывает узел StreamSupplier до StreamConsumer
  • Исправлена асинхронная рекурсия в ChannelSerializer
  • Отсутствующие показатели в Агрегации инициализированы с нулевыми значениями
  • HyperLogLog теперь корректно добавляет int

· Минута чтения
  • ActiveJ Redis client
  • RecordScheme
    • Добавлена возможность указывать поля в RecordScheme, которые будут использоваться для реализации equals() и hashCode()
    • Добавлена возможность указывать поля, которые будут использоваться для создания записи Comparator
  • FileLocker
    • FileLocker - общедоступный конструктор
    • FileLocker реализует java.io.Closeable интерфейс
  • StateManager
    • Добавлены методы tryLoadSnapshot() и tryLoadDiff() , возвращающие null вместо того, чтобы бросать исключение
    • Добавлен метод tryLoad() в FileStateManager , который возвращает null вместо того, чтобы выбросить исключение
    • Добавлен метод save() в FileStateManager , который берет на себя ревизию для сохранения состояния с
  • Улучшена обработка HTTP-запросов с большими URL-адресами

· Минута чтения

ActiveJ v4.1 был выпущен Mar 19, 2021 (см. на Maven). Этот выпуск включал в себя оптимизацию и упрощение HTTP-кода, расширение функциональности некоторых компонентов.

  • HTTP рефакторинг и оптимизация
    • Оптимизирована и упрощена обработка входящих сообщений HTTP, заголовков и URL-адресов
    • Добавлены предварительные условия для сообщений HTTP, которые защищают от использования переработанных сообщений
    • Пользовательские сообщения HTTP (HttpRequest для AsyncHttpClient / HttpResponse в AsyncServlet) больше не утилизируются (только тело сообщения при наличии), таким образом давая возможность кэшировать и повторно использовать их
  • Добавлен метод Promise<Void> fetch() в OTStateManager. Полученные изменения хранятся без применения к текущему состоянию.
  • Улучшена обработка десериализованных полей в Serializer ActiveJ
  • Добавлен по умолчанию Initializerс для общих компонентов
  • Добавлены предварительные условия при применении операций к LogOTState
  • Удален JmxModule из стандартных HTTP-лаунчеров
  • Добавлена новая статистика JMX в RpcClient для мониторинга не отвечающих RPC-серверов
  • Добавлен ApplicationSettings метод для получения по умолчанию Locale
  • Чтобы использовать локаль en-US при форматировании EventStats и ValueStats

· 2 мин. чтения

ActiveJ v4.0 был выпущен в свет 16 февраля 2021 (см. на Maven). Этот выпуск включал в себя существенное рефакторинг исключений. Этот релиз также представляет асинхронную высокую производительность ActiveJ Redis. Другие компоненты оптимизированы для производительности.

  • Рефакторинг исключений
    • Все публичные исключения были удалены/скрыты.
    • StacklessException был удален. Классы, которые расширили StacklessException теперь продлевают регулярное Exception, некоторые из них все еще stackless. Stackless исключения предоставляют возможность включать трассировку стека для целей отладки. Это может быть достигнуто путем установки ApplicationSetting withStackTrace на true.
    • Переименованные исключения:
    • Добавлены новые исключения для компонентов верхнего уровня и т.д.
  • Представлен асинхронный легкий высокопроизводительный ActiveJ Redis клиент с расширяемым API. Примеры и бенчмарки для Redis клиента также были добавлены.
  • Оптимизация в сетевом коде, HTTP-обработке (особенно в режиме pipelining) и сериализации данных.
  • Переименован ByteBufQueue -> ByteBufs. Добавлен byte index ByteScanner, улучшен ByteBufs::scanBytes. Добавлен метод ByteBufs::consumeBytes, который работает как ByteBufs::scanBytes, но на самом деле потребляет сканированные bytes/bufs.
  • Удалено StreamMapper, теперь сопоставление потоков может быть достигнуто с помощью StreamFilter.mapper(Function<I, O>)
  • Удалены Преобразователь, Преобразователь Стрима, AbstractStreamReducer, классы StreamMerger. Слияние потоков может быть произведено через StreamReducer
  • Переименовано MergeSortReducer -> MergeReducer, MergeDistinctReducer -> DeduplicateReducer
  • Добавлена возможность получения чужих чанков из Cube через вызов Cube::getIrrelevantChunks. Нерелевантные чанки можно очистить, вызвав CubeConsolidationController:::cleanupIrrelevantChunks.
  • Добавлено правило JUnit тест правило ClassBuilderConstantsRule которое проверяет что все ClassBuilder статические константы очищены после выполнения теста.
  • Переименовано большинство классов/методов, содержащих parse, чтобы содержать decode.