Releases: vsilaev/tascalate-javaflow
Tascalate JavaFlow 2.6.0
This release addresses performance and memory issues with some tools.
- Caching is revisited to avoid both hard-references to resources like
ClassLoader
-s and to efficiently cache analyzers' results (mostly, inheritance type information and information about continuable classes-methods) - Public SPI is simplified,
ContinuableClassInfo
andContinuableClassInfoResolver
functionality is now a part of "providers" internals. ExtendedClasspathResourceLoader
is replaced everywhere withMorphingResourceLoader
to avoid usage of thread-locals to find bytecode of classes defined at run-time.- CDI Java Agent is fully revisited -- now it uses
ResourceTransformationFactory
+ResourceTransformer
pattern, in the same way as core JavaFlow Agent. As a bonus, Proxy-tailoredResourceTransformationFactory
may be used withContinuableClassLoader
as well. - Common code of both agents is extracted to separate artifact.
ContinuableClassLoader
is fixed: loading of "platform" classes now performed correctly via Platform Class Loader (and regardless of "parentFirst" settings). Additionally, the class avoid re-loading itself and classes it depends on in "parent-first" fashion.ContinuableClassLoader
now extends regularClassLoader
rather thenURLClassLoader
-- in majority of cases this is exactly what's necessary; if additional resources should be passed toContinuableClassLoader
then custom URLClassLoader must be set as its parent.- It's now possible to bootstrap un-instrumented (at build-time) application with continuations support -- see
ApplicationWeaver.bootstrap
innet.tascalate.javaflow.tools.runtime
- Checking for classes sub-types / super-types is fully re-implemented, see
ClassHierarchy
(replacesInheritanceLookup
)
Tascalate JavaFlow 2.5.0
This is a major release that adds full support for Java 9+ (up to Java 11 inclusive). Additionally, there are a lot of improvements for Java agents functionality.
- Tools now supports Java 11 bytecode.
- All artifacts are multi-versioned modular JAR-s that works with Java versions 1.6 to 11.
- Shaded version of ObjectWeb ASM 7.0 is used instead of "raw" ASM.
- commons-logging (outdated, non-modular) is replaced with SLF4J (modular).
- In generated classes marker static field is replaced with marker continuation
@Skip
-- necessary to let agents re-transform classes when attached dynamically (it's forbidden to add methods/fields, even static ones). - Run-time Java agents now correctly re-transform classes.
- Checking core java classes by name is replaced with checks by classloader, anything below
System Class Loader
(boot + extension, or platform) is considered a source of core java classes. - Checks for marker interfaces that mark non-continuable classes is now externalized and extensible
ContinuableClassLoader
is refactored.- Some extensions to SPI interfaces are introduced to support functionality mentioned above.
Tascalate JavaFlow 2.4.0
This is a performance optimization release with API enhancements.
- Core
Stack
class was intensively revisited: expensive debug statements now are protected with the check for a debug logging level (this alone yields almost 300% of speed-up in corresponding tests); all primitive types now are handled in singlelong[]
array to save time on arrays copying (1 instead of 4) when continuation is resumed. Continuation
now may be created as mutli-shot (available previously, it was the only option) and as a single-shot. Unlike multi-shot continuations, single-shot ones may be resumed only once (i.e.Continuation.again()
is not supported), but this functionality (single-shot) is what is necessary for majority of use-cases. Being capable to resume only once, one-shot continuations have very serious performance optimizations and outperforms multi-shot continuations by the factor of 2-2.5- More well-known interfaces fro popular CDI containers are supported; Usage of continuations with JEE container was proved by an example for WildFly (see separate tascalate-javaflow-examples project)
Tascalate JavaFlow 2.3.2
Adding support for RetroLambda output
Tascalate JavaFlow 2.3.1
Bug fix release (invalid check for JDK class names in instrumentation agents)
Tascalate JavaFlow 2.3.0
BREAKING CHANGES!!! PLEASE READ!!!
net.tascalate.javaflow.extras
artifact is withdrawn, its code serves as a basis for the project Tascalate JavaFlow Util. The code of this artifact has no relation with origins of Apache Commons JavaFlow, so I can use more permissive license for the new project. Plus, it becomes obvious that this code have it's own release cycle (more often than core)- All examples are moved to separate project Tascalate JavaFlow Examples. This helps to avoid loading huge unnecessary dependencies (JBoss Weld, Apache OpenWebBeans), to reduce overall build and release time.
net.tascalate.javaflow.extras
artifact is renamed tonet.tascalate.javaflow.tools.runtime
-- this name better suits for the lib that holdsContinuableClassLoader
that transforms bytecode on-the-fly.
Enchancements
- Agents now correctly implement
agentmain
method and re-transform classes if agents were attached after application start. - Transformers now skip JDK classes by well-known name prefixes (
java.*
,javax.*
,sun.*
etc) without analyzing bytecode - this speeds-up startup a lot
Tascalate JavaFlow 2.2.3
This release both fixes some issues with code generation as well as adds new functionality
- Fix issue with incorrectly handling bridged methods (continuation was applied to the bridge but not to the 'bridged' specialization in subclass -- this leads to run-time error)
- Extending
InterceptorSupport
to work both in CDI generated proxies and hand-written proxies - Adding an example to show how
InterceptorSupport
may be used withjava.lang.Proxy
- Refactoring existing CDI code transformers (OWB, Weld) to use
InterceptorSupport
instead of repeating logic - Adding experimental support for CDI with Spring AOP (no example yet)
- Adding more continuable versions of functional interfaces (
ContinuableBiConsumer
,ContinuableFunction
,ContinuablePredicate
) toextras
project
Tascalate JavaFlow 2.2.2
This is a maintenance release with the following fixes / changes:
- Fix name of misspelled
CloseableIterator
(wasClosableIterator
) -- may affect your client code while this is a part of the public Extras API. - Refactoring
Continuations
class, adding parameter to specify whether to return current continuation values from streams/iterators. - Separate methods in
Continuations
for regular / continuable iterations. - Optimizing inheritance lookup in bytecode transformers (via caching results).
- Coding style & formatting fixes accross the projects.
Tascalate JavaFlow 2.2.1
Fixes severe bugs in FastClassVerifier
(all ASM versions) these lead to generation of invalid code
Tascalate JavaFlow 2.2
Remove a dependency to runtime-api from tools to both reduce tools size and avoid any class-loading conflicts