DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15099>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15099

MX4JSystemManager.java

           Summary: MX4JSystemManager.java
           Product: Avalon
           Version: unspecified
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Minor
          Priority: Other
         Component: Phoenix
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


in MX4JSystemManager.java's initialize(), there is a call for 
MBeanServer.invoke to start mx4j's HTTP adapter and RMI adapter, but there is 
no such call to stop these adapters. so when CLIMain is called by service 
warpper, such as DaemonLauncher.java, and if there is no System.exit() after 
stop the Embeddor, the execution will not stop because the adapter thread is 
still run.

I modified MX4JSystemManager a little bit. below is modified part of it

public void initialize()
        throws Exception
{
        super.initialize();
}

public void start()
        throws Exception
{
        super.start();
        final MBeanServer server = getMBeanServer();
        startHttpAdaptor(server);
        if (m_rmi) startRMIAdaptor(server);
}

public void stop()
        throws Exception
{
        super.stop();
        // stop the server
        final MBeanServer server = getMBeanServer();
        stopHttpAdaptor(server);
        if (m_rmi) stopRMIAdaptor(server);
}

private void startHttpAdaptor(final MBeanServer server)
        throws Exception
{
        final ObjectName adaptorName = new ObjectName("Http:name=HttpAdaptor");
        server.createMBean("mx4j.adaptor.http.HttpAdaptor", adaptorName, null);
        server.setAttribute(adaptorName, new Attribute("Host", m_host));
        server.setAttribute(adaptorName, new Attribute("Port", new Integer
(m_port)));

        configureProcessor(server, adaptorName);
        if (m_username != null) configureAuthentication(server, adaptorName);
        server.invoke(adaptorName, "start", null, null);

        getLogger().debug("MX4J HTTP listener port: " + m_port);
}

private void startRMIAdaptor(final MBeanServer server)
        throws Exception
{
        System.setProperty("java.naming.factory.initial", m_namingFactory);

        // Create and start the naming service
        final ObjectName naming = new ObjectName("Naming:type=rmiregistry");
        server.createMBean("mx4j.tools.naming.NamingService", naming, null);
        server.invoke(naming, "start", null, null);

        // Create the JRMP adaptor
        final ObjectName adaptor = new ObjectName("Adaptor:protocol=JRMP");
        server.createMBean("mx4j.adaptor.rmi.jrmp.JRMPAdaptor", adaptor, null);
        JRMPAdaptorMBean mbean = (JRMPAdaptorMBean) StandardMBeanProxy.create
(JRMPAdaptorMBean.class, server, adaptor);
        // Set the JNDI name with which will be registered
        mbean.setJNDIName("jrmp");
        // Register the JRMP adaptor in JNDI and start it
        mbean.start();
}

private void stopHttpAdaptor(final MBeanServer server)
        throws Exception
{
        // stop the HTTP adaptor
        final ObjectName adaptorName = new ObjectName("Http:name=HttpAdaptor");
        server.invoke(adaptorName, "stop", null, null);
}

private void stopRMIAdaptor(final MBeanServer server)
        throws Exception
{
        // stop the JRMP adaptor
        final ObjectName adaptor = new ObjectName("Adaptor:protocol=JRMP");
        server.invoke(adaptor, "stop", null, null);

        // stop the naming service
        final ObjectName naming = new ObjectName("Naming:type=rmiregistry");
        server.invoke(naming, "stop", null, null);
}

private void configureProcessor(final MBeanServer server, final ObjectName 
adaptorName)
        throws Exception
{
        final ObjectName processorName = new ObjectName
("Http:name=XSLTProcessor");
        server.createMBean("mx4j.adaptor.http.XSLTProcessor", processorName, 
null);
        server.setAttribute(adaptorName, new Attribute("ProcessorName", 
processorName));
        server.setAttribute(processorName, new Attribute("UseCache", 
Boolean.FALSE));
        if (m_stylesheetDir != null) server.setAttribute(processorName, new 
Attribute("File", m_stylesheetDir));
}

private void configureAuthentication(final MBeanServer server, final ObjectName 
adaptorName)
        throws InstanceNotFoundException, MBeanException, ReflectionException, 
AttributeNotFoundException, InvalidAttributeValueException
{
        // add user names
        server.invoke(adaptorName, "addAuthorization", new Object[]{m_username, 
m_password}, new String[]{"java.lang.String", "java.lang.String"});
        // use basic authentication
        server.setAttribute(adaptorName, new Attribute
("AuthenticationMethod", "basic"));
}

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to