SlideShare a Scribd company logo
1 of 58
The Eclipse Transformer
A presentation for Jakarta One 2020
Thomas Bitonti
IBM Advisory Software Engineer, IBM Cloud and Cognitive Software
bitonti@us.ibm.com
BJ Hargrave
IBM Senior Technical Staff Member, IBM Cloud and Cognitive Software
hargrave@us.ibm.com
08-Dec-2020
Group Name / DOC ID / Month XX, 2020 / © 2020 IBM Corporation 2
The Eclipse Transformer
1. Introduction: Table of Contents
The Eclipse Transformer / 08-Dec-2020 3
1. Introduction
2. Overview
3. Current Use In Open Liberty
4. Operations
5. Target Artifacts
6. Updates
7. Update Configuration
8. Development History
9. Future Directions
10.Conclusion
The Eclipse Transformer
1. Introduction: Summary
The Eclipse Transformer / 03-Dec-2020 4
The Eclipse Transformer is an Eclipse hosted open source project
which provides an data driven engine that is capable of
transforming several types of Java artifacts. The primary
operation is to replace java package references. Supported
artifact types include classes, manifests, deployment
descriptors, server configurations, stand-alone or within
directories and archives. The transformer was created,
generally, as a shading engine, and specifically, to transform
JavaEE artifacts into their Jakarta equivalents.
Overview
The Eclipse Transformer / 08-Dec-2020 5
The Eclipse Transformer
2. Overview
The Eclipse Transformer / 08-Dec-2020 6
• Core Technical Problem
• Why use the Eclipse transformer?
• Who is using or might use the Eclipse Transformer?
The Eclipse Transformer
2. Overview: Core Technical Problem
The Eclipse Transformer / 08-Dec-2020 7
A core change introduced by the Jakarta specification is the replacement of
existing JavaEE packages with Jakarta equivalents.
For example: javax.servlet.Servlet
Becomes: jakarta.servlet.Servlet
Package renames occur primarily in java classes. Package renames occur
secondarily in associated metadata, such as manifests and deployment
descriptors.
The Eclipse Transformer
2. Overview
The Eclipse Transformer / 08-Dec-2020 8
Who is using, or may use the Eclipse Transformer?
• Server developers, who wish to quickly create new implementations
• Test developers, who wish to adapt existing tests to run against the Jakarta
specification, using Jakarta test data
• Application deployers and application developers, who wish to convert existing
applications into Jakarta equivalents.
The Eclipse Transformer
2. Overview: WildFly
The Eclipse Transformer / 08-Dec-2020 9
https://www.wildfly.org/news/2020/11/12/Jakarta-EE-9-with-WildFly-Preview
“The last item is the key point. When Galleon provisions a 'wildfly-preview' server by
pulling jars down from maven, it knows that some artifacts were compiled against EE 8
javax.* packages. So it bytecode transforms those jars to alter references to EE 8
packages in the class file constant tables to change from javax.* to jakarta.*. The
transformation goes beyond simple package renames; a number of other known differences
between EE 8 and EE 9 are handled. We owe a great deal of thanks to B.J. Hargrave and the
community behind the Eclipse Transformer project for their work on the underlying
transformation tool”
The Eclipse Transformer
2. Overview: tomitribe
The Eclipse Transformer / 08-Dec-2020 10
https://www.tomitribe.com/blog/jakarta-ee-9-milestone-and-apache-tomee-9-0-0-m1
The Eclipse Transformer is a bytecode transformation tool originally prototyped by BJ
Hargrave using BND to specialize in the javax-to-jakarta namespace change. Intended as a
way to migrate applications, we’ve been stretching the limits putting it to use to
transform the entire Apache TomEE server distribution from javax-to-jakarta. We’re proud
to now be one of the contributors to the project with special thanks to our own Jonathan
Gallimore for his contribution of a Maven Plugin and several fixes. We’re excited about
the strength this codebase is showing in solving this very difficult problem.
The Eclipse Transformer
2. Overview
The Eclipse Transformer / 08-Dec-2020 11
Why use The Eclipse Transformer?
The transformer quickly creates Jakarta artifacts from JavaEE artifacts, as an
alternative to updating and rebuilding source files.
Current Use In
Open Liberty
The Eclipse Transformer / 08-Dec-2020 12
The Eclipse Transformer
3. Current Use In Open
Liberty
The Eclipse Transformer / 08-Dec-2020 13
Within Open Liberty builds, the transformer is used to update:
OSGi bundle archives:
• to update package references and string constants in classes;
• to update package references and package version ranges in
manifests;
• to update the bundle identity in manifests.
.
The Eclipse Transformer
3. Current Use In Open
Liberty
The Eclipse Transformer / 08-Dec-2020 14
Within Open Liberty builds, the transformer is used to update:
Functional Acceptance Tests (FATs):
• to update test classes;
• to update Open Liberty server configurations;
• to update test applications.
The Eclipse Transformer
3. Current Use In Open
Liberty
The Eclipse Transformer / 08-Dec-2020 15
The Open Liberty test organization used the transformer to
update:
Certification Tests
• to update package references in test classes
The Eclipse Transformer
3. Current Use: OSGi Bundle
The Eclipse Transformer / 08-Dec-2020 16
Within Open Liberty projects which create bundle archives, a new
Jakarta build step is enabled by adding a new BND directive:
jakartaeeMe: true
This results in the creation of a second, transformed, Jakarta
version of the project’s bundle jar:
com.ibm.ws.webcontainer.servlet.4.0.jar
com.ibm.ws.webcontainer.servlet.4.0.jakarta.jar
The Eclipse Transformer
3. Current Use: OSGi Bundle
The Eclipse Transformer / 08-Dec-2020 17
For example, updates to an OSGI bundle manifest:
Bundle-Description: WAS WebContainer 8.1 with Servlet 4.0 support
Bundle-Name: WAS WebContainer
Import-Package: javax.servlet;version="[2.6,3)",javax.servlet.http;ver
sion="[2.6,3)",com.ibm.ejs.ras;version="[1.0,2)",com.ibm.websphere.cs
i;version="[4.0,5)",com.ibm.websphere.ras;version="[1.2,2)",com.ibm.w
ebsphere.servlet.request;version="[1.1,2)",com.ibm.websphere.servlet.
response;version="[2.0,3)",com.ibm.websphere.servlet31.request;versio
Bundle-Description: WAS WebContainer 8.1 with Servlet 4.0 support; Jak
arta Enabled
Bundle-Name: WAS WebContainer Jakarta
Import-Package: jakarta.servlet;version="[5.0,6)",jakarta.servlet.http
;version="[5.0,6)",com.ibm.ejs.ras;version="[1.0,2)",com.ibm.webspher
e.csi;version="[4.0,5)",com.ibm.websphere.ras;version="[1.2,2)",com.i
bm.websphere.servlet.request;version="[1.1,2)",com.ibm.websphere.serv
let.response;version="[2.0,3)",com.ibm.websphere.servlet31.request;ve
The Eclipse Transformer
3. Current Use: OSGi Bundle
The Eclipse Transformer / 08-Dec-2020 18
For example, updates to web.xml:
<resource-ref>
<res-ref-name>jndi_JMS_BASE_QCF</res-ref-name>
<res-type>javax.jms.QueueConnectionFactory</res-type>
<lookup-name>jndi_JMS_BASE_QCF</lookup-name>
</resource-ref>
<resource-ref>
<res-ref-name>jndi_JMS_BASE_QCF1</res-ref-name>
<res-type>javax.jms.QueueConnectionFactory</res-type>
<lookup-name>jndi_JMS_BASE_QCF1</lookup-name>
</resource-ref>
<resource-ref>
<res-ref-name>jndi_JMS_BASE_QCF</res-ref-name>
<res-type>jakarta.jms.QueueConnectionFactory</res-type>
<lookup-name>jndi_JMS_BASE_QCF</lookup-name>
</resource-ref>
<resource-ref>
<res-ref-name>jndi_JMS_BASE_QCF1</res-ref-name>
<res-type>jakarta.jms.QueueConnectionFactory</res-type>
<lookup-name>jndi_JMS_BASE_QCF1</lookup-name>
</resource-ref>
The Eclipse Transformer
3. Current Use: Server Configuration
The Eclipse Transformer / 08-Dec-2020 19
Running Feature Acceptance Tests, Open Liberty server configurations may
be updated:
<jmsActivationSpec id="jmsapp/jmsmdb/MDB">
<properties.wasJms destinationRef="eis/topic"
destinationType="javax.jms.Topic"
clientId="cid1"
subscriptionName="SID1"/>
</jmsActivationSpec>
<jmsActivationSpec id="jmsapp/jmsmdb/MDB">
<properties.wasJms destinationRef="eis/topic"
destinationType="jakarta.jms.Topic"
clientId="cid1"
subscriptionName="SID1"/>
</jmsActivationSpec>
Operations
The Eclipse Transformer / 08-Dec-2020 20
The Eclipse Transformer
4. Operations
The Eclipse Transformer / 08-Dec-2020 21
• The transformer operates on input artifact using specified rules data, and
creates a transformed copy of that artifact as output.
• Transformation begins with a input root artifact, which may be a directory,
an archive, or a single artifact such as a class file.
• When updating a directory, the transformer walks the directory tree,
transforming all nested files and directories.
• When updating an archive, the transformer iterates across that archive,
transforming all enclosed archive entries, including nested archives.
The Eclipse Transformer
4. Operations
The Eclipse Transformer / 08-Dec-2020 22
• Particular artifacts, such as classes, manifests, and deployment
descriptors, are matched to implementation actions. Each implementation
action is responsible for transforming one type of artifact. A artifact
which matches no action is simply copied, unchanged.
• An action may update none, either, or both, of the name of a target
artifact, or the contents of a target artifact.
• After transforming a artifact, an action reports a summary of what changes
were made. This summary information is collected by the transformer and
put into a report at the conclusion of processing.
The Eclipse Transformer
4. Operations: Command Line
The Eclipse Transformer / 08-Dec-2020 23
For example, an invocation from the command line might look as follows:
$ java 
-cp /c/sample/libs/apiguardian-api-1.1.0.jar:/c/sample/libs/assertj-core-3.14.0.jar:/c/sample/libs/biz.aQute.bndlib-
4.3.1.jar:/c/sample/libs/commons-cli-1.4.jar:/c/sample/libs/slf4j-api-1.7.29.jar:/c/sample/libs/slf4j-simple-
1.7.29.jar:/c/sample/libs/transformer.jar 
com.ibm.ws.jakarta.transformer.JakartaTransformer 
/c/sample/data/test.jar 
/c/sample/data/test.jakarta.jar
The Eclipse Transformer
4. Operations: Command Line
The Eclipse Transformer / 08-Dec-2020 24
With output as follows:
Logger name [ Transformer ] (Defaulted)
Log file [ null ]
[main] INFO Transformer - Input [ C:/sample/data/test.jar ]
[main] INFO Transformer - [ C:sampledatatest.jar ]
[main] INFO Transformer - Output [ C:/sample/data/test.jakarta.jar ] (Explicit)
[main] INFO Transformer - [ C:sampledatatest.jakarta.jar ]
The Eclipse Transformer
4. Operations: Command Line
The Eclipse Transformer / 08-Dec-2020 25
[main] INFO Transformer - Skipping option [ RULES_SELECTIONS ]
[main] INFO Transformer - Internal [ RULES_RENAMES ] URL [
jar:file:/C:/sample/libs/transformer.jar!/com/ibm/ws/jakarta/transformer/jakarta-renames.properties ]
[main] INFO Transformer - Internal [ RULES_VERSIONS ] URL [
jar:file:/C:/sample/libs/transformer.jar!/com/ibm/ws/jakarta/transformer/jakarta-versions.properties ]
[main] INFO Transformer - Internal [ RULES_BUNDLES ] URL [
jar:file:/C:/sample/libs/transformer.jar!/com/ibm/ws/jakarta/transformer/jakarta-bundles.properties ]
[main] INFO Transformer - Internal [ RULES_DIRECT ] URL [
jar:file:/C:/sample/libs/transformer.jar!/com/ibm/ws/jakarta/transformer/jakarta-direct.properties ]
[main] INFO Transformer - Internal [ RULES_MASTER_XML ] URL [ jar:file:/C:/dev/jakarta-repo-
pub/sample/libs/transformer.jar!/com/ibm/ws/jakarta/transformer/jakarta-xml.properties ]
[main] INFO Transformer - All resources will be selected
[main] INFO Transformer - Package renames are in use
[main] INFO Transformer - Package versions will be updated
[main] INFO Transformer - Bundle identities will be updated
The Eclipse Transformer
4. Operations: Command Line
The Eclipse Transformer / 08-Dec-2020 26
[main] INFO Transformer - Internal [ Substitions matching [ server.xml ] ] URL [
jar:file:/C:/sample/libs/transformer.jar!/com/ibm/ws/jakarta/transformer/jakarta-xml-server.properties ]
[main] INFO Transformer - Internal [ Substitions matching [ *.xml ] ] URL [
jar:file:/C:/sample/libs/transformer.jar!/com/ibm/ws/jakarta/transformer/jakarta-xml-all.properties ]
[main] INFO Transformer - Internal [ Substitions matching [ web.xml ] ] URL [
jar:file:/C:/sample/libs/transformer.jar!/com/ibm/ws/jakarta/transformer/jakarta-xml-web.properties ]
[main] INFO Transformer - XML files will be updated
[main] INFO Transformer - Java direct string updates will not be performed
The Eclipse Transformer
4. Operations: Command Line
The Eclipse Transformer / 08-Dec-2020 27
[main] INFO Transformer - Action selected for input [ C:/sample/data/test.jar ]: Jar Action
[main] INFO Transformer - Input [ C:sampledatatest.jar ] as [ C:sampledatatest.jakarta.jar ]: Changed
[main] INFO Transformer - [ All Resources ] [ 57 ] Unselected [ 0 ] Selected [ 57 ]
[main] INFO Transformer - [ All Actions ] [ 57 ] Unchanged [ 51 ] Changed [ 6 ]
Target
Artifacts
The Eclipse Transformer / 08-Dec-2020 28
The Eclipse Transformer
5. Target Artifacts: Artifact Types
The Eclipse Transformer / 08-Dec-2020 29
The transformer updates several types of artifacts:
• Java class files
• Manifest files (META-INF/MANIFEST.MF)
• Service Loader Configuration files (META-INF/services).
• Text-like files (XML and others)
Text-like file updates include primarily XML files:
• Deployment descriptors (web.xml, ejb-jar.xml, and others)
• Open Liberty server configuration files (server.xml)
The Eclipse Transformer
5. Target Artifacts: Archives
The Eclipse Transformer / 08-Dec-2020 30
The transformer updates several types of archives:
• Java Archives (JAR files, including EJB and CLIENT JAR files)
• Web Application Archives (WAR files)
• Resource Adapter Archives (RAR files)
• Enterprise Application Archives (EAR files)
• ZIP type archives (ZIP files)
Updates
The Eclipse Transformer / 08-Dec-2020 31
The Eclipse Transformer
6. Updates
The Eclipse Transformer / 08-Dec-2020 32
The transformer updates to:
• Package references
• OSGi manifest attributes relating to bundle identity and package version
• Java constants
• String substitutions
When updating package references, all references are located and updated.
This includes direct references, for example, the reference which occurs when
creating new instances. This also includes references which appear more
indirectly, for example, package references which occur within field and
method descriptors.
The Eclipse Transformer
6. Updates: OSGi Bundle Identity
The Eclipse Transformer / 08-Dec-2020 33
OSGI bundle identity updates are to these manifest main attributes:
• Bundle-Description
• Bundle-Name
• Bundle-SymbolicName
• Bundle-Version
Update
Configuration
The Eclipse Transformer / 08-Dec-2020 34
The Eclipse Transformer
7. Update Configuration: Rules Data
The Eclipse Transformer / 08-Dec-2020 35
The particular updates which are made is controlled by a set of rules data files.
This data files are properties files.
Most typically, rules properties are specified as key/value pairs mapping initial
value to a final value.
For example, for a package replacement:
javax.servlet=jakarta.servlet
For a java string constant replacement:
javax.servlet.async.context_path=jakarta.servlet.async.context_path
The Eclipse Transformer
7. Update Configuration: Text Updates
The Eclipse Transformer / 08-Dec-2020 36
For text-like updates, two tiers of properties files are used.
The first tier is a master file which maps file names to specific properties files
which contain updates for the named files.
The second tier provides specific text substitutions which are to be made to
specific, mapped files.
The Eclipse Transformer
7. Update Configuration: XML Updates
The Eclipse Transformer / 08-Dec-2020 37
For example, the several deployment descriptor XML files use one properties file:
application.xml=jakarta-xml-dd.properties
application-client.xml=jakarta-xml-dd.properties
ejb-jar.xml=jakarta-xml-dd.properties
permissions.xml=jakarta-xml-dd.properties
ra.xml=jakarta-xml-dd.properties
validation.xml=jakarta-xml-dd.properties
web.xml=jakarta-xml-dd.properties
web-fragment.xml=jakarta-xml-dd.properties
The Eclipse Transformer
7. Update Configuration: XML Updates
The Eclipse Transformer / 08-Dec-2020 38
The second tier "jakarta-xml-dd.properties" contains text substitutions which are
to be made to descriptor files:
javax.ejb.EJBContext=jakarta.ejb.EJBContext
javax.ejb.MessageDrivenContext=jakarta.ejb.MessageDrivenContext
javax.ejb.Timer=jakarta.ejb.Timer
javax.ejb.TimerService=jakarta.ejb.TimerService
... lines omitted
javax.jms.ConnectionFactory=jakarta.jms.ConnectionFactory
javax.jms.Destination=jakarta.jms.Destination
javax.jms.MessageListener=jakarta.jms.MessageListener
javax.jms.Queue=jakarta.jms.Queue
... lines omitted
Development
History
The Eclipse Transformer / 08-Dec-2020 39
The Eclipse Transformer
8. Development History
The Eclipse Transformer / 08-Dec-2020 40
• Inception
• Incubation
• Release
The Eclipse Transformer
8. Development History: Inception
The Eclipse Transformer / 08-Dec-2020 41
The Eclipse Transformer began by bringing together the insights of Alasdair
Nottingham and BJ Hargrave:
Alasdair Nottingham, as the Open Liberty Chief Architect, conceived of an engine
which could quickly and efficiently transform existing Open Liberty artifacts
which supported JavaEE into their Jakarta equivalents.
BJ Hargrave, IBM Senior Technical Staff Member, created a prototype which, using
the BNDLIB library, replaced package references in java .classes. The prototype
was quickly updated to handle additional JavaEE aftifacts, such as manifests and
deployment descriptors.
The Eclipse Transformer
8. Development History: Incubation
The Eclipse Transformer / 08-Dec-2020 42
The prototype transformer was adopted as a static transformer for use within
Open Liberty builds by Thomas Bitonti and the Open Liberty Web Container and
Kernel teams.
The transformation engine was iteratively extended using agile methodologies to
handle Open Liberty artifacts as identified by the development team.
Following the successful use in transforming core Web Profile artifacts, the
transformer was adopted as a part of the Open Liberty strategy for delivering
Jakarta.
The Eclipse Transformer
8. Development History: Release
The Eclipse Transformer / 08-Dec-2020 43
The transformer was accepted as Eclipse hosted open source project The Eclipse
Transformer. Subsequently, the privately hosted project was migrated to a
public Eclipse hosted GIT repository.
The Eclipse Transformer is now available for use by the Java, JavaEE, and
Jakarta communities as a tool for class shading, and specifically, as an engine
for transforming JavaEE artifacts to their Jakarta equivalent.
Future
Directions
The Eclipse Transformer / 08-Dec-2020 44
The Eclipse Transformer
9. Future Directions
The Eclipse Transformer / 08-Dec-2020 45
The initial focus of the Eclipse Transformer has been to provide a tool for
application server development teams.
Moving forward, the focus is expected to shift to application developers,
primarily as a way of quickly creating Jakarta versions of existing JavaEE
applications. The focus of project work is expected to follow this shift.
The Eclipse Transformer
9. Future Directions
The Eclipse Transformer / 08-Dec-2020 46
The Eclipse Transformer currently performs very specific operations which are
intended to support transformation of JavaEE artifacts into the equivalent
Jakarta artifacts. Other uses which only require package replacement can be
performed by selecting a different rules data set when invoking the transformer.
The embedded action framework, which maps artifacts to transformation
implementation classes, may easily be extended to support other types of
artifacts.
The Eclipse Transformer
9. Future Directions
The Eclipse Transformer / 08-Dec-2020 47
Current action implementations can be updated to perform updates in addition to
package replacements. In particular, the class action implementation already
does the heavy lifting of parsing a class and walking the resulting object
hierarchy to discover update points. The class action implementation may be
extended to perform other updates, for example, by injecting a call to a helper
method on each invocation to Class.forName. The helper method would dynamically
changed the class name parameter with a transformed class name.
Conclusion
The Eclipse Transformer / 08-Dec-2020 48
The Eclipse Transformer
10. Conclusion: Links
The Eclipse Transformer / 08-Dec-2020 49
The Apache License, Version 2.0 is available at:
http://www.apache.org/licenses
The Eclipse Transformer project is hosted by the Eclipse Foundation:
https://projects.eclipse.org/projects/technology.transformer
The Eclipse Transformer is hosted as an Eclipse GitHub repository:
https://github.com/eclipse/transformer
Snapshot artifacts are released to the Sonatype OSS repository. See:
https://oss.sonatype.org/content/repositories/snapshots
The Eclipse Transformer
10. Conclusion: Links
The Eclipse Transformer / 08-Dec-2020 50
Eclipse Transformer project documentation is available at:
• https://github.com/eclipse/transformer/blob/main/README.md
• https://github.com/eclipse/transformer/blob/main/CONTRIBUTING.md
• https://github.com/eclipse/transformer/blob/main/DEV.md
• https://github.com/eclipse/transformer/blob/main/INFRA.md
• https://github.com/eclipse/transformer/blob/main/RULES.md
The Eclipse Transformer
10. Conclusion: Links
The Eclipse Transformer / 08-Dec-2020 51
Core class transformation steps are provided by the classes:
• https://github.com/eclipse/transformer/blob/main/org.eclipse.transformer/src/
main/java/org/eclipse/transformer/action/impl/ClassActionImpl.java
• https://github.com/eclipse/transformer/blob/main/org.eclipse.transformer/src/
main/java/org/eclipse/transformer/action/impl/SignatureRuleImpl.java
For a prominent use of transformer by IBM WebSphere Open Liberty see:
• https://github.com/OpenLiberty/open-liberty/blob/integration/dev/wlp-
jakartaee-transform
The Eclipse Transformer
10. Conclusion: Links
The Eclipse Transformer / 08-Dec-2020 52
Copies of rules data are available at:
• https://github.com/eclipse/transformer/tree/main/org.eclipse.transformer.cli/
src/main/resources/org/eclipse/transformer/jakarta
Current Open Liberty rules data are available at:
• https://github.com/OpenLiberty/open-liberty/tree/integration/dev/wlp-
jakartaee-transform/rules
For the gradle task 'jakartaeeTransform' which is used to invoke the transformer
within Open Liberty builds, see:
• https://github.com/OpenLiberty/open-liberty/blob/integration/dev/wlp-
gradle/subprojects/tasks.gradle
The Eclipse Transformer
10. Conclusion: Links
The Eclipse Transformer / 08-Dec-2020 53
A tomitribe blog posting which notes their use of the Eclipse Transformer:
https://www.tomitribe.com/blog/jakarta-ee-9-milestone-and-apache-tomee-9-0-0-m1
A WildFly news posting which notes their use of the Eclipse Transformer:
https://www.wildfly.org/news/2020/11/12/Jakarta-EE-9-with-WildFly-Preview
The Eclipse Transformer
11. Conclusion: Links
The Eclipse Transformer / 08-Dec-2020 54
BndLib, which is used to perform class updates, is available at:
• https://bndtools.org
In particular, see:
• https://github.com/bndtools/bnd
• https://github.com/bndtools/bnd/blob/master/biz.aQute.bndlib/src/aQute/bnd/cl
assfile/ClassFile.java
• https://github.com/bndtools/bnd/blob/master/biz.aQute.bndlib/src/aQute/bnd/cl
assfile/builder/ModuleInfoBuilder.java
The Eclipse Transformer
11. Conclusion: Links
The Eclipse Transformer / 08-Dec-2020 55
Alternatively, class updates can be implemented using ObjectWorks ASM framework:
• https://asm.ow2.io
Service loader configuration files are documented at:
• https://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html
The Eclipse Transformer
11. Conclusion: Thanks!
The Eclipse Transformer / 08-Dec-2020 56
With thanks and appreciation:
• To IBM, for supporting this project
• To Alasdair Nottingham, for the initial insight;
• To BJ Hargrave, for the initial prototype;
• To IBM Open Liberty developers, for helping the project grow;
• To the Eclipse organization, for providing a home for the project.
• And most of all to the audience, for their patient participation.
Thomas Bitonti IBM Advisory Software Engineer
BJ Hargrave, IBM Senior Technical Staff member,
08-Dec-2020
The Eclipse Transformer
11. Conclusion: Licenses
The Eclipse Transformer / 08-Dec-2020 57
This presentation and related materials are available
under the terms of the Creative Commons Attribution
4.0 International License.
The Eclipse Transformer is available under the terms
of the Apache License, Version 2.0, or the Eclipse
Public License 2.0.
Q&A
The Eclipse Transformer / 08-Dec-2020 58

