Valery Silaev's Blog

if it ain't broken we'll break it

tascalate2
It’s hard to start this announcement post with the regular “I’m pleased to announce…” prologue. It was a painful process, without any pleasure. A lot of disappointments. A lot of frustration with the state of the Java past version 9 and all the headaches Jigsaw (modular system) had introduced. The Java ecosystem is broken. This is a fact. Non-modular, outdated libraries. Broken build tools. Zero support from IDE for multi-release projects. But nevertheless… Per aspera ad astra…

The new 2.5 version of the Tascalate JavaFlow is out! Now it’s fully compatible with Java 9+:

  1. Bytecode modification tools (maven plugin, ant task, Java agents, specialized classloader) now understands all the new bytecode instructions up to Java 11 inclusive (nest of inner classes).
  2. All the artifacts are multi-release JAR-s that work both with old Java 1.6-1.8 AND may be used as full-fledged Java 9 modules.

Besides this, run-time Java agents was seriously reworked. Now they behave correctly when attached dynamically and may re-transform already loaded continuable classes without errors / JVM crashes. Additionally, all the hard-coded detection of the “core” Java classes is replaced with ClassLoader checks — anything loaded with a (recursive) parent of the ClassLoader.getSystemClassloader() is considered a “core” Java class. All the explicit marker interfaces’ names are externalized, and the mechanism is made extensible – these interfaces are used to skip enhancing classes these are “around advices” (like CDI / JEE interceptors). So there is no unnecessary “magic” constants left inside code.

What will follow next? I’m planning to run several iterations past 2.5.0 release to fix minor issues, like strange behavior of continuable Java / CGLib proxies, degraded performance of proxy transformation agent and alike. No major API changes are expected. Afterwards the release 3.0.0 should come out till the end of Mar 2019. Here I will do a major renaming of packages and artifacts — all org.apache.commons.javaflow.* packages will be renamed to net.tascalate.javaflow.*. I can’t keep this legacy naming clash any longer – when artifacts/modules names are different from the package names. It’s a pretty unsafe combination in post-Jigsaw world.

P.S. It’s a first time I ever released a library that depends on another library that has only a beta-release version — SLF4J. I see no better option today. Moreover, the build depends on ModiTect plugin — only a beta-version available as of now. And, finally, I forced to use snapshot (SNAPSHOT, Karl!!!) version of the Maven JavaDoc plugin – because the version released in May 2018 is total crap for multi-release projects. It’s just awful and broken in each and every place. Impressed? Here is how a Java ecosystem looks after Jigsaw…

P.P.S. On a positive side, I’d like to say thanks to the team behind ModiTect plugin. It saves me a lot of time and make the transition to Java 9+ ever possible. Seriously, I don’t know what I would do without it. Small, simple, focused — just an excellent tool for the task! My respects to authors and contributors of this excellent project!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: