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

Reply via email to