I forgot something sorry. Maybe I'm missing something important but, about
classloading, on native image shouldn't it NOT exist? As far as I
understood after you have a native image you have (resources a part)
everything you need inside the binary + libraries, in my case .exe and .dll
files.
Unless I missed something and a graal native image has a jvm or sort of
which will actually run, so now i get why java code outside of the binary
will actually be used, BUT then I don't get why it was designed this way,
this isn't AOT anymore

Il giorno ven 31 dic 2021 alle ore 14:42 Mar R <marco.robiat...@gmail.com>
ha scritto:

> Il giorno mar 28 dic 2021 alle ore 22:26 Rémy Maucherat <r...@apache.org>
> ha scritto:
>
>> On Tue, Dec 28, 2021 at 7:18 PM Mar R <marco.robiat...@gmail.com> wrote:
>> >
>> > Tomcat 10.0.14
>> > Windows 10 x64 21H1 OS Build 19043.1415
>> >
>> > openjdk version "17.0.1" 2021-10-19
>> > OpenJDK Runtime Environment GraalVM CE 21.3.0 (build
>> > 17.0.1+12-jvmci-21.3-b05)
>> > OpenJDK 64-Bit Server VM GraalVM CE 21.3.0 (build
>> 17.0.1+12-jvmci-21.3-b05,
>> > mixed mode, sharing)
>> >
>> > NetBeans 12.6, maven webapp project
>> > Maven 3.8.4
>> > Ant 1.10.12
>> >
>> > Followed guide at https://tomcat.apache.org/tomcat-10.0-doc/graal.html
>> >
>> > Sorry in advance if not all issues should be reported here but instead
>> are
>> > graalvm native image related, I'm reporting everything here and on their
>> > github fro completeness.
>> >
>> >
>> https://drive.google.com/file/d/17flFW5nlNCdojlvJxCOy23NJBj03p46u/view?usp=sharing
>> > In this link you can find a folder with everything I used from tomcat
>> > stuffed folder downloaded from the github link present in the tomcat AOT
>> > guide, to all commands I put in a script for easier testing purpose,
>> source
>> > webapp, built webapp, screenshots, everything :D
>> >
>> > I'll start by saying I'm well aware I could definitely have overlooked
>> > something, anyway I managed to get to the final native image and it
>> works,
>> > BUT:
>> >
>> > If you remove .class files from webapps/webappname folder, when you run
>> the
>> > binary file, it won't find those files, only jsps. This is strange
>> because
>> > those files are actually present in the fat jar, and this actually beats
>> > the purpose of builidng a native image if you have to ship it with java
>> > files.
>> >
>> > If there is a class extending ServletContextListener (InitClass in this
>> > webapp), when running command with "--catalina -generateCode" parameter,
>> > where you have to access all jsps and servlets, the class extending
>> > ServletContextListener will be initialized/used(?) like 2 times, but the
>> > second time not completly, resetting everything done in the first
>> > initialization.
>> > In this webapp it happens when you access the only servlet present.
>> > Anyway all code is in the google drive link and in InitClass i put some
>> > prints so you can see what I mean.
>> > In another bigger webapp my InitClass initializes a lot of things used
>> by
>> > the webapp basically screwing it.
>> > This issues happens only in this phase becasue in the second phase where
>> > the parameter is "useGeneratedCode" it works normally both with this
>> simple
>> > test webapp and in my other one
>> >
>> > When building with native-image command, if
>> > "-J--add-exports=java.management/sun.management=ALL-UNNAMED" isn't used
>> as
>> > additional parameter, errors will pop on run crashing the app.
>> (screenshot
>> > in the google drive link)
>>
>> Before looking at it more deeply (later ...), let's take this step by
>> step:
>> - Even though you are generating a fat JAR and building a native
>> image, the webapps should stay unchanged. All classes and JARs in
>> WEB-INF will be needed for annotation scanning and whatever
>> "classloading". So this is not a bug. Don't worry, regular Java
>> classes that have not been compiled in a native image are never going
>> to be magically dynamically loaded and run, since this isn't possible
>> at all.
>> - Java 17 with Graal is completely untested (Java 11 is) since it's
>> very new. Since you seem very adventurous, you can also try to compile
>> in the Panama support for OpenSSL.
>> - I haven't tested the JMX support, which is fairly new in Graal.
>> Adding the module declaration on the command line if needed depending
>> on the Java version doesn't seem that surprising. If you were running
>> Java 8 you wouldn't need it. For the longest time, JMX was disabled
>> with Graal (with no way to enable it). Since it supposedly "works",
>> the regular Tomcat standalone defaults are used (so you can use the
>> command line to disable it again; to be honest I would probably do
>> that ...).
>> - You can keep your server.xml (more flexible), but once everything
>> works (if you get there then it's good !) you can indeed generate the
>> equivalent code for server.xml/context.xml with -generateCode and
>> avoid some reflection. This is really completely optional. So it seems
>> there's a problem with ServletContextListener then (this is strange
>> since it's a web.xml component, for which I never added the actual
>> code generation - it was tempting but way too complex if the goal was
>> to support everything). So I'll try to understand what is going on.
>>
>> Rémy
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>
>>
> -Then to me it seems like it actually beats the purpose of using an
> embedded solution/native image. Anyway i don't get if the fat jar has ALL
> the compiled jsps and classes built, why should it ever look for them
> outside? OR, why annotation scanning isn't done before? so to avoid relying
> on built files outside fat jar/binary image.
>
> -I tested on Java 11 too, will post results after replying to everything.
> I will try what you suggest but after I manage to solve these issues first,
> so I can update tutorial page too.
>
> -I don't know why you're talking about JMX I'm not using it. If you are
> referring to "-J--add-exports=java.management/sun.management=ALL-UNNAMED" I
> just used this because otherwise i couldn't compile, and i even found it
> while googling by pure luck! So how to remove JMX from entire process?
> Anyway that parameter isn't need anymore in graal CE 22 (tested the dev
> builds too)
>
> -the server.xml I used is the default one, minus all listener and things
> commented out as per Tomcat AOT tutorial.
> About the -generateCode part: I tried a lot looking for some info about
> this parameter but couldn't find anything. The only page in the internet
> where it pops up is the Tomcat AOT page linked above and whatever cloned it.
> I didn't even know if it was Tomcat or GraalVM related until I searched
> both source code and found it in the Tomcat one :D
> So could you or someone please explain how it works, I'd like to add those
> info to the docs too.
>
> Now considering I can't edit my first message I'll have to add it here.
> ---
> ---
> ---
>
> Tomcat 10.0.14
> Windows 10 x64 21H1 OS Build 19043.1415
> NetBeans 12.6, maven webapp project
> Maven 3.8.4
> Ant 1.10.12
>
> openjdk version "11.0.13" 2021-10-19
> OpenJDK Runtime Environment GraalVM CE 21.3.0 (build
> 11.0.13+7-jvmci-21.3-b05)
> OpenJDK 64-Bit Server VM GraalVM CE 21.3.0 (build
> 11.0.13+7-jvmci-21.3-b05, mixed mode, sharing)
>
> openjdk version "17.0.1" 2021-10-19
> OpenJDK Runtime Environment GraalVM CE 21.3.0 (build
> 17.0.1+12-jvmci-21.3-b05)
> OpenJDK 64-Bit Server VM GraalVM CE 21.3.0 (build
> 17.0.1+12-jvmci-21.3-b05, mixed mode, sharing)
>
> GraalVM CE 22.0.0-dev-20211222_1041
> openjdk version "11.0.13" 2021-10-19
> OpenJDK Runtime Environment GraalVM CE 22.0.0-dev (build
> 11.0.13+8-jvmci-22.0-b02)
> OpenJDK 64-Bit Server VM GraalVM CE 22.0.0-dev (build
> 11.0.13+8-jvmci-22.0-b02, mixed mode, sharing)
>
> GraalVM CE 22.0.0-dev-20211222_1041
> openjdk version "17.0.2" 2022-01-18
> OpenJDK Runtime Environment GraalVM CE 22.0.0-dev (build
> 17.0.2+5-jvmci-22.0-b02)
> OpenJDK 64-Bit Server VM GraalVM CE 22.0.0-dev (build
> 17.0.2+5-jvmci-22.0-b02, mixed mode, sharing)
>
> Followed guide at https://tomcat.apache.org/tomcat-10.0-doc/graal.html
>
> Sorry in advance if not all issues should be reported here but instead are
> tomcat related, I'm reporting everything here and on their mailing list for
> completeness.
> https://lists.apache.org/thread/pc0cj9dn9ovxs1qqlqq6p3x88k0jwpmk
>
>
> https://drive.google.com/file/d/1105hPdeA8xqtLfl6QbaI6KTozMJ2bySV/view?usp=sharing
>
> https://drive.google.com/file/d/17_JXqNNBZCfCW8-JDl2Kocx0NzEVdc-J/view?usp=sharing
> In these links you can find a folder with everything I used from tomcat
> stuffed folder downloaded from the github link present in the tomcat AOT
> guide, to all commands I put in a script for easier testing purpose, source
> webapp, built webapp, screenshots for tests with graalvm CE 21.3 java 11
> and java 17
>
> all commands/script run as admin.
> everytime changed JAVA_HOME and graalvm/bin in PATH enviornment variables
> to reflect actual graalvm used for tests.
>
> I'll start by saying I'm well aware I could definitely have overlooked
> something, anyway I managed to get to the final native image and it works,
> BUT:
>
> 1a) JAVA 11 and 17: If there is a class extending ServletContextListener,
> when running command with "--catalina -generateCode" parameter, where you
> have to access all jsps and servlets, the class extending
> ServletContextListener (InitClass in this example) will be
> initialized/used(?) like 2 times, but the second time not completly,
> resetting everything done in the first initialization.
> 1b) JAVA 11 and 17: if after mvn package run after ant, classes and jsps
> are removed from webapps/webappname folder, when running command with
> "--catalina -generateCode" parameter classes aren't found, jsps are. I
> accessed page.jsp manually on url, it executed it BUT it run InitClass
> (which is accessed from that jsp) with the already mentioned problem, only
> static block is initialized. So it's like it is actually able to access
> compiled classes inside the jar but in a strange way ??!?!
> -This is strange because those files are actually present in the fat jar,
> and this actually beats the purpose of builidng a native image if you have
> to ship it with java files.
> -If you first run with webapps folder without the webapp and only then
> copy the BUILT webapp in the folder everything will work correctly, even
> with ServletContextListener
>
> 2a-b) JAVA 11:after -generateCode phase, inside ContextXmlDefault.java ""
> in paths in watched resources aren't escaped so need to be manually
> replaced with / or manually escaped else the following mvn package will fail
>
> 3a) JAVA 11 and 17: no problems.
> 3b) JAVA 11 and 17: (after manually escaping/replacing "/", mvn package
> runs fine for JAVA 11). Same as 1b)
>
> 4a-b) JAVA 17: when building with native-image command, if
> "-J--add-exports=java.management/sun.management=ALL-UNNAMED" isn't used as
> additional parameter, errors will pop on run crashing the app.
>
> 5a) JAVA 11 and 17: no problems.
> 5b) JAVA 11 and 17: native binary run, with or without parameters, same
> behaviour as point 1b)
>
> Any idea how to fix: The bundle named:
> org.apache.catalina.tribes.transport.bio.LocalStrings, has not been found.
> If the bundle is part of a module, verify the bundle name is a fully
> qualified class name. Otherwise verify the bundle path is accessible in the
> classpath.
> The bundle named: org.apache.tomcat.util.threads.res.LocalStrings, has not
> been found. If the bundle is part of a module, verify the bundle name is a
> fully qualified class name. Otherwise verify the bundle path is accessible
> in the classpath.
>

Reply via email to