diff --git a/jams-launcher/src/main/java/launcher/AppStarter.java b/jams-launcher/src/main/java/launcher/AppStarter.java index ec9f3da234a716fe219353972ff319bdd02f0742..51c89bfcd07827ab3bdd1ed6af155240f2f5f250 100644 --- a/jams-launcher/src/main/java/launcher/AppStarter.java +++ b/jams-launcher/src/main/java/launcher/AppStarter.java @@ -86,7 +86,7 @@ public class AppStarter extends Thread { doUpdate.wait(); } if(doUpdate.get()){ - server.tomcatLauncher.stopTomcat(); + Server.tomcatLauncher.stopTomcat(); server = null; //This will trigger a force reload of the lib. LibraryLoader.loadlibs(System.getProperty("user.dir"), AppStarter.class); diff --git a/jams-server/src/main/java/net/jami/jams/server/Server.java b/jams-server/src/main/java/net/jami/jams/server/Server.java index 015e99a8aa1dce8aff1a9527119128cfc08c2728..34e3f1a89509940fb2566e06e181551cca770962 100644 --- a/jams-server/src/main/java/net/jami/jams/server/Server.java +++ b/jams-server/src/main/java/net/jami/jams/server/Server.java @@ -28,6 +28,8 @@ import com.jsoniter.output.EncodingMode; import com.jsoniter.output.JsonStream; import com.jsoniter.spi.DecodingMode; import com.jsoniter.spi.JsoniterSpi; +import javassist.ClassPool; +import javassist.compiler.Javac; import lombok.extern.slf4j.Slf4j; import net.jami.datastore.main.DataStore; import net.jami.jams.common.authentication.AuthenticationSourceType; @@ -69,15 +71,16 @@ public class Server { public static AppUpdater appUpdater; public Server(AppUpdater appUpdater, String port, String serverCertificate, String serverPrivateKey) { - Server.appUpdater = appUpdater; JsoniterRegistry.initCodecs(); + Server.appUpdater = appUpdater; String[] args = {port, serverCertificate, serverPrivateKey}; main(args); } public static void main(String[] args) { - //Start tomcat. + //This is a fix to drop old cached stuff from the tomcat classloader. + ClassPool.getDefault().clearImportedPackages(); switch (args.length) { case 0: tomcatLauncher = new TomcatLauncher(8080); diff --git a/jams-server/src/main/java/net/jami/jams/server/core/TomcatLauncher.java b/jams-server/src/main/java/net/jami/jams/server/core/TomcatLauncher.java index 6b71db3c1d02d0c967672a00b0c53c05a0816483..9ece9ab4cd0838fcc8bc9bee04076b29576e8e6b 100644 --- a/jams-server/src/main/java/net/jami/jams/server/core/TomcatLauncher.java +++ b/jams-server/src/main/java/net/jami/jams/server/core/TomcatLauncher.java @@ -27,6 +27,7 @@ import lombok.extern.slf4j.Slf4j; import net.jami.jams.ca.JamsCA; import net.jami.jams.common.utils.LibraryLoader; import net.jami.jams.server.Server; +import org.apache.catalina.Context; import org.apache.catalina.WebResourceRoot; import org.apache.catalina.connector.Connector; import org.apache.catalina.core.StandardContext; @@ -51,7 +52,8 @@ import static net.jami.jams.server.Server.certificateAuthority; @Slf4j public class TomcatLauncher { - private final Tomcat tomcat = new Tomcat(); + private static final Tomcat tomcat = new Tomcat(); + private static StandardContext context; public TomcatLauncher(int port) { tomcat.getService().addConnector(TomcatConnectorFactory.getNoSSLConnector(port)); @@ -79,7 +81,7 @@ public class TomcatLauncher { public void startServer() { String jarName = System.getProperty("user.dir") + File.separator + "jams-server.jar"; log.info("JAR Resource File = " + jarName); - StandardContext context = (StandardContext) tomcat.addWebapp("", new File(System.getProperty("user.dir")).getAbsolutePath()); + context = (StandardContext) tomcat.addWebapp("", new File(System.getProperty("user.dir")).getAbsolutePath()); context.getJarScanner().setJarScanFilter((jarScanType, s) -> false); log.info("Serving application from: " + new File(System.getProperty("user.dir")).getAbsolutePath()); @@ -123,6 +125,7 @@ public class TomcatLauncher { synchronized (tomcat) { certificateAuthority.shutdownThreads(); tomcat.stop(); + context.destroy(); tomcat.destroy(); } } catch (Exception e) {