Package com.sun.messaging.jmq.jmsserver.management.mbeans

Source Code of com.sun.messaging.jmq.jmsserver.management.mbeans.BrokerConfig

/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2000-2010 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License").  You
* may not use this file except in compliance with the License.  You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt.  See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license."  If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above.  However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/

/*
* @(#)BrokerConfig.java  1.25 06/28/07
*/

package com.sun.messaging.jmq.jmsserver.management.mbeans;

import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import java.util.Date;

import javax.management.MBeanAttributeInfo;
import javax.management.MBeanParameterInfo;
import javax.management.MBeanOperationInfo;
import javax.management.MBeanNotificationInfo;
import javax.management.AttributeChangeNotification;
import javax.management.MBeanException;
import javax.management.ObjectName;

import com.sun.messaging.jmq.Version;
import com.sun.messaging.jmq.util.admin.ConnectionInfo;
import com.sun.messaging.jmq.util.admin.MessageType;
import com.sun.messaging.jmq.util.log.Logger;
import com.sun.messaging.jmq.io.Status;
import com.sun.messaging.jmq.jmsserver.Globals;
import com.sun.messaging.jmq.jmsserver.BrokerStateHandler;
import com.sun.messaging.jmq.jmsserver.Broker;
import com.sun.messaging.jmq.jmsserver.config.ConfigListener;
import com.sun.messaging.jmq.jmsserver.config.PropertyUpdateException;
import com.sun.messaging.jmq.jmsserver.resources.BrokerResources;
import com.sun.messaging.jmq.jmsserver.util.BrokerException;
import com.sun.messaging.jmq.jmsserver.data.handlers.admin.ResetMetricsHandler;
import com.sun.messaging.jmq.jmsserver.management.agent.Agent;
import com.sun.messaging.jmq.jmsserver.management.util.ConnectionUtil;

import com.sun.messaging.jms.management.server.*;

public class BrokerConfig extends MQMBeanReadWrite implements ConfigListener {
    private Properties brokerProps = null;

    private static MBeanAttributeInfo[] attrs = {
      new MBeanAttributeInfo(BrokerAttributes.BROKER_ID,
          String.class.getName(),
          mbr.getString(mbr.I_BKR_ATTR_BKR_ID),
          true,
          false,
          false),

      new MBeanAttributeInfo(BrokerAttributes.INSTANCE_NAME,
          String.class.getName(),
          mbr.getString(mbr.I_BKR_ATTR_INSTANCE_NAME),
          true,
          false,
          false),

      new MBeanAttributeInfo(BrokerAttributes.HOST,
          String.class.getName(),
          mbr.getString(mbr.I_BKR_ATTR_HOST),
          true,
          false,
          false),

      new MBeanAttributeInfo(BrokerAttributes.PORT,
          Integer.class.getName(),
          mbr.getString(mbr.I_BKR_ATTR_PORT),
          true,
          true,
          false),

      new MBeanAttributeInfo(BrokerAttributes.VERSION,
          String.class.getName(),
          mbr.getString(mbr.I_BKR_ATTR_VERSION),
          true,
          false,
          false)
      };

    private static MBeanParameterInfo[] shutdownSignature = {
      new MBeanParameterInfo("noFailover", Boolean.class.getName(),
            mbr.getString(mbr.I_BKR_OP_SHUTDOWN_PARAM_NO_FAILOVER_DESC)),
      new MBeanParameterInfo("time", Long.class.getName(),
            mbr.getString(mbr.I_BKR_OP_SHUTDOWN_PARAM_TIME_DESC))
        };

    private static MBeanParameterInfo[] takeoverSignature = {
      new MBeanParameterInfo("brokerID", String.class.getName(),
            mbr.getString(mbr.I_BKR_OP_TAKEOVER_PARAM_BROKER_ID_DESC))
        };

    private static MBeanParameterInfo[] getPropertySignature = {
      new MBeanParameterInfo("propertyName", String.class.getName(),
            mbr.getString(mbr.I_BKR_OP_GET_PROPERTY_PARAM_PROP_NAME_DESC))
        };

