Search code examples
eclipsetomcatjsfdeploymentfacelets

How to continuously deploy changes in JSF project without restarting Tomcat?


I have a JSF project in Eclipse. Now every time I make changes to the .xhtml files, I have to stop Tomcat server, and then start Tomcat server again. Is there any other way where I can continuously build and test my application without restarting the server every time I make changes?


Solution

  • There are at least two changes you need to make when you need to develop a JSF project:

    1. Tell Eclipse to automatically publish changes by changing the Tomcat settings as follows (doubleclick Tomcat server entry in Servers view to get this screen):

      enter image description here

      It namely defaults to "Never publish automatically".


    2. Tell JSF that the webapp is currently in development mode by adding the following to web.xml:

      <context-param>
          <param-name>javax.faces.PROJECT_STAGE</param-name>
          <param-value>Development</param-value>
      </context-param>
      

      This will change some internal workings to make the developers easier such as disabling the Facelet cache and reloading resources. Don't forget to remove this when building a production release because this affects performance. This setting can alternatively also be set by JNDI.


    The alternative is to migrate from the barebones Tomcat server to a normal JEE server such as WildFly, Payara, Liberty, etc. For them, the above described Eclipse setting is not necessary anymore and you can even live edit bean methods (on Tomcat, you'd still need to restart the whole server for them).