import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
// Get the JVM's local "server" (there should be only one)
MBeanServer mbs = MBeanServerFactory.findMBeanServer(null).get(0);
// Create an "object name" that points to the application's
// context in Tomcat's MXBean tree. You might want to use
// jvisualvm or a similar MBean explorer to locate your
// application to get the exact right syntax for your context
// in the tree. Tomcat version may affect this value.
ObjectName objectName = new ObjectName("Catalina:j2eeType=WebModule,name=//localhost/contextname,J2EEApplication=none,J2EEServer=none");
// Invoke the "reload" method, which will
mbs.invoke(objectName, "reload", null, null);
2条答案
按热度按时间f5emj3cl1#
正如@jasonarmstrong所说,您可以使用jmxbean触发重载,jmxbean在同一jvm中对任何应用程序都可用。您可以重新加载自己或其他应用程序。稍后我将发布代码来演示如何做到这一点。
另一方面,如果您只想部署一个额外的servlet,那么可以使用标准的javaservlet api来实现。
JavaServletAPI
ServletContext
接口包含一个方法,addServlet
,它允许您部署新的servlet。结合该方法的返回值,应该允许您在应用程序初始化之后部署一个新的servlet。例如(在
Servlet
)更新2018-12-07
抱歉,以上文字现已收回。关于它的一切都是正确的,只是在初始化上下文之后不能部署新的servlet(可能还有过滤器和其他类似的东西)。
==返回原始答案==
或者,如果您想重新加载上下文,仍然可以使用jmx来完成。代码如下所示:
y3bcpkx12#
manager应用程序将允许您更新应用程序。您还可以使用jmx mbean做一些事情。
manager应用程序允许您通过
update=true
参数。你也可以从那里启动,停止,重新启动一个应用程序。这不完全是你想要的,但它很容易设置。