There are imo 3 ways we can deal with the migration. All of them assume that 
all of our ASF projects migrate the affected packages from javax.* to jakarta.*.

A.) of course have all the customer code and libs migrated to jakarta.*.

B.) ClassTransformer + ClassLoader. The ClassTransformer transforms all usage 
of affected packages from javax.* to jakarta.*. when the classes get loaded. 
The ClassLoader redirects any META-INF/services/javax.* java.util.ServiceLoader 
files and serves them as META-INF/services/jakarta.*

C.) pretty much like B.) but as Apache Maven plugin at build time. It could 
provide the auto-migrated parts as attached artifact.

Btw, I've done plenty of test migration a year ago already
http://svn.apache.org/repos/asf/geronimo/specs/branches/jakarta/
https://github.com/struberg/tomcat/tree/jakarta
https://github.com/struberg/openwebbeans/tree/jakarta

LieGrue,
strub


> Am 25.12.2019 um 09:26 schrieb Romain Manni-Bucau <rmannibu...@gmail.com>:
> 
> I see a lot of value to the runtime solution cause it is the only one 
> enabling an ops only migration so for all the softwares in "run only" phase 
> it is the only option. However the agent or transformer is the least invasive 
> solution cause it does not require to patch core libs and will avoid app 
> dependencies conflicts/issues (assuming asm is already there as in 
> tomee/meecrowave or shaded with relocation).
> 
> Just my 2 cts
> 
> Le mer. 25 déc. 2019 à 04:47, Adam Rauch <a...@labkey.com> a écrit :
> 
> On 12/21/2019 11:49 AM, Mark Thomas wrote:
> > On 21/12/2019 17:45, Adam Rauch wrote:
> >
> > <snip/>
> >
> >> Yes, I see that 9.x javax.* will be supported for a long time and I'm
> >> all in favor of killing off deprecated EE libraries. I want to encourage
> >> our users to migrate to Tomcat 10.x and future releases as quickly as
> >> possible, but I'm concerned that 9.x to 10.x will be a very difficult
> >> transition for those who deploy webapps like the one we develop. With
> >> the current plan, I don't see a scenario where our users can upgrade to
> >> the next release of Tomcat, test that change, and then upgrade our
> >> webapp. Because of the package rename, they will need to be upgraded in
> >> lockstep, which has never been the case before. I see the value of a
> >> short-term "transition" release that helps ease this burden by
> >> supporting webapps using either package, but if others don't, then never
> >> mind.
> > I think the ideal migration strategy is going to vary for different
> > users. Personally, I think an approach that largely mirrors what the
> > Jakarta projects are going (i.e. just the package rename, nothing else)
> > and doing that for the container and the app at the same time is the way
> > to go in the majority of cases but I appreciate that that is just my view.
> >
> >> Maybe I've misunderstood the migration tool, but it looks like a great
> >> tool for developers like me, not a tool that will directly help
> >> non-developers who deploy pre-built Tomcat webapps.
> > The idea is that anyone can take a Java EE 8 app that runs on Tomcat 9,
> > run it through this migration tool and then run the migrated app on
> > Tomcat 10. We aren't there yet (I've only tested a JSTL API and
> > implementation) but my intention is to use apps like Jira to test it.
> >
> >> As for Romain's question about doing the transformations in the
> >> classloader, I started with a classloader approach (my classloader
> >> responded to requests for "javax.servlet.*" classes with their
> >> "jakarta.servlet.*" counterparts). I backed away because these classes
> >> then needed to be manipulated so they'd match the javax interfaces'
> >> expectations, but I haven't used ASM before.
> > This is one of the approaches considered in previous discussions. It is,
> > essentially, what the migration tool does. I think it is better to do
> > this conversion in advance rather than take the performance hit in a
> > running application. It is actually fairly simple to do as you only need
> > to modify the String constants.
> >
> >> And this part of the
> >> problem (my webapp requesting javax classes that no longer exist in
> >> Tomcat) was easily solved by simply including those classes in my jar.
> >> The more interesting problem was adapting the objects passed in the
> >> hand-offs between jakarta-only Tomcat and javax-only webapp (e.g.,
> >> Filter, Servlet, FilterChain); I'm not sure a classloader would help
> >> there. But if someone can come up with a simpler classloader (or dynamic
> >> proxy, et al)-based approach, then I'm all for it.
> > I spent a bit of time thinking about this but didn't get as far as
> > coding it. I came to the conclusion it could get very messy once you
> > start wrapping requests and dispatching them and decided to focus on the
> > migration tool instead.
> >
> > Overall, I think it is good that there are a range of tools supporting a
> > range of approaches. As users start the migration progress, hopefully
> > we'll get some feedback and we can refine the tools and/or the approaches.
> >
> > I'd encourage you to put your code somewhere where others can look at it
> > (GitHub being the obvious choice these days) and I'd ask you to consider
> > using the Apache License v2 as that makes it very easy to integrate into
> > Tomcat at some point in the future if that turns out to be the best
> > thing to do.
> >
> > Mark
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail:dev-unsubscr...@tomcat.apache.org
> > For additional commands, e-mail:dev-h...@tomcat.apache.org
> 
> Mark,
> 
> Thanks very much for your response. I agree the ideal migration strategy 
> will vary and a build-based (or post-build) tool should work for most 
> developers. But if there's sufficient demand for a run-time migration 
> layer, I believe the implementation would be fairly straightforward and 
> the result reasonably efficient.
> 
> All of my proof-of-concept code is available on Github: 
> https://github.com/labkey-adam/jakarta-javax
> 
> Most of the code carries the Apache 2.0 license already (e.g., the 
> javax.servlet and javax.el classes copied from Tomcat sources), but I'll 
> add a top-level license file to clarify that the entire repo is Apache 2.0.
> 
> FilterChainAdapter illustrates the simple approach: 
> https://github.com/labkey-adam/jakarta-javax/blob/master/src/javax/servlet/FilterChainAdapter.java
> 
> Objects are wrapped, but the Adapters helper class unwraps known 
> wrappers to minimize object creation. If we were to move forward with 
> this approach, I'd want to restructure the code, moving the new classes 
> out of javax.servlet into their own package. And, of course, adding the 
> rest of javax.servlet and wiring up other adapters as needed.
> 
> Adam
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: dev-h...@tomcat.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to