Hello,

A while back this thread was posted here and it works great on my local dev box (using a background thread) using vhost="localhost/".  When I deploy it as a war the vhost name changes.

From the output:

Attributes for object: 
Catalina:j2eeType=Servlet,WebModule=//localhost/##914-develop,name=MyServlet,J2EEApplication=none,J2EEServer=none:

How do I reliably get the vhost / WebModule name when using a war?

The attribute "org.apache.catalina.webappVersion" gives "914-develop" but its missing the ##

My war is called: ROOT##914-develop.war

Thanks

On 16/10/2025 18:02, Christopher Schultz wrote:
I recently added reload capabilities to my application for users with admin roles. The code is basically (after triple-checking authentication and some app-specific bells and whistles):

        ServletContext app = getServletContext();

        MBeanServer mbs = getServer();
        if(null != mbs) {
            try {
                String vhost = getHostname();

                ObjectName objectName = new ObjectName("Catalina:j2eeType=WebModule,name=//" + vhost + app.getContextPath() + ",J2EEApplication=none,J2EEServer=none");

                if(mbs.isRegistered(objectName)) {
                    mbs.invoke(objectName, "reload", null, null);
                }
            } catch (MBeanException | MalformedObjectNameException | InstanceNotFoundException | ReflectionException e) {                 app.log(getClass().getSimpleName() + ": Failed to reload application ", e);
            }
        }

... with the helper functions:


    private String hostname = "localhost"; // This is an init-param

    public String getHostname() {
        return hostname;
    }

    private static MBeanServer getServer() {
        ArrayList<MBeanServer> mbservers = MBeanServerFactory.findMBeanServer(null);

        if (mbservers.size() > 0) {
            MBeanServer mbserver = mbservers.get(0);

            if (mbserver != null)
                return mbserver;
        }

        return null;
    }

Just wire this into your application somewhere. You don't need to install anything else, even the Manager application.

-chris 

Reply via email to