Christopher, 2023年12月16日(土) 3:41 Christopher Schultz <ch...@christopherschultz.net>: > > Jun, > > On 12/15/23 08:56, Jun Suzuki wrote: > > 2023年12月15日(金) 20:37 Rémy Maucherat <r...@apache.org>: > >> > >> On Fri, Dec 15, 2023 at 11:54 AM Jun Suzuki <junsuzuki1...@gmail.com> > >> wrote: > >>> > >>> Rémy > >>> Thank you so much for your support. > >>> May I confirm a little bit further regarding your reply. > >>> > >>> 2023年12月15日(金) 17:08 Rémy Maucherat <r...@apache.org>: > >>>> > >>>> On Fri, Dec 15, 2023 at 4:18 AM Jun Suzuki <junsuzuki1...@gmail.com> > >>>> wrote: > >>> > >>>>> (1) Guidance is not so clear about following points: > >>>>> Should I copy the deployed application(with or without war file?) from > >>>>> existing Tomcat server webapps directory, to webapps directory of > >>>>> $TOMCAT_STUFFED? > >>>>> Should I copy all the files from conf directory of existing Tomcat > >>>>> server, to conf directory of $TOMCAT_STUFFED? > >>>> > >>>> Yes. > >>>> When building your image, you have to compile all the classes into it. > >>>> So that means all the classes of the webapp as well. So if you don't > >>>> copy your webapp for the script to compile, no webapp classes ... Also > >>>> all the webapp Java classes and JARs will have to be included in the > >>>> image as well for annotation scanning. > >>> > >>> Is it correct that following source from existing Tomcat Server needed > >>> to be copied into $TOMCAT_STUFFED? > >>> A. All files under conf folder (including war file) > >>> B. All files under webapps folder > >>> C. How about lib folder? Should it also be copied? > >>> D. How about java source code(which are not deployed on Tomcat) > >> > >> The doc is correct, so just use that: > >> - Copy config files from conf (obvious) > >> - Webapps go in webapps (unless the host appBase is something else) > >> And that's it. > >> > >>>> > >>>>> (2) On the step of execution of "$JAVA_HOME/bin/java -Dcatalina.base=. > >>>>> -Djava.util.logging.config.file=conf/logging.properties -jar > >>>>> target/tomcat-stuffed-1.0.jar --catalina -generateCode src/main/java", > >>>>> errors messages show as below: > >>>>> ................................................... > >>>>> Can't load log handler "1catalina.org.apache.juli.AsyncFileHandler" > >>>>> java.lang.ClassNotFoundException: > >>>>> 1catalina.org.apache.juli.AsyncFileHandler > >>>>> java.lang.ClassNotFoundException: > >>>>> 1catalina.org.apache.juli.AsyncFileHandler > >>>>> at > >>>>> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) > >>>>> at > >>>>> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) > >>>>> at > >>>>> java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) > >>>>> ................................................... > >>>> > >>>> Yes, avoid the juli file handlers. There's a jul file handler I think: > >>>> java.util.logging.FileHandler > >>> > >>> I revised the source code by deleting "import java.util.*", and I > >>> recompiled the java source and copied the war file into > >>> $TOMCAT_STUFFED. > >>> However, the error message remains: > >>> Can't load log handler "1localhost.org.apache.juli.AsyncFileHandler" > >>> java.lang.ClassNotFoundException: > >>> 1localhost.org.apache.juli.AsyncFileHandler > >>> ........................... > >>> Can't load log handler "2localhost.org.apache.juli.AsyncFileHandler" > >>> java.lang.ClassNotFoundException: > >>> 2localhost.org.apache.juli.AsyncFileHandler > >> > >> Use stuff from java.util.logging instead if juli doesn't work for you. > >> Or change the pom to add it. Juli makes things more complex with > >> Graal, so the pom doesn't have it. > >> As explained in the doc, the pom needs to be edited for needed > >> dependencies. > >> > >>> ........................... > >>> 15-Dec-2023 10:35:47.580 INFO [main] > >>> org.apache.catalina.startup.HostConfig.deployDirectory Deployment of > >>> web application directory > >>> [/home/opc/project/tomcat-native/stuffed/webapps/ROOT] has finished in > >>> [215] ms > >>> 15-Dec-2023 10:35:47.580 INFO [main] > >>> org.apache.catalina.startup.HostConfig.deployDirectory Deployment of > >>> web application directory > >>> [/home/opc/project/tomcat-native/stuffed/webapps/ROOT] has finished in > >>> [215] ms > >>> 15-Dec-2023 10:35:47.583 INFO [main] > >>> org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler > >>> ["http-nio-8080"] > >>> 15-Dec-2023 10:35:47.583 INFO [main] > >>> org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler > >>> ["http-nio-8080"] > >>> > >>> Since the error messages are showing as above and the process is > >>> hanging on there, I could not proceed with the step of the next "maven > >>> package" unless I open another terminal to run maven command. > >>> Do you have any idea about how to fix this error? > >> > >> Well, there's no error there, so it's fine. The process is to generate > >> reflection metadata for your webapp depending on what it needs, so you > >> need to write a script that exercises all your paths in your webapp > >> [that would use reflection]. It's kind of like using your webapp > >> testsuite there. Once that is done, you should shutdown Tomcat as > >> usual, the metadata has been generated by the agent. > >> That is explained here: > >> https://tomcat.apache.org/tomcat-9.0-doc/graal.html#Native_image_configuration > >> > >> Then you can move on to > >> https://tomcat.apache.org/tomcat-9.0-doc/graal.html#Building_the_native_image > >> > >> Rémy > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > >> For additional commands, e-mail: users-h...@tomcat.apache.org > >> > > > > Thank you Rémy for your detailed explanation. > > So from your explanation, I understand following command will start > > Tomcat server with tracing agent enabled, and then by accessing all > > the paths from webapps will generate necessary metadata for native > > image: > > $JAVA_HOME/bin/java\ > > > > -agentlib:native-image-agent=config-output-dir=$TOMCAT_STUFFED/target/\ > > -Dorg.graalvm.nativeimage.imagecode=agent\ > > -Dcatalina.base=. > > -Djava.util.logging.config.file=conf/logging.properties\ > > -jar target/tomcat-stuffed-1.0.jar --catalina -useGeneratedCode > > > > But I hope to understand, before that step, there is one more step to > > run following command, and what's the purpose of this command? Does > > this command also start Tomcat? It appears that it only generates some > > necessary code, so should I simply need to terminate this command to > > stop Tomcat? > > $JAVA_HOME/bin/java\ > > -Dcatalina.base=. > > -Djava.util.logging.config.file=conf/logging.properties\ > > -jar target/tomcat-stuffed-1.0.jar --catalina -generateCode > > src/main/java > > When you are finished with this process, please consider submitting a > documentation patch/PR to help clarify all the things you didn't > understand about the process. > > Jean-Frederic and Remy are primarily the ones who have written and used > this, and they very much understand everything under the covers. > > You, coming from the outside, have a good perspective for how > "outsiders" will use this, and any improvements you can make to the > documentation will be helpful to others trying to do the same thing. > > -chris >
Understood. I'm now doing a migration from a traditional spring framework app running on Tomcat to native image. It's hard to find examples and guidance besides this documentation(https://tomcat.apache.org/tomcat-9.0-doc/graal.html) which is almost the only one we can rely on. I will consider combining the findings which I got from this process. And thank you for your team's support. Jun --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org