We are getting class loading errors when deploying openfire with jakarta, jetty 12 and java 17 since xmpp-server-5.0.x.jar includes several javax.servlet.* imports*.
*
They are at: xmppserver-5.0.x/org/apache/jsp/tag/meta/admin/admin/*
That is most likely expected behavior. Openfire is bundled with Jetty 12 EE8, which maintains compatibility with javax.servlet instead of Jakarta. This effort was documented in Jira
OK, we were under the impression 5.0.x was EE10 compatible.
Note the javax.servlet references are only found under /org/apache/jsp/tag/meta/admin/admin/ so should be very straightforward to create a -jakarta-.x.x.x.jar.
We will for now run it over the eclipse jakarta transformer since openfire’s javax.servlet references now create havoc on a sipXecs java17 / ee10 / jakarta / jetty / spring upgrade.
If of interest we ran the eclipse jakarta transformer on xmppserver-5.0.1.jar with the following output:
xmppserver % java -cp “./*” org.eclipse.transformer.cli.JakartaTransformerCLI xmppserver-5.0.1.jar xmppserver-5.0.1-jakarta.jar
Copyright (c) Contributors to the Eclipse Foundation
org.eclipse.transformer.cli.JakartaTransformerCLI Version [ 1.0.0 ]
[main] INFO Transformer - console Input [ /xmppserver/xmppserver-5.0.1.jar ]
[main] INFO Transformer - console Output [ /xmppserver/xmppserver-5.0.1-jakarta.jar ]
[main] INFO Transformer - console Properties [ RULES_SELECTIONS ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-selection.properties ]
[main] INFO Transformer - console Properties [ RULES_RENAMES ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-renames.properties ]
[main] INFO Transformer - console Properties [ RULES_VERSIONS ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-versions.properties ]
[main] INFO Transformer - console Properties [ RULES_BUNDLES ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-bundles.properties ]
[main] INFO Transformer - console Properties [ RULES_DIRECT ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-direct.properties ]
[main] INFO Transformer - console Properties [ RULES_MASTER_TEXT ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-text-master.properties ]
[main] INFO Transformer - console Package renames are in use
[main] INFO Transformer - console Package versions will be updated
[main] INFO Transformer - console Bundle identities will be updated
[main] INFO Transformer - console Properties [ Substitutions matching [ orm.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-persistence-orm-xml.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ orm.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-direct.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ orm.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-renames.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ application-client.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-application-xml.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ application-client.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-direct.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ application-client.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-renames.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ persistence.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-persistence-xml.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ persistence.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-direct.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ persistence.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-renames.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ web.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-web-xml.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ web.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-direct.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ web.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-renames.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ beans.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-beans-xml.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ beans.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-direct.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ beans.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-renames.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ *.faces-config.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-faces-config-xml.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ *.faces-config.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-direct.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ *.faces-config.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-renames.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ *.taglib.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-renames.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ application.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-application-xml.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ application.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-direct.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ application.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-renames.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ *.tld ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-direct.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ *.tld ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-renames.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ ra.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-ra-xml.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ ra.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-direct.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ ra.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-renames.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ *.tag ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-direct.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ *.tag ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-renames.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ faces-config.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-faces-config-xml.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ faces-config.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-direct.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ faces-config.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-renames.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ ejb-jar.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-ejb-jar-xml.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ ejb-jar.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-direct.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ ejb-jar.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-renames.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ web-fragment.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-web-xml.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ web-fragment.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-direct.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ web-fragment.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-renames.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ permissions.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-permissions-xml.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ permissions.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-direct.properties ]
[main] INFO Transformer - console Properties [ Substitutions matching [ permissions.xml ] ] URL [ jar:file:/xmppserver/org.eclipse.transformer.jakarta-1.0.0.jar!/org/eclipse/transformer/jakarta/jakarta-renames.properties ]
[main] INFO Transformer - console Text files will be updated
[main] INFO Transformer - console Java direct string updates will be performed
[main] INFO Transformer - console All resources will be selected
[main] INFO Transformer - console Action selected for input [ xmppserver-5.0.1.jar ]: Jar Action
[main] INFO Transformer - Stop processing [ xmppserver-5.0.1.jar ] using [ Jar Action ] took [ 6491ms ]: Name and content changes
[main] INFO Transformer - console Input [ xmppserver-5.0.1.jar ] as [ /xmppserver/xmppserver-5.0.1.jar ]
[main] INFO Transformer - console Output [ xmppserver-5.0.1-jakarta.jar ] as [ /xmppserver/xmppserver-5.0.1-jakarta.jar ] took [ 00:00:06 ]
[main] INFO Transformer - console [ All Resources ] [ 1410 ] Unaccepted [ 0 ] Accepted [ 1410 ]
[main] INFO Transformer - console [ All Unchanged ] [ 944 ] Failed [ 0 ] Duplicated [ 0 ]
[main] INFO Transformer - console [ All Changed ] [ 466 ] Renamed [ 0 ] Content [ 466 ]
[main] INFO Transformer - console Transformer Return Code [ 0 ] [ Success ]
-rw-r–r-- 4816768 Sep 23 12:30 xmppserver-5.0.1-jakarta.jar
-rw-r–r-- 4745392 Sep 23 11:45 xmppserver-5.0.1.jar
The following dependencies were required:
-rw-r–r-- 437547 Sep 23 12:27 biz.aQute.bnd.transform-7.0.0.jar
-rw-r–r-- 441767 Sep 23 12:29 biz.aQute.bnd.util-7.0.0.jar
-rw-r–r-- 3237760 Sep 23 12:21 biz.aQute.bndlib-7.0.0.jar
-rw-r–r-- 108170 Sep 23 12:13 commons-cli-1.10.0.jar
-rw-r–r-- 163122 Sep 23 12:12 org.eclipse.transformer-1.0.0.jar
-rw-r–r-- 30205 Sep 23 12:11 org.eclipse.transformer.cli-1.0.0.jar
-rw-r–r-- 29715 Sep 23 12:12 org.eclipse.transformer.jakarta-1.0.0.jar
-rw-r–r-- 69908 Sep 23 12:15 slf4j-api-2.0.17.jar
-rw-r–r-- 15716 Sep 23 12:13 slf4j-simple-2.0.17.jar
At this point, we’re not considering a migration to Jakarta. This is likely to affect an unacceptable amount of third-party code, against little benefit.
You are right to question the benefit of this namespace change, as it indeed creates dependency hell for larger projects such as ours. But it is a chain, and in order to stay on top of upgrades to e.g. spring 6 and a range of other common java dependencies jakarta support is no longer an option if you want to stay relevant or even usable.
There’s no doubt that moving to Jakarta namespaces can be useful, particularly for larger commercial organisations that gain real value from tighter alignment with specific enterprise-type frameworks. For projects like ours, however, the picture is very different.
We maintain around 70 Openfire plugins, all of which are currently working just fine. None of them are being held back by the lack of Jakarta support. To migrate, we would need to review and update every plugin, which is a massive amount of work. And importantly, this effort doesn’t actually add new functionality - it’s just a lot of investment for things to keep working as they already do. This doesn’t even account for dealing with third-party plugins.
We’re not against the idea of migrating to Jakarta in principle. But right now, the costs significantly outweigh the benefits - especially when those costs are being carried by unpaid volunteers. If Jakarta support is truly critical for organisations that stand to benefit from it, then perhaps those organisations could help fund or resource the migration effort. That way, the people who gain the most from the change also share in making it possible.
You are to some extent preaching to the choir here, albeit we didn’t find any other way around it than to upgrade to jakarta everywhere. sipXecs, that we maintain, is a large open source project that embeds openfire, and yes, we have had to port all our openfire plugins as well.
There is generally undoubtedly a certain lack for respect for historic developer contracts in the java ecosystem that to some degree derails it. The amount of work to get something to just work just like it previously did with meaningless namespace changes such as these are frankly ridiculous. I.e. fully understand where you are coming from, but unfortunately you have to expect your 3rd party developers will all be forced to change to jakarta sooner rather than later.