That’s exactly what the modules classified as “installed” do, downloading and unpacking the servlet container release archive locally.

The download URL is configurable using JVM properties.
I intend to add this to the launchers project page.

This seems to be working at least for trivial projects so far but it is disconnected from standard development operations flow.

Running in the same JVM unfortunately presents other challenges, classpath conflicts mostly, which I have been unable to resolve so far for non-trivial projects.

------ Original Message ------
From "Jens" <[email protected]>
To "GWT Contributors" <[email protected]>
Date 20/04/2025 23:04:57
Subject Re: [gwt-contrib] Re: Official external DevMode server implementations

Would it be too bad to not use embedded container but instead installed container <https://codehaus-cargo.github.io/cargo/Installed+Container.html> with Cargo? They also provide a simple Java API to download and unpack a servlet container release archive locally. So DevMode could download and install a servlet container in a GWT specific location and then use that. The download URL could also be made configurable using a gwt-devmode.properties file in the project similar to how the gradlew script installs gradle locally if needed.

Cargo documentation explicitly says that embedded containers can quickly end up in classloader / JAR hell and have other downsides: https://codehaus-cargo.github.io/cargo/Embedded+Container.html

-- J.

[email protected] schrieb am Freitag, 4. April 2025 um 19:20:25 UTC+2:
I understand.

I am actually loading all Jetty classes using a custom child-first classloader and let everything else be loaded by the parent classloaders chain.

That was expected to be sufficient but apparently it is not, a lot of trickery is still required.

On Friday, 4 April 2025 at 18:12:19 UTC+1 Thomas Broyer wrote:
On Fri, Apr 4, 2025 at 6:48 PM [email protected] <[email protected]> wrote:
Relatively solved indeed, that's what I expected, which worked for my PoC modules.

The first problem I encountered was loading some application classes through the DevMode launcher's classloader and some others from the application classloader. for example: SpringFramework interfaces loaded from the isolated DevMode classloader but concrete implementation classes loaded from the application classloader, which produced class loading errors.

I had to start excluding dependencies from the Jetty container's WEB-INF/lib folder using a specific technique so that the classes would be all loaded from the classloader of DevMode instead, but even that wasn't enough.

The problem got worse when I tried to make use of even more dynamic frameworks like SpringSecurity, being unable to prepare the underlying component chains, which is where I stopped.

Overall, it seems that even though the DevMode classloader is isolated, a lot of trickery may still be required.

I haven't looked at the code, but in case you were on that path: please do not try to mimic the current behavior where server-side classes can be loaded from the classpath. Having a breaking change like this is a great opportunity to ditch that and just require that server-side classes are within WEB-INF/classes and WEB-INF/lib. That way, you use the server's already implemented and battle-tested classloaders respecting the Jakarta Servlet specs for precedence and isolation. That custom classloader was the main reason Jetty wasn't updated more often (in addition to changing its API in minor or even patch releases).

--
You received this message because you are subscribed to the Google Groups "GWT Contributors" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/google-web-toolkit-contributors/1228184a-52d6-409a-8f35-fc2894cb4413n%40googlegroups.com <https://groups.google.com/d/msgid/google-web-toolkit-contributors/1228184a-52d6-409a-8f35-fc2894cb4413n%40googlegroups.com?utm_medium=email&utm_source=footer>.

--
You received this message because you are subscribed to the Google Groups "GWT 
Contributors" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/emcc41c2a5-2f25-48d4-9a0b-876d6b35baf5%40940d2ed7.com.

Reply via email to