    private static MBeanOperationInfo[] ops = {
      new MBeanOperationInfo(BrokerOperations.GET_PROPERTY,
    mbr.getString(mbr.I_BKR_OP_GET_PROPERTY_DESC),
        getPropertySignature, String.class.getName(),
        MBeanOperationInfo.INFO),

      new MBeanOperationInfo(BrokerOperations.QUIESCE,
    mbr.getString(mbr.I_BKR_OP_QUIESCE_DESC),
        null, Void.TYPE.getName(),
        MBeanOperationInfo.ACTION),

      new MBeanOperationInfo(BrokerOperations.RESET_METRICS,
    mbr.getString(mbr.I_BKR_OP_RESET_METRICS_DESC),
        null, Void.TYPE.getName(),
        MBeanOperationInfo.ACTION),

      new MBeanOperationInfo(BrokerOperations.RESTART,
    mbr.getString(mbr.I_BKR_OP_RESTART_DESC),
        null, Void.TYPE.getName(),
        MBeanOperationInfo.ACTION),

      new MBeanOperationInfo(BrokerOperations.SHUTDOWN,
    mbr.getString(mbr.I_BKR_OP_SHUTDOWN_DESC),
        null, Void.TYPE.getName(),
        MBeanOperationInfo.ACTION),

      new MBeanOperationInfo(BrokerOperations.SHUTDOWN,
    mbr.getString(mbr.I_BKR_OP_SHUTDOWN_DESC),
        shutdownSignature, Void.TYPE.getName(),
        MBeanOperationInfo.ACTION),

      new MBeanOperationInfo(BrokerOperations.TAKEOVER,
    mbr.getString(mbr.I_BKR_OP_TAKEOVER_DESC),
        takeoverSignature, Void.TYPE.getName(),
        MBeanOperationInfo.ACTION),

      new MBeanOperationInfo(BrokerOperations.UNQUIESCE,
    mbr.getString(mbr.I_BKR_OP_UNQUIESCE_DESC),
        null, Void.TYPE.getName(),
        MBeanOperationInfo.ACTION),
    };


    private static String[] attrChangeTypes = {
        AttributeChangeNotification.ATTRIBUTE_CHANGE
    };

    private static MBeanNotificationInfo[] notifs = {
      new MBeanNotificationInfo(
        attrChangeTypes,
        AttributeChangeNotification.class.getName(),
        mbr.getString(mbr.I_ATTR_CHANGE_NOTIFICATION)
        )
    };

    public BrokerConfig()  {
  super();

  initProps();

  com.sun.messaging.jmq.jmsserver.config.BrokerConfig cfg = Globals.getConfig();
  cfg.addListener("imq.portmapper.port", this);
    }


    public String getBrokerID()  {
        return (Globals.getBrokerID());
    }

    public String getInstanceName()  {
  return (brokerProps.getProperty("imq.instancename"));
    }

    public String getHost()  {
  return (Globals.getBrokerHostName());
    }

    public Integer getPort() throws MBeanException  {
  String s = brokerProps.getProperty("imq.portmapper.port");
  Integer i = null;

  try  {
      i = new Integer(s);
  } catch (Exception e)  {
      handleGetterException(BrokerAttributes.PORT, e);
  }

  return (i);
    }

    public void setPort(Integer newPort) throws MBeanException  {
  Integer oldVal = getPort();
  Properties p = new Properties();
  p.setProperty("imq.portmapper.port", newPort.toString());

  try  {
      com.sun.messaging.jmq.jmsserver.config.BrokerConfig cfg = Globals.getConfig();
      cfg.updateProperties(p, true);
  } catch (Exception e)  {
      handleSetterException(BrokerAttributes.PORT, e);
  }
    }

    public String getVersion()  {
  return (brokerProps.getProperty("imq.product.version"));
    }

    public void quiesce() throws MBeanException  {
  BrokerStateHandler bsh = Globals.getBrokerStateHandler();

  logger.log(Logger.INFO, "Quiesce request received by MBean " + getMBeanName());

  try  {
      bsh.quiesce();
  } catch (BrokerException e)  {
      handleOperationException(BrokerOperations.QUIESCE, e);
  }
    }

    public void resetMetrics()  {
  logger.log(Logger.INFO, "Reset metrics request received by MBean " + getMBeanName());
  ResetMetricsHandler.resetAllMetrics();
    }

    public void restart()  {
     
      // not allowed to restart an in-process broker
        if (Broker.isInProcess()) {
          String message = rb.getString(BrokerResources.E_CANNOT_RESTART_IN_PROCESS);
         
          logger.log(Logger.WARNING,
              "BrokerConfig MBean: "+message);
          return;
        }
     
        BrokerStateHandler bsh = Globals.getBrokerStateHandler();
        logger.log(Logger.INFO, "Restart request received by MBean " + getMBeanName());

        bsh.initiateShutdown("jmx",
            0,
            true,
            bsh.getRestartCode(),
            true, Broker.isInProcess(), false);
    }
   