More Related Content

What's hot

Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Toshiaki Maki
 
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかなぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかYoichi Toyota
 
TFA Collector - what can one do with it
TFA Collector - what can one do with it TFA Collector - what can one do with it
TFA Collector - what can one do with it Sandesh Rao
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月Taku Miyakawa
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with KarateTakanori Suzuki
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011Hiroshi Tokumaru
 
Spring Batch Performance Tuning
Spring Batch Performance TuningSpring Batch Performance Tuning
Spring Batch Performance TuningGunnar Hillert
 
Kubernetes超入門 with java
Kubernetes超入門 with javaKubernetes超入門 with java
Kubernetes超入門 with javaYasunari Tanaka
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術Kiyokuni Kawachiya
 
Git超入門_座学編.pdf
Git超入門_座学編.pdfGit超入門_座学編.pdf
Git超入門_座学編.pdf憲昭 村田
 
JVM のいろはにほ #javajo
JVM のいろはにほ #javajoJVM のいろはにほ #javajo
JVM のいろはにほ #javajoYuji Kubota
 
What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?土岐 孝平
 
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016Christian Schneider
 
An Overview of Deserialization Vulnerabilities in the Java Virtual Machine (J...
An Overview of Deserialization Vulnerabilities in the Java Virtual Machine (J...An Overview of Deserialization Vulnerabilities in the Java Virtual Machine (J...
An Overview of Deserialization Vulnerabilities in the Java Virtual Machine (J...joaomatosf_
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
Java8から17へ
Java8から17へJava8から17へ
Java8から17へonozaty
 

What's hot (20)

Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
 
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかなぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのか
 
TFA Collector - what can one do with it
TFA Collector - what can one do with it TFA Collector - what can one do with it
TFA Collector - what can one do with it
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
 
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
 
React&redux
React&reduxReact&redux
React&redux
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
 
Spring Batch 2.0
Spring Batch 2.0Spring Batch 2.0
Spring Batch 2.0
 
Spring Batch Performance Tuning
Spring Batch Performance TuningSpring Batch Performance Tuning
Spring Batch Performance Tuning
 
Kubernetes超入門 with java
Kubernetes超入門 with javaKubernetes超入門 with java
Kubernetes超入門 with java
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術
 
Kotlin Coroutines - the new async
Kotlin Coroutines - the new asyncKotlin Coroutines - the new async
Kotlin Coroutines - the new async
 
Git超入門_座学編.pdf
Git超入門_座学編.pdfGit超入門_座学編.pdf
Git超入門_座学編.pdf
 
JVM のいろはにほ #javajo
JVM のいろはにほ #javajoJVM のいろはにほ #javajo
JVM のいろはにほ #javajo
 
What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?
 
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
 
An Overview of Deserialization Vulnerabilities in the Java Virtual Machine (J...
An Overview of Deserialization Vulnerabilities in the Java Virtual Machine (J...An Overview of Deserialization Vulnerabilities in the Java Virtual Machine (J...
An Overview of Deserialization Vulnerabilities in the Java Virtual Machine (J...
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
Java8から17へ
Java8から17へJava8から17へ
Java8から17へ
 

Similar to The Eclipse Transformer Project

Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...
Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...
Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...HostedbyConfluent
 
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"GlobalLogic Ukraine
 
JVMs in Containers - Best Practices
JVMs in Containers - Best PracticesJVMs in Containers - Best Practices
JVMs in Containers - Best PracticesDavid Delabassee
 
Quadcept v10.0.0 Released
Quadcept v10.0.0 ReleasedQuadcept v10.0.0 Released
Quadcept v10.0.0 ReleasedQuadcept
 
EMC Documentum - xCP 2.x Updating Java Services
EMC Documentum - xCP 2.x Updating Java ServicesEMC Documentum - xCP 2.x Updating Java Services
EMC Documentum - xCP 2.x Updating Java ServicesHaytham Ghandour
 
Owner - Java properties reinvented.
Owner - Java properties reinvented.Owner - Java properties reinvented.
Owner - Java properties reinvented.Luigi Viggiano
 
Lecture 19 - Dynamic Web - JAVA - Part 1.ppt
Lecture 19 - Dynamic Web - JAVA - Part 1.pptLecture 19 - Dynamic Web - JAVA - Part 1.ppt
Lecture 19 - Dynamic Web - JAVA - Part 1.pptKalsoomTahir2
 
Spring data jpa are used to develop spring applications
Spring data jpa are used to develop spring applicationsSpring data jpa are used to develop spring applications
Spring data jpa are used to develop spring applicationsmichaelaaron25322
 
Migrating from Pivotal tc Server on-prem to IBM Liberty in the cloud
Migrating from Pivotal tc Server on-prem to IBM Liberty in the cloudMigrating from Pivotal tc Server on-prem to IBM Liberty in the cloud
Migrating from Pivotal tc Server on-prem to IBM Liberty in the cloudJohn Donaldson
 
Microservices made easy JavaCro 2021
Microservices made easy JavaCro 2021Microservices made easy JavaCro 2021
Microservices made easy JavaCro 2021Jamie Coleman
 
Implementing Microservices with Jakarta EE and MicroProfile
Implementing Microservices with Jakarta EE and MicroProfileImplementing Microservices with Jakarta EE and MicroProfile
Implementing Microservices with Jakarta EE and MicroProfileKevin Sutter
 
Jenkins advance topic
Jenkins advance topicJenkins advance topic
Jenkins advance topicKalkey
 
The Meteor Framework
The Meteor FrameworkThe Meteor Framework
The Meteor FrameworkDamien Magoni
 

Similar to The Eclipse Transformer Project (20)

Apache tomcat
Apache tomcatApache tomcat
Apache tomcat
 
JDK 10 Java Module System
JDK 10 Java Module SystemJDK 10 Java Module System
JDK 10 Java Module System
 
Auxiliary : Tomcat
Auxiliary : TomcatAuxiliary : Tomcat
Auxiliary : Tomcat
 
Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...
Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...
Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...
 
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
 
Jetty Vs Tomcat
Jetty Vs TomcatJetty Vs Tomcat
Jetty Vs Tomcat
 
JVMs in Containers - Best Practices
JVMs in Containers - Best PracticesJVMs in Containers - Best Practices
JVMs in Containers - Best Practices
 
Quadcept v10.0.0 Released
Quadcept v10.0.0 ReleasedQuadcept v10.0.0 Released
Quadcept v10.0.0 Released
 
EMC Documentum - xCP 2.x Updating Java Services
EMC Documentum - xCP 2.x Updating Java ServicesEMC Documentum - xCP 2.x Updating Java Services
EMC Documentum - xCP 2.x Updating Java Services
 
JVMs in Containers
JVMs in ContainersJVMs in Containers
JVMs in Containers
 
Owner - Java properties reinvented.
Owner - Java properties reinvented.Owner - Java properties reinvented.
Owner - Java properties reinvented.
 
bjhbj
bjhbjbjhbj
bjhbj
 
Lecture 19 - Dynamic Web - JAVA - Part 1.ppt
Lecture 19 - Dynamic Web - JAVA - Part 1.pptLecture 19 - Dynamic Web - JAVA - Part 1.ppt
Lecture 19 - Dynamic Web - JAVA - Part 1.ppt
 
Spring data jpa are used to develop spring applications
Spring data jpa are used to develop spring applicationsSpring data jpa are used to develop spring applications
Spring data jpa are used to develop spring applications
 
Migrating from Pivotal tc Server on-prem to IBM Liberty in the cloud
Migrating from Pivotal tc Server on-prem to IBM Liberty in the cloudMigrating from Pivotal tc Server on-prem to IBM Liberty in the cloud
Migrating from Pivotal tc Server on-prem to IBM Liberty in the cloud
 
Microservices made easy JavaCro 2021
Microservices made easy JavaCro 2021Microservices made easy JavaCro 2021
Microservices made easy JavaCro 2021
 
Implementing Microservices with Jakarta EE and MicroProfile
Implementing Microservices with Jakarta EE and MicroProfileImplementing Microservices with Jakarta EE and MicroProfile
Implementing Microservices with Jakarta EE and MicroProfile
 
Java Cloud and Container Ready
Java Cloud and Container ReadyJava Cloud and Container Ready
Java Cloud and Container Ready
 
Jenkins advance topic
Jenkins advance topicJenkins advance topic
Jenkins advance topic
 
The Meteor Framework
The Meteor FrameworkThe Meteor Framework
The Meteor Framework
 

More from Jakarta_EE

Applied Domain-Driven Design Blueprints for Jakarta EE
Applied Domain-Driven Design Blueprints for Jakarta EEApplied Domain-Driven Design Blueprints for Jakarta EE
Applied Domain-Driven Design Blueprints for Jakarta EEJakarta_EE
 
Contributors Guide to the Jakarta EE 10 Galaxy
Contributors Guide to the Jakarta EE 10 GalaxyContributors Guide to the Jakarta EE 10 Galaxy
Contributors Guide to the Jakarta EE 10 GalaxyJakarta_EE
 
Shorten All URLs
Shorten All URLsShorten All URLs
Shorten All URLsJakarta_EE
 
Eclipse Transformer
Eclipse TransformerEclipse Transformer
Eclipse TransformerJakarta_EE
 
Eclipse GlassFish 6.0.0-M1
Eclipse GlassFish 6.0.0-M1Eclipse GlassFish 6.0.0-M1
Eclipse GlassFish 6.0.0-M1Jakarta_EE
 
Jakarta EE 9 Platform Project
Jakarta EE 9 Platform ProjectJakarta EE 9 Platform Project
Jakarta EE 9 Platform ProjectJakarta_EE
 
Jakarta EE 9 Milestone Release Party - Overview
Jakarta EE 9 Milestone Release Party - OverviewJakarta EE 9 Milestone Release Party - Overview
Jakarta EE 9 Milestone Release Party - OverviewJakarta_EE
 
Jakarta EE 9 Platform Report
Jakarta EE 9 Platform ReportJakarta EE 9 Platform Report
Jakarta EE 9 Platform ReportJakarta_EE
 
Cloud Native Java: Present and Future at Eclipse Foundation
Cloud Native Java: Present and Future at Eclipse FoundationCloud Native Java: Present and Future at Eclipse Foundation
Cloud Native Java: Present and Future at Eclipse FoundationJakarta_EE
 
Building 12-factor Cloud Native Microservices
Building 12-factor Cloud Native MicroservicesBuilding 12-factor Cloud Native Microservices
Building 12-factor Cloud Native MicroservicesJakarta_EE
 
JakartaOne Livestream CN4J: Driving Jakarta EE Success
JakartaOne Livestream CN4J: Driving Jakarta EE SuccessJakartaOne Livestream CN4J: Driving Jakarta EE Success
JakartaOne Livestream CN4J: Driving Jakarta EE SuccessJakarta_EE
 
JakartaOne Livestream CN4J: Cloud Native Runtimes - Revolution or Evolution?
JakartaOne Livestream CN4J: Cloud Native Runtimes - Revolution or Evolution?JakartaOne Livestream CN4J: Cloud Native Runtimes - Revolution or Evolution?
JakartaOne Livestream CN4J: Cloud Native Runtimes - Revolution or Evolution?Jakarta_EE
 
JakartaOne Livestream CN4J: Bringing Reactive to Enterprise Developers
JakartaOne Livestream CN4J: Bringing Reactive to Enterprise DevelopersJakartaOne Livestream CN4J: Bringing Reactive to Enterprise Developers
JakartaOne Livestream CN4J: Bringing Reactive to Enterprise DevelopersJakarta_EE
 
JakartaOne Livestream CN4J: Eclipse MicroProfile - Your Cloud-Native Companion
JakartaOne Livestream CN4J: Eclipse MicroProfile - Your Cloud-Native CompanionJakartaOne Livestream CN4J: Eclipse MicroProfile - Your Cloud-Native Companion
JakartaOne Livestream CN4J: Eclipse MicroProfile - Your Cloud-Native CompanionJakarta_EE
 
Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019
Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019
Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019Jakarta_EE
 
Jakarta for dummEEs | JakartaOne Livestream
Jakarta for dummEEs | JakartaOne LivestreamJakarta for dummEEs | JakartaOne Livestream
Jakarta for dummEEs | JakartaOne LivestreamJakarta_EE
 
Jakarta EE Meets NoSQL at the Cloud Age | JakartaOne Livestream
Jakarta EE Meets NoSQL at the Cloud Age | JakartaOne LivestreamJakarta EE Meets NoSQL at the Cloud Age | JakartaOne Livestream
Jakarta EE Meets NoSQL at the Cloud Age | JakartaOne LivestreamJakarta_EE
 
Turbocharged Java with Quarkus | JakartaOne Livestream
 Turbocharged Java with Quarkus | JakartaOne Livestream Turbocharged Java with Quarkus | JakartaOne Livestream
Turbocharged Java with Quarkus | JakartaOne LivestreamJakarta_EE
 
Building Interoperable Microservices With Eclipse MicroProfile| JakartaOne Li...
Building Interoperable Microservices With Eclipse MicroProfile| JakartaOne Li...Building Interoperable Microservices With Eclipse MicroProfile| JakartaOne Li...
Building Interoperable Microservices With Eclipse MicroProfile| JakartaOne Li...Jakarta_EE
 
Jakarta RESTful Web Services: Status Quo and Roadmap | JakartaOne Livestream
Jakarta RESTful Web Services: Status Quo and Roadmap | JakartaOne LivestreamJakarta RESTful Web Services: Status Quo and Roadmap | JakartaOne Livestream
Jakarta RESTful Web Services: Status Quo and Roadmap | JakartaOne LivestreamJakarta_EE
 

More from Jakarta_EE (20)

Applied Domain-Driven Design Blueprints for Jakarta EE
Applied Domain-Driven Design Blueprints for Jakarta EEApplied Domain-Driven Design Blueprints for Jakarta EE
Applied Domain-Driven Design Blueprints for Jakarta EE
 
Contributors Guide to the Jakarta EE 10 Galaxy
Contributors Guide to the Jakarta EE 10 GalaxyContributors Guide to the Jakarta EE 10 Galaxy
Contributors Guide to the Jakarta EE 10 Galaxy
 
Shorten All URLs
Shorten All URLsShorten All URLs
Shorten All URLs
 
Eclipse Transformer
Eclipse TransformerEclipse Transformer
Eclipse Transformer
 
Eclipse GlassFish 6.0.0-M1
Eclipse GlassFish 6.0.0-M1Eclipse GlassFish 6.0.0-M1
Eclipse GlassFish 6.0.0-M1
 
Jakarta EE 9 Platform Project
Jakarta EE 9 Platform ProjectJakarta EE 9 Platform Project
Jakarta EE 9 Platform Project
 
Jakarta EE 9 Milestone Release Party - Overview
Jakarta EE 9 Milestone Release Party - OverviewJakarta EE 9 Milestone Release Party - Overview
Jakarta EE 9 Milestone Release Party - Overview
 
Jakarta EE 9 Platform Report
Jakarta EE 9 Platform ReportJakarta EE 9 Platform Report
Jakarta EE 9 Platform Report
 
Cloud Native Java: Present and Future at Eclipse Foundation
Cloud Native Java: Present and Future at Eclipse FoundationCloud Native Java: Present and Future at Eclipse Foundation
Cloud Native Java: Present and Future at Eclipse Foundation
 
Building 12-factor Cloud Native Microservices
Building 12-factor Cloud Native MicroservicesBuilding 12-factor Cloud Native Microservices
Building 12-factor Cloud Native Microservices
 
JakartaOne Livestream CN4J: Driving Jakarta EE Success
JakartaOne Livestream CN4J: Driving Jakarta EE SuccessJakartaOne Livestream CN4J: Driving Jakarta EE Success
JakartaOne Livestream CN4J: Driving Jakarta EE Success
 
JakartaOne Livestream CN4J: Cloud Native Runtimes - Revolution or Evolution?
JakartaOne Livestream CN4J: Cloud Native Runtimes - Revolution or Evolution?JakartaOne Livestream CN4J: Cloud Native Runtimes - Revolution or Evolution?
JakartaOne Livestream CN4J: Cloud Native Runtimes - Revolution or Evolution?
 
JakartaOne Livestream CN4J: Bringing Reactive to Enterprise Developers
JakartaOne Livestream CN4J: Bringing Reactive to Enterprise DevelopersJakartaOne Livestream CN4J: Bringing Reactive to Enterprise Developers
JakartaOne Livestream CN4J: Bringing Reactive to Enterprise Developers
 
JakartaOne Livestream CN4J: Eclipse MicroProfile - Your Cloud-Native Companion
JakartaOne Livestream CN4J: Eclipse MicroProfile - Your Cloud-Native CompanionJakartaOne Livestream CN4J: Eclipse MicroProfile - Your Cloud-Native Companion
JakartaOne Livestream CN4J: Eclipse MicroProfile - Your Cloud-Native Companion
 
Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019
Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019
Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019
 
Jakarta for dummEEs | JakartaOne Livestream
Jakarta for dummEEs | JakartaOne LivestreamJakarta for dummEEs | JakartaOne Livestream
Jakarta for dummEEs | JakartaOne Livestream
 
Jakarta EE Meets NoSQL at the Cloud Age | JakartaOne Livestream
Jakarta EE Meets NoSQL at the Cloud Age | JakartaOne LivestreamJakarta EE Meets NoSQL at the Cloud Age | JakartaOne Livestream
Jakarta EE Meets NoSQL at the Cloud Age | JakartaOne Livestream
 
Turbocharged Java with Quarkus | JakartaOne Livestream
 Turbocharged Java with Quarkus | JakartaOne Livestream Turbocharged Java with Quarkus | JakartaOne Livestream
Turbocharged Java with Quarkus | JakartaOne Livestream
 
Building Interoperable Microservices With Eclipse MicroProfile| JakartaOne Li...
Building Interoperable Microservices With Eclipse MicroProfile| JakartaOne Li...Building Interoperable Microservices With Eclipse MicroProfile| JakartaOne Li...
Building Interoperable Microservices With Eclipse MicroProfile| JakartaOne Li...
 
Jakarta RESTful Web Services: Status Quo and Roadmap | JakartaOne Livestream
Jakarta RESTful Web Services: Status Quo and Roadmap | JakartaOne LivestreamJakarta RESTful Web Services: Status Quo and Roadmap | JakartaOne Livestream
Jakarta RESTful Web Services: Status Quo and Roadmap | JakartaOne Livestream
 

Recently uploaded

Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendArshad QA
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 

Recently uploaded (20)

Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and Backend
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 

The Eclipse Transformer Project

  • 1. The Eclipse Transformer A presentation for Jakarta One 2020 Thomas Bitonti IBM Advisory Software Engineer, IBM Cloud and Cognitive Software bitonti@us.ibm.com BJ Hargrave IBM Senior Technical Staff Member, IBM Cloud and Cognitive Software hargrave@us.ibm.com 08-Dec-2020
  • 2. Group Name / DOC ID / Month XX, 2020 / © 2020 IBM Corporation 2
  • 3. The Eclipse Transformer 1. Introduction: Table of Contents The Eclipse Transformer / 08-Dec-2020 3 1. Introduction 2. Overview 3. Current Use In Open Liberty 4. Operations 5. Target Artifacts 6. Updates 7. Update Configuration 8. Development History 9. Future Directions 10.Conclusion
  • 4. The Eclipse Transformer 1. Introduction: Summary The Eclipse Transformer / 03-Dec-2020 4 The Eclipse Transformer is an Eclipse hosted open source project which provides an data driven engine that is capable of transforming several types of Java artifacts. The primary operation is to replace java package references. Supported artifact types include classes, manifests, deployment descriptors, server configurations, stand-alone or within directories and archives. The transformer was created, generally, as a shading engine, and specifically, to transform JavaEE artifacts into their Jakarta equivalents.
  • 6. The Eclipse Transformer 2. Overview The Eclipse Transformer / 08-Dec-2020 6 • Core Technical Problem • Why use the Eclipse transformer? • Who is using or might use the Eclipse Transformer?
  • 7. The Eclipse Transformer 2. Overview: Core Technical Problem The Eclipse Transformer / 08-Dec-2020 7 A core change introduced by the Jakarta specification is the replacement of existing JavaEE packages with Jakarta equivalents. For example: javax.servlet.Servlet Becomes: jakarta.servlet.Servlet Package renames occur primarily in java classes. Package renames occur secondarily in associated metadata, such as manifests and deployment descriptors.
  • 8. The Eclipse Transformer 2. Overview The Eclipse Transformer / 08-Dec-2020 8 Who is using, or may use the Eclipse Transformer? • Server developers, who wish to quickly create new implementations • Test developers, who wish to adapt existing tests to run against the Jakarta specification, using Jakarta test data • Application deployers and application developers, who wish to convert existing applications into Jakarta equivalents.
  • 9. The Eclipse Transformer 2. Overview: WildFly The Eclipse Transformer / 08-Dec-2020 9 https://www.wildfly.org/news/2020/11/12/Jakarta-EE-9-with-WildFly-Preview “The last item is the key point. When Galleon provisions a 'wildfly-preview' server by pulling jars down from maven, it knows that some artifacts were compiled against EE 8 javax.* packages. So it bytecode transforms those jars to alter references to EE 8 packages in the class file constant tables to change from javax.* to jakarta.*. The transformation goes beyond simple package renames; a number of other known differences between EE 8 and EE 9 are handled. We owe a great deal of thanks to B.J. Hargrave and the community behind the Eclipse Transformer project for their work on the underlying transformation tool”
  • 10. The Eclipse Transformer 2. Overview: tomitribe The Eclipse Transformer / 08-Dec-2020 10 https://www.tomitribe.com/blog/jakarta-ee-9-milestone-and-apache-tomee-9-0-0-m1 The Eclipse Transformer is a bytecode transformation tool originally prototyped by BJ Hargrave using BND to specialize in the javax-to-jakarta namespace change. Intended as a way to migrate applications, we’ve been stretching the limits putting it to use to transform the entire Apache TomEE server distribution from javax-to-jakarta. We’re proud to now be one of the contributors to the project with special thanks to our own Jonathan Gallimore for his contribution of a Maven Plugin and several fixes. We’re excited about the strength this codebase is showing in solving this very difficult problem.
  • 11. The Eclipse Transformer 2. Overview The Eclipse Transformer / 08-Dec-2020 11 Why use The Eclipse Transformer? The transformer quickly creates Jakarta artifacts from JavaEE artifacts, as an alternative to updating and rebuilding source files.
  • 12. Current Use In Open Liberty The Eclipse Transformer / 08-Dec-2020 12
  • 13. The Eclipse Transformer 3. Current Use In Open Liberty The Eclipse Transformer / 08-Dec-2020 13 Within Open Liberty builds, the transformer is used to update: OSGi bundle archives: • to update package references and string constants in classes; • to update package references and package version ranges in manifests; • to update the bundle identity in manifests. .
  • 14. The Eclipse Transformer 3. Current Use In Open Liberty The Eclipse Transformer / 08-Dec-2020 14 Within Open Liberty builds, the transformer is used to update: Functional Acceptance Tests (FATs): • to update test classes; • to update Open Liberty server configurations; • to update test applications.
  • 15. The Eclipse Transformer 3. Current Use In Open Liberty The Eclipse Transformer / 08-Dec-2020 15 The Open Liberty test organization used the transformer to update: Certification Tests • to update package references in test classes
  • 16. The Eclipse Transformer 3. Current Use: OSGi Bundle The Eclipse Transformer / 08-Dec-2020 16 Within Open Liberty projects which create bundle archives, a new Jakarta build step is enabled by adding a new BND directive: jakartaeeMe: true This results in the creation of a second, transformed, Jakarta version of the project’s bundle jar: com.ibm.ws.webcontainer.servlet.4.0.jar com.ibm.ws.webcontainer.servlet.4.0.jakarta.jar
  • 17. The Eclipse Transformer 3. Current Use: OSGi Bundle The Eclipse Transformer / 08-Dec-2020 17 For example, updates to an OSGI bundle manifest: Bundle-Description: WAS WebContainer 8.1 with Servlet 4.0 support Bundle-Name: WAS WebContainer Import-Package: javax.servlet;version="[2.6,3)",javax.servlet.http;ver sion="[2.6,3)",com.ibm.ejs.ras;version="[1.0,2)",com.ibm.websphere.cs i;version="[4.0,5)",com.ibm.websphere.ras;version="[1.2,2)",com.ibm.w ebsphere.servlet.request;version="[1.1,2)",com.ibm.websphere.servlet. response;version="[2.0,3)",com.ibm.websphere.servlet31.request;versio Bundle-Description: WAS WebContainer 8.1 with Servlet 4.0 support; Jak arta Enabled Bundle-Name: WAS WebContainer Jakarta Import-Package: jakarta.servlet;version="[5.0,6)",jakarta.servlet.http ;version="[5.0,6)",com.ibm.ejs.ras;version="[1.0,2)",com.ibm.webspher e.csi;version="[4.0,5)",com.ibm.websphere.ras;version="[1.2,2)",com.i bm.websphere.servlet.request;version="[1.1,2)",com.ibm.websphere.serv let.response;version="[2.0,3)",com.ibm.websphere.servlet31.request;ve
  • 18. The Eclipse Transformer 3. Current Use: OSGi Bundle The Eclipse Transformer / 08-Dec-2020 18 For example, updates to web.xml: <resource-ref> <res-ref-name>jndi_JMS_BASE_QCF</res-ref-name> <res-type>javax.jms.QueueConnectionFactory</res-type> <lookup-name>jndi_JMS_BASE_QCF</lookup-name> </resource-ref> <resource-ref> <res-ref-name>jndi_JMS_BASE_QCF1</res-ref-name> <res-type>javax.jms.QueueConnectionFactory</res-type> <lookup-name>jndi_JMS_BASE_QCF1</lookup-name> </resource-ref> <resource-ref> <res-ref-name>jndi_JMS_BASE_QCF</res-ref-name> <res-type>jakarta.jms.QueueConnectionFactory</res-type> <lookup-name>jndi_JMS_BASE_QCF</lookup-name> </resource-ref> <resource-ref> <res-ref-name>jndi_JMS_BASE_QCF1</res-ref-name> <res-type>jakarta.jms.QueueConnectionFactory</res-type> <lookup-name>jndi_JMS_BASE_QCF1</lookup-name> </resource-ref>
  • 19. The Eclipse Transformer 3. Current Use: Server Configuration The Eclipse Transformer / 08-Dec-2020 19 Running Feature Acceptance Tests, Open Liberty server configurations may be updated: <jmsActivationSpec id="jmsapp/jmsmdb/MDB"> <properties.wasJms destinationRef="eis/topic" destinationType="javax.jms.Topic" clientId="cid1" subscriptionName="SID1"/> </jmsActivationSpec> <jmsActivationSpec id="jmsapp/jmsmdb/MDB"> <properties.wasJms destinationRef="eis/topic" destinationType="jakarta.jms.Topic" clientId="cid1" subscriptionName="SID1"/> </jmsActivationSpec>
  • 21. The Eclipse Transformer 4. Operations The Eclipse Transformer / 08-Dec-2020 21 • The transformer operates on input artifact using specified rules data, and creates a transformed copy of that artifact as output. • Transformation begins with a input root artifact, which may be a directory, an archive, or a single artifact such as a class file. • When updating a directory, the transformer walks the directory tree, transforming all nested files and directories. • When updating an archive, the transformer iterates across that archive, transforming all enclosed archive entries, including nested archives.
  • 22. The Eclipse Transformer 4. Operations The Eclipse Transformer / 08-Dec-2020 22 • Particular artifacts, such as classes, manifests, and deployment descriptors, are matched to implementation actions. Each implementation action is responsible for transforming one type of artifact. A artifact which matches no action is simply copied, unchanged. • An action may update none, either, or both, of the name of a target artifact, or the contents of a target artifact. • After transforming a artifact, an action reports a summary of what changes were made. This summary information is collected by the transformer and put into a report at the conclusion of processing.
  • 23. The Eclipse Transformer 4. Operations: Command Line The Eclipse Transformer / 08-Dec-2020 23 For example, an invocation from the command line might look as follows: $ java -cp /c/sample/libs/apiguardian-api-1.1.0.jar:/c/sample/libs/assertj-core-3.14.0.jar:/c/sample/libs/biz.aQute.bndlib- 4.3.1.jar:/c/sample/libs/commons-cli-1.4.jar:/c/sample/libs/slf4j-api-1.7.29.jar:/c/sample/libs/slf4j-simple- 1.7.29.jar:/c/sample/libs/transformer.jar com.ibm.ws.jakarta.transformer.JakartaTransformer /c/sample/data/test.jar /c/sample/data/test.jakarta.jar
  • 24. The Eclipse Transformer 4. Operations: Command Line The Eclipse Transformer / 08-Dec-2020 24 With output as follows: Logger name [ Transformer ] (Defaulted) Log file [ null ] [main] INFO Transformer - Input [ C:/sample/data/test.jar ] [main] INFO Transformer - [ C:sampledatatest.jar ] [main] INFO Transformer - Output [ C:/sample/data/test.jakarta.jar ] (Explicit) [main] INFO Transformer - [ C:sampledatatest.jakarta.jar ]
  • 25. The Eclipse Transformer 4. Operations: Command Line The Eclipse Transformer / 08-Dec-2020 25 [main] INFO Transformer - Skipping option [ RULES_SELECTIONS ] [main] INFO Transformer - Internal [ RULES_RENAMES ] URL [ jar:file:/C:/sample/libs/transformer.jar!/com/ibm/ws/jakarta/transformer/jakarta-renames.properties ] [main] INFO Transformer - Internal [ RULES_VERSIONS ] URL [ jar:file:/C:/sample/libs/transformer.jar!/com/ibm/ws/jakarta/transformer/jakarta-versions.properties ] [main] INFO Transformer - Internal [ RULES_BUNDLES ] URL [ jar:file:/C:/sample/libs/transformer.jar!/com/ibm/ws/jakarta/transformer/jakarta-bundles.properties ] [main] INFO Transformer - Internal [ RULES_DIRECT ] URL [ jar:file:/C:/sample/libs/transformer.jar!/com/ibm/ws/jakarta/transformer/jakarta-direct.properties ] [main] INFO Transformer - Internal [ RULES_MASTER_XML ] URL [ jar:file:/C:/dev/jakarta-repo- pub/sample/libs/transformer.jar!/com/ibm/ws/jakarta/transformer/jakarta-xml.properties ] [main] INFO Transformer - All resources will be selected [main] INFO Transformer - Package renames are in use [main] INFO Transformer - Package versions will be updated [main] INFO Transformer - Bundle identities will be updated
  • 26. The Eclipse Transformer 4. Operations: Command Line The Eclipse Transformer / 08-Dec-2020 26 [main] INFO Transformer - Internal [ Substitions matching [ server.xml ] ] URL [ jar:file:/C:/sample/libs/transformer.jar!/com/ibm/ws/jakarta/transformer/jakarta-xml-server.properties ] [main] INFO Transformer - Internal [ Substitions matching [ *.xml ] ] URL [ jar:file:/C:/sample/libs/transformer.jar!/com/ibm/ws/jakarta/transformer/jakarta-xml-all.properties ] [main] INFO Transformer - Internal [ Substitions matching [ web.xml ] ] URL [ jar:file:/C:/sample/libs/transformer.jar!/com/ibm/ws/jakarta/transformer/jakarta-xml-web.properties ] [main] INFO Transformer - XML files will be updated [main] INFO Transformer - Java direct string updates will not be performed
  • 27. The Eclipse Transformer 4. Operations: Command Line The Eclipse Transformer / 08-Dec-2020 27 [main] INFO Transformer - Action selected for input [ C:/sample/data/test.jar ]: Jar Action [main] INFO Transformer - Input [ C:sampledatatest.jar ] as [ C:sampledatatest.jakarta.jar ]: Changed [main] INFO Transformer - [ All Resources ] [ 57 ] Unselected [ 0 ] Selected [ 57 ] [main] INFO Transformer - [ All Actions ] [ 57 ] Unchanged [ 51 ] Changed [ 6 ]
  • 29. The Eclipse Transformer 5. Target Artifacts: Artifact Types The Eclipse Transformer / 08-Dec-2020 29 The transformer updates several types of artifacts: • Java class files • Manifest files (META-INF/MANIFEST.MF) • Service Loader Configuration files (META-INF/services). • Text-like files (XML and others) Text-like file updates include primarily XML files: • Deployment descriptors (web.xml, ejb-jar.xml, and others) • Open Liberty server configuration files (server.xml)
  • 30. The Eclipse Transformer 5. Target Artifacts: Archives The Eclipse Transformer / 08-Dec-2020 30 The transformer updates several types of archives: • Java Archives (JAR files, including EJB and CLIENT JAR files) • Web Application Archives (WAR files) • Resource Adapter Archives (RAR files) • Enterprise Application Archives (EAR files) • ZIP type archives (ZIP files)
  • 32. The Eclipse Transformer 6. Updates The Eclipse Transformer / 08-Dec-2020 32 The transformer updates to: • Package references • OSGi manifest attributes relating to bundle identity and package version • Java constants • String substitutions When updating package references, all references are located and updated. This includes direct references, for example, the reference which occurs when creating new instances. This also includes references which appear more indirectly, for example, package references which occur within field and method descriptors.
  • 33. The Eclipse Transformer 6. Updates: OSGi Bundle Identity The Eclipse Transformer / 08-Dec-2020 33 OSGI bundle identity updates are to these manifest main attributes: • Bundle-Description • Bundle-Name • Bundle-SymbolicName • Bundle-Version
  • 35. The Eclipse Transformer 7. Update Configuration: Rules Data The Eclipse Transformer / 08-Dec-2020 35 The particular updates which are made is controlled by a set of rules data files. This data files are properties files. Most typically, rules properties are specified as key/value pairs mapping initial value to a final value. For example, for a package replacement: javax.servlet=jakarta.servlet For a java string constant replacement: javax.servlet.async.context_path=jakarta.servlet.async.context_path
  • 36. The Eclipse Transformer 7. Update Configuration: Text Updates The Eclipse Transformer / 08-Dec-2020 36 For text-like updates, two tiers of properties files are used. The first tier is a master file which maps file names to specific properties files which contain updates for the named files. The second tier provides specific text substitutions which are to be made to specific, mapped files.
  • 37. The Eclipse Transformer 7. Update Configuration: XML Updates The Eclipse Transformer / 08-Dec-2020 37 For example, the several deployment descriptor XML files use one properties file: application.xml=jakarta-xml-dd.properties application-client.xml=jakarta-xml-dd.properties ejb-jar.xml=jakarta-xml-dd.properties permissions.xml=jakarta-xml-dd.properties ra.xml=jakarta-xml-dd.properties validation.xml=jakarta-xml-dd.properties web.xml=jakarta-xml-dd.properties web-fragment.xml=jakarta-xml-dd.properties
  • 38. The Eclipse Transformer 7. Update Configuration: XML Updates The Eclipse Transformer / 08-Dec-2020 38 The second tier "jakarta-xml-dd.properties" contains text substitutions which are to be made to descriptor files: javax.ejb.EJBContext=jakarta.ejb.EJBContext javax.ejb.MessageDrivenContext=jakarta.ejb.MessageDrivenContext javax.ejb.Timer=jakarta.ejb.Timer javax.ejb.TimerService=jakarta.ejb.TimerService ... lines omitted javax.jms.ConnectionFactory=jakarta.jms.ConnectionFactory javax.jms.Destination=jakarta.jms.Destination javax.jms.MessageListener=jakarta.jms.MessageListener javax.jms.Queue=jakarta.jms.Queue ... lines omitted
  • 40. The Eclipse Transformer 8. Development History The Eclipse Transformer / 08-Dec-2020 40 • Inception • Incubation • Release
  • 41. The Eclipse Transformer 8. Development History: Inception The Eclipse Transformer / 08-Dec-2020 41 The Eclipse Transformer began by bringing together the insights of Alasdair Nottingham and BJ Hargrave: Alasdair Nottingham, as the Open Liberty Chief Architect, conceived of an engine which could quickly and efficiently transform existing Open Liberty artifacts which supported JavaEE into their Jakarta equivalents. BJ Hargrave, IBM Senior Technical Staff Member, created a prototype which, using the BNDLIB library, replaced package references in java .classes. The prototype was quickly updated to handle additional JavaEE aftifacts, such as manifests and deployment descriptors.
  • 42. The Eclipse Transformer 8. Development History: Incubation The Eclipse Transformer / 08-Dec-2020 42 The prototype transformer was adopted as a static transformer for use within Open Liberty builds by Thomas Bitonti and the Open Liberty Web Container and Kernel teams. The transformation engine was iteratively extended using agile methodologies to handle Open Liberty artifacts as identified by the development team. Following the successful use in transforming core Web Profile artifacts, the transformer was adopted as a part of the Open Liberty strategy for delivering Jakarta.
  • 43. The Eclipse Transformer 8. Development History: Release The Eclipse Transformer / 08-Dec-2020 43 The transformer was accepted as Eclipse hosted open source project The Eclipse Transformer. Subsequently, the privately hosted project was migrated to a public Eclipse hosted GIT repository. The Eclipse Transformer is now available for use by the Java, JavaEE, and Jakarta communities as a tool for class shading, and specifically, as an engine for transforming JavaEE artifacts to their Jakarta equivalent.
  • 45. The Eclipse Transformer 9. Future Directions The Eclipse Transformer / 08-Dec-2020 45 The initial focus of the Eclipse Transformer has been to provide a tool for application server development teams. Moving forward, the focus is expected to shift to application developers, primarily as a way of quickly creating Jakarta versions of existing JavaEE applications. The focus of project work is expected to follow this shift.
  • 46. The Eclipse Transformer 9. Future Directions The Eclipse Transformer / 08-Dec-2020 46 The Eclipse Transformer currently performs very specific operations which are intended to support transformation of JavaEE artifacts into the equivalent Jakarta artifacts. Other uses which only require package replacement can be performed by selecting a different rules data set when invoking the transformer. The embedded action framework, which maps artifacts to transformation implementation classes, may easily be extended to support other types of artifacts.
  • 47. The Eclipse Transformer 9. Future Directions The Eclipse Transformer / 08-Dec-2020 47 Current action implementations can be updated to perform updates in addition to package replacements. In particular, the class action implementation already does the heavy lifting of parsing a class and walking the resulting object hierarchy to discover update points. The class action implementation may be extended to perform other updates, for example, by injecting a call to a helper method on each invocation to Class.forName. The helper method would dynamically changed the class name parameter with a transformed class name.
  • 49. The Eclipse Transformer 10. Conclusion: Links The Eclipse Transformer / 08-Dec-2020 49 The Apache License, Version 2.0 is available at: http://www.apache.org/licenses The Eclipse Transformer project is hosted by the Eclipse Foundation: https://projects.eclipse.org/projects/technology.transformer The Eclipse Transformer is hosted as an Eclipse GitHub repository: https://github.com/eclipse/transformer Snapshot artifacts are released to the Sonatype OSS repository. See: https://oss.sonatype.org/content/repositories/snapshots
  • 50. The Eclipse Transformer 10. Conclusion: Links The Eclipse Transformer / 08-Dec-2020 50 Eclipse Transformer project documentation is available at: • https://github.com/eclipse/transformer/blob/main/README.md • https://github.com/eclipse/transformer/blob/main/CONTRIBUTING.md • https://github.com/eclipse/transformer/blob/main/DEV.md • https://github.com/eclipse/transformer/blob/main/INFRA.md • https://github.com/eclipse/transformer/blob/main/RULES.md
  • 51. The Eclipse Transformer 10. Conclusion: Links The Eclipse Transformer / 08-Dec-2020 51 Core class transformation steps are provided by the classes: • https://github.com/eclipse/transformer/blob/main/org.eclipse.transformer/src/ main/java/org/eclipse/transformer/action/impl/ClassActionImpl.java • https://github.com/eclipse/transformer/blob/main/org.eclipse.transformer/src/ main/java/org/eclipse/transformer/action/impl/SignatureRuleImpl.java For a prominent use of transformer by IBM WebSphere Open Liberty see: • https://github.com/OpenLiberty/open-liberty/blob/integration/dev/wlp- jakartaee-transform
  • 52. The Eclipse Transformer 10. Conclusion: Links The Eclipse Transformer / 08-Dec-2020 52 Copies of rules data are available at: • https://github.com/eclipse/transformer/tree/main/org.eclipse.transformer.cli/ src/main/resources/org/eclipse/transformer/jakarta Current Open Liberty rules data are available at: • https://github.com/OpenLiberty/open-liberty/tree/integration/dev/wlp- jakartaee-transform/rules For the gradle task 'jakartaeeTransform' which is used to invoke the transformer within Open Liberty builds, see: • https://github.com/OpenLiberty/open-liberty/blob/integration/dev/wlp- gradle/subprojects/tasks.gradle
  • 53. The Eclipse Transformer 10. Conclusion: Links The Eclipse Transformer / 08-Dec-2020 53 A tomitribe blog posting which notes their use of the Eclipse Transformer: https://www.tomitribe.com/blog/jakarta-ee-9-milestone-and-apache-tomee-9-0-0-m1 A WildFly news posting which notes their use of the Eclipse Transformer: https://www.wildfly.org/news/2020/11/12/Jakarta-EE-9-with-WildFly-Preview
  • 54. The Eclipse Transformer 11. Conclusion: Links The Eclipse Transformer / 08-Dec-2020 54 BndLib, which is used to perform class updates, is available at: • https://bndtools.org In particular, see: • https://github.com/bndtools/bnd • https://github.com/bndtools/bnd/blob/master/biz.aQute.bndlib/src/aQute/bnd/cl assfile/ClassFile.java • https://github.com/bndtools/bnd/blob/master/biz.aQute.bndlib/src/aQute/bnd/cl assfile/builder/ModuleInfoBuilder.java
  • 55. The Eclipse Transformer 11. Conclusion: Links The Eclipse Transformer / 08-Dec-2020 55 Alternatively, class updates can be implemented using ObjectWorks ASM framework: • https://asm.ow2.io Service loader configuration files are documented at: • https://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html
  • 56. The Eclipse Transformer 11. Conclusion: Thanks! The Eclipse Transformer / 08-Dec-2020 56 With thanks and appreciation: • To IBM, for supporting this project • To Alasdair Nottingham, for the initial insight; • To BJ Hargrave, for the initial prototype; • To IBM Open Liberty developers, for helping the project grow; • To the Eclipse organization, for providing a home for the project. • And most of all to the audience, for their patient participation. Thomas Bitonti IBM Advisory Software Engineer BJ Hargrave, IBM Senior Technical Staff member, 08-Dec-2020
  • 57. The Eclipse Transformer 11. Conclusion: Licenses The Eclipse Transformer / 08-Dec-2020 57 This presentation and related materials are available under the terms of the Creative Commons Attribution 4.0 International License. The Eclipse Transformer is available under the terms of the Apache License, Version 2.0, or the Eclipse Public License 2.0.
  • 58. Q&A The Eclipse Transformer / 08-Dec-2020 58

Editor's Notes

  1. (15 min before presentation follow presentation link) Hello! I am Thomas Bitonti. Together with BJ Hargrave, I’d like to welcome you to this presentation, which is all about the Eclipse Transformer.
  2. Both BJ Hargrave and I have extensive experience as software developers at IBM, and are the co-authors of the Eclipse Transformer.
  3. This presentation provides an overview of the Eclipse Transformer, telling what problem the transformer solves, and for whom. The presentation provides details and examples of the updates which are made by the transformer, and shows how those updates are configured. The presentation provides a brief history of the development of the transformer, and notes how the transformer may be extended for additional use. This presentation concludes with several useful links, including links to the transformer itself and including links to the most recent rules data which is used for JavaEE to Jakarta transformations.
  4. The Eclipse Transformer is an Eclipse hosted open source project which provides a tool for performing class and JAR shading, and which, by performing package replacement, may be used to transform existing JavaEE classes and archives into JakartaEE compatible equivalents. Two comprehensive capabilities which are provided are the transformation of OSGi bundle archives and the transformation entire JavaEE applications.
  5. (Pause)
  6. (Pause)
  7. A core problem facing developers who are working within the Jakarta space is to replace JavaEE package references with Jakarta package references. This core problem occurs with many types of JavaEE artifacts, starting with java classes, and quickly extending to other artifacts, such as manifests, deployment descriptors, and server configurations, and extending to standard JavaEE archives. The core problem is seen when the goal is to create new Jakarta artifacts starting with JavaEE artifacts. (next)
  8. The need to create Jakarta artifacts is problem for a variety of developers – server developers, test developers, and application developers.
  9. Initial use has been by the Open Liberty, WildFly, and tomitribe, whose development organizations have used the transformer to add Jakarta support to their existing JavaEE offerings.
  10. Looking forward, the predominant usage is envisioned to be first, the creation of Jakarta versions of existing JavaEE applications, and second, the assembly of new Jakarta applications from existing JavaEE components with new Jakarta components. Already, as noted in other LiveStream presentation, Payara uses the transformer to dynamically transform artifacts during application deployment.
  11. The value statement of the Eclipse Transformer is that it enables the rapid creation of Jakarta artifacts from existing JavaEE artifacts. When using the transformer, existing JavaEE artifacts need not be updated at the source level and rebuilt. Instead, new Jakarta artifacts in a single step from existing JavaEE artifacts. The Eclipse Transformer is a nut-and-bolts tool, designed to solve a practical but widespread problem. Our goal is that the transformer will assist developers to more seamlessly create new Jakarta artifacts, and to support the more widespread use of Jakarta.
  12. This section describes how the transformer is being used within Open-Liberty builds.
  13. The Eclipse Transformer is currently being used within Open Liberty builds, and has been used by the Open Liberty test organization. Within Open Liberty, the transformer has been used for several purposes. These are to update OSGi bundle archives, to enable existing Functional Acceptance Tests to run in Jakarta mode, and to convert certification tests to run in Jakarta mode. Complete transformations require updates in addition to package replacements. When updating OSGi metadata, package versions may also need to be updated.
  14. Open liberty uses the transformer to enable running existing Functional Acceptance Tests in Jakarta mode. That is, repeating the existing tests with several test artifacts updated to their Jakarta equivalent. One of the test steps is to replace JavaEE features with the corresponding Jakarta features. This step is done outside of the transformer as a custom build step. Other test steps are to transform key test artifacts using the transformer. Test classes, test applications, server configurations used by the tests, are all transformed. Package references pervade several types of artifacts, and can occur in unexpected places. For example, JMS properties in activation specification elements of Open Liberty server configurations contain JMS class references, which imbed a JMS package reference, which must be transformed when running Open Liberty using Jakarta features.
  15. The transformer was used to jump start certification testing: The transformer was used to transform JavaEE certification tests into Jakarta equivalents as an initial measure until the actual Jakarta certification tests were available.
  16. Within Open Liberty, the Eclipse Transformer was added as an optional step for building OSGi bundle archives. The step was enabled by a new BND directive, “jakartaeeME”. Having added the directive to a project BND file, and having updated rules data with any necessary new package replacement data, the build automatically creates a second Jakarta version of the existing bundle archive for the project.
  17. Here are several examples of the updates which are made to metadata. The first example is an update to a bundle manifest, which includes OSGi metadata. Note that updates are made to package names and to package version ranges.
  18. This second example is a typical update made to a deployment descriptor. The example shows updates to resource references within a web module deployment descriptor.
  19. This third example is an update to an Open Liberty server configuration, which requires an update to the properties of JMS activation specifications, which contain JMS class names. This transformation is performed when repeating Feature Acceptance Tests in Jakarta mode.
  20. This next section provides a very brief overview of how the Eclipse Transformer works.
  21. The transformer operates by recursively walking a target archive, directory, or file, copying and transforming all artifacts which are encountered.
  22. Transformations are performed by an action framework. Action implementation classes are implicitly mapped to artifact types. For example, there is an action for java classes, an action for manifests, and an action for text files. The action framework selects a single action class for each artifact. A null action class is selected when no updates are to be made to a particular artifact. The action may update the name of the artifact and may update the contents of the artifact. The action finishes by summarizing what changes were made by the action, and the action framework collects and prints a report containing these summaries at the conclusion of processing.
  23. The transformer may be invoked from the command line. This example shows the use of the JakartaTransformer helper class. The JakartaTransformer helper class uses prepackaged Jakarta rules property files to perform transformations. Alternatively, the Transformer class may be used directly, in which case rules property files must be specified using command line arguments.
  24. Processing proceeds from inputs …
  25. Through processing of rules data. In this example, default rules data, which is prepackaged with the transformer, is used.
  26. (pause)
  27. The target JAR file is transformed. Finally, a summary report is displayed. This examples shows that 57 artifacts were processed, of which, 6 were updated by the transformer.
  28. (Pause)
  29. The transformer is capable of updating several types of artifacts. Most prominent are java classes. Other notable types are manifests, service loader configuration files, and text-like files, including XML files. XML files include deployment descriptors and Open Liberty server configurations.
  30. The transformer updates several types of archives. Archives are processed recursively. When transforming archives, the transformer is aware of the structure of the archive. Knowledge of archive structure is necessary for certain transformations, for example, transformations of service loader configuration files.
  31. This section describes the specific updates which are made by the transformer.
  32. The transformer performs several type of updates, in addition to updates to package references. When transforming a manifest, OSGi attributes which relate to bundle identity may be updated. That update is made to assign a new identity to the output bundle archive, which is necessary to distinguish the new, transformed, bundle archive from the original bundle archive. When transforming a manifest, OSGi attributes which contain package references may have new package version ranges assigned when updating the package references. Rules data may be specified to perform exact replacement of java string constants, independent and in addition to package updates. Text-like files may be updated using simple text replacement.
  33. (pause)
  34. (pause)
  35. What updates are performed are configured through a set of property files. Most property files encode substitutions as initial-value – final-value pairs. Here are two examples. When invoking the transformer, what property files are used is specified using command line arguments, or are provided as pre-packaged resources, which is the case for invocations which use the helper class, JakartaTransformer. A set of Jakarta specific properties files is available within the transformer project. Jakarta specific property files may also be obtained from the Open Liberty GIT repository. Links to current Jakarta specific property files are provided at the end of this presentation.
  36. Text substitutions are an important special case. Text substitutions use two tiers of property files. The first tier of property files map file patterns (which may be simple file names) to second tier property files. Second tier property files contain actual initial-final substitution pairs. The use of two tiers of property files enables the grouping of rule data which have common use, and enables the selection of rule data for use by specific files.
  37. For example, within the prepackaged Jakarta rules data, a single property file was created for deployment descriptor updates. The several deployment descriptor file types were mapped by simple name to the common deployment descriptor rules property file.
  38. For robustness, text substitutions have been specified using fully qualified class names. While verbose, this minimizes the likelihood of incorrect substitutions. There is at least one case of a Jakarta package replacement for which the sub-package is not replaced.
  39. (Pause)
  40. The development of the Eclipse Transformer, from inception through incubation, to release as an Eclipse hosted project, involved several IBM developers, and spanned much of 2020. That span saw the inception and proof of concept prototyping, saw an incubation period during which the prototype was extended and vetted through concrete use, and saw the eventual release of the transformer as a new Eclipse hosted open source project.
  41. Inception was by Alasdair Nottingham and BJ Hargrave, who together noted the core technical problem; who conceived of the transformer as a way of quickly creating Jakarta artifacts from existing JavaEE artifacts; and who created the initial prototype transformer.
  42. Subsequently, a team was formed of IBM Open Liberty developers, who used the transformer to transform Open Liberty artifacts. Web Profile features were selected as the first set of features which were to be transformed. The transformer was iteratively and quickly extended, using agile methodologies, to incorporate capabilities necessary to fully transform Web Profile artifacts. After the transformer was shown to successfully transform Web Profile features, the transformer was adopted as a part of the strategy for adding Jakarta support to the entirety of Open Liberty.
  43. Finally, the transformer, which had been incubating in a private repository, was accepted as an Eclipse hosted open source project, and was migrated to a public repository.
  44. (Pause)
  45. The initial focus of the transformer was to provide a tool for application server development teams. The focus is expected to shift to usage by application developers. For example, to transform existing JavaEE applications, and to assist in assembling new Jakarta applications by combining existing JavaEE components with new Jakarta components.
  46. Being rules driven, the transformer may be used to perform package replacements other than the JavaEE to Jakarta replacements which are provided by prepackaged properties files. One such application is to invert the JavaEE to Jakarta transformation. The embedded action framework may be extended to handle additional file types by adding new action implementations for new file types.
  47. The current class action implementation performs simple substitutions. The implementation may be extended to perform additional types of updates, for example, code injection, or, non-string constant replacement.
  48. (pause)
  49. For more information about the Eclipse Transformer, or about the technologies used by the transformer, see these links.
  50. In particular, two sets of rules data are available within public GIT repositories.
  51. In conclusion, I would like to thank the many people who made the Eclipse Transformer possible, and for the audience for their patient participation.
  52. (Pause)
  53. The remaining time is allocated to questions and answers.