    private boolean hasDirectConnections() {
      // Please keep this consistent with com.sun.messaging.jmq.jmsserver.data.handlers.admin.ShutdownHandler.hasDirectConnections()
    List connections = ConnectionUtil.getConnectionInfoList(null);
    if (connections.size() == 0) {
      return (false);
    }

    Iterator itr = connections.iterator();
    int i = 0;
    while (itr.hasNext()) {
      ConnectionInfo cxnInfo = (ConnectionInfo) itr.next();
      if (cxnInfo.service.equals("jmsdirect")){
        return true;
      }
    }

    return false;
  }

    public void shutdown() {
      // not allowed to shutdown an in-process broker that has direct mode connections
        if (Broker.isInProcess() && hasDirectConnections()) {
          String message = rb.getString(BrokerResources.E_CANNOT_SHUTDOWN_IN_PROCESS);
         
          logger.log(Logger.WARNING,
              "BrokerConfig MBean: "+message);
          return;
        }
     
      shutdown(Boolean.FALSE, new Long(0));
  }

    public void shutdown(Boolean noFailover, Long time)  {
  BrokerStateHandler bsh = Globals.getBrokerStateHandler();
  boolean failover = (noFailover == null ? true
        : !(noFailover.booleanValue()));

  logger.log(Logger.INFO, "Shutdown request received by MBean " + getMBeanName());

  bsh.initiateShutdown("jmx",
    (time == null ? 0 : time.longValue())* 1000,
    failover,
    0,
    true, Broker.isInProcess(), false);
    }

    public void takeover(String brokerID) throws MBeanException  {
  BrokerStateHandler bsh = Globals.getBrokerStateHandler();

  logger.log(Logger.INFO, "Request to takeover broker "
    + brokerID
    + " received by MBean " + getMBeanName());

  try  {
      bsh.takeoverBroker(brokerID, true);
  } catch (BrokerException e)  {
      handleOperationException(BrokerOperations.TAKEOVER, e);
  }
    }

    public void unquiesce() throws MBeanException  {
  BrokerStateHandler bsh = Globals.getBrokerStateHandler();

  logger.log(Logger.INFO, "Unquiesce request received by MBean " + getMBeanName());

  try  {
      bsh.stopQuiesce();
  } catch (BrokerException e)  {
      handleOperationException(BrokerOperations.UNQUIESCE, e);
  }
    }

    public String getProperty(String propertyName)  {
  return (Globals.getConfig().getProperty(propertyName));
    }

    public String getMBeanName()  {
  return ("BrokerConfig");
    }

    public String getMBeanDescription()  {
  return (mbr.getString(mbr.I_BKR_CFG_DESC));
    }

    public MBeanAttributeInfo[] getMBeanAttributeInfo()  {
  return (attrs);
    }

    public MBeanOperationInfo[] getMBeanOperationInfo()  {
  return (ops);
    }

    public MBeanNotificationInfo[] getMBeanNotificationInfo()  {
  return (notifs);
    }

    public void validate(String name, String value)
            throws PropertyUpdateException {
    }
           
    public boolean update(String name, String value) {
  Object newVal =  null;
        Object oldVal = null;

  /*
        System.err.println("### cl.update called: "
            + name
            + "="
            + value);
  */

  if (name.equals("imq.portmapper.port"))  {
      try  {
          newVal = Integer.valueOf(value);
      } catch (NumberFormatException nfe)  {
    logger.log(Logger.WARNING,
    "BrokerConfig MBean: cannot parse internal value of Port: " + nfe);

          newVal = null;
      }

      try  {
          oldVal = getPort();
      } catch (MBeanException mbe)  {
    /*
     * A warning message will be logged by getters on error
     */

          oldVal = null;
      }
            notifyAttrChange(BrokerAttributes.PORT, newVal, oldVal);

      Agent agent = Globals.getAgent();
      if (agent != null)  {
          agent.portMapperPortUpdated((Integer)oldVal, (Integer)newVal);
      }
  }

        initProps();
        return true;
    }

    public void notifyAttrChange(String attrName, Object newVal, Object oldVal)  {
  sendNotification(
      new AttributeChangeNotification(this, sequenceNumber++, new Date().getTime(),
          "Attribute change", attrName, (newVal == null ? "" : newVal.getClass().getName()),
          oldVal, newVal));
    }

    private void initProps() {
  brokerProps = Globals.getConfig().toProperties();
  Version version = Globals.getVersion();
  brokerProps.putAll(version.getProps());
    }
}
TOP

Related Classes of com.sun.messaging.jmq.jmsserver.management.mbeans.BrokerConfig

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.