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

Source Code of com.sun.messaging.jmq.jmsserver.management.util.DestinationUtil

/*
* 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.
*/

/*
* @(#)DestinationUtil.java  1.21 06/28/07
*/

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

import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;

import javax.management.*;

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

import com.sun.messaging.jmq.jmsserver.Globals;
import com.sun.messaging.jmq.jmsserver.resources.BrokerResources;
import com.sun.messaging.jmq.jmsserver.core.Destination;
import com.sun.messaging.jmq.jmsserver.core.DestinationUID;
import com.sun.messaging.jmq.jmsserver.util.BrokerException;
import com.sun.messaging.jmq.jmsserver.util.ConflictException;
import com.sun.messaging.jmq.jmsserver.util.memory.MemoryGlobals;
import com.sun.messaging.jmq.jmsserver.data.handlers.admin.GetDestinationsHandler;
import com.sun.messaging.jmq.jmsserver.data.handlers.admin.CreateDestinationHandler;
import com.sun.messaging.jmq.jmsserver.service.ConnectionUID;

import com.sun.messaging.jmq.io.Status;

import com.sun.messaging.jmq.util.SizeString;
import com.sun.messaging.jmq.util.DestState;
import com.sun.messaging.jmq.util.DestType;
import com.sun.messaging.jmq.util.ClusterDeliveryPolicy;
import com.sun.messaging.jmq.util.admin.MessageType;
import com.sun.messaging.jmq.util.DestLimitBehavior;
import com.sun.messaging.jmq.util.admin.DestinationInfo;
import com.sun.messaging.jmq.util.log.Logger;

public class DestinationUtil {
    private static String[] queueCreateAttrs  = {
          DestinationAttributes.CONSUMER_FLOW_LIMIT,
          DestinationAttributes.LOCAL_ONLY,
          DestinationAttributes.LIMIT_BEHAVIOR,
          DestinationAttributes.LOCAL_DELIVERY_PREFERRED,
          DestinationAttributes.MAX_BYTES_PER_MSG,
          DestinationAttributes.MAX_NUM_ACTIVE_CONSUMERS,
          DestinationAttributes.MAX_NUM_BACKUP_CONSUMERS,
          DestinationAttributes.MAX_NUM_MSGS,
          DestinationAttributes.MAX_NUM_PRODUCERS,
          DestinationAttributes.MAX_TOTAL_MSG_BYTES,
          DestinationAttributes.USE_DMQ,
          DestinationAttributes.VALIDATE_XML_SCHEMA_ENABLED,
          DestinationAttributes.XML_SCHEMA_URI_LIST,
          DestinationAttributes.NEXT_MESSAGE_ID
      };

    private static String[] topicCreateAttrs  = {
          DestinationAttributes.CONSUMER_FLOW_LIMIT,
          DestinationAttributes.LOCAL_ONLY,
          DestinationAttributes.LIMIT_BEHAVIOR,
          DestinationAttributes.MAX_BYTES_PER_MSG,
          DestinationAttributes.MAX_NUM_MSGS,
          DestinationAttributes.MAX_NUM_PRODUCERS,
          DestinationAttributes.MAX_TOTAL_MSG_BYTES,
          DestinationAttributes.USE_DMQ,
          DestinationAttributes.VALIDATE_XML_SCHEMA_ENABLED,
          DestinationAttributes.XML_SCHEMA_URI_LIST
      };

    public static int toExternalDestState(int internalDestState)  {
  switch (internalDestState)  {
  case DestState.CONSUMERS_PAUSED:
      return (DestinationState.CONSUMERS_PAUSED);

  case DestState.PRODUCERS_PAUSED:
      return (DestinationState.PRODUCERS_PAUSED);

  case DestState.PAUSED:
      return (DestinationState.PAUSED);

  case DestState.RUNNING:
      return (DestinationState.RUNNING);

  default:
      return (DestinationState.UNKNOWN);

  }
    }

    public static int toInternalDestState(int externalDestState)  {
  switch (externalDestState)  {
  case DestinationState.CONSUMERS_PAUSED:
      return (DestState.CONSUMERS_PAUSED);

  case DestinationState.PRODUCERS_PAUSED:
      return (DestState.PRODUCERS_PAUSED);

  case DestinationState.PAUSED:
      return (DestState.PAUSED);

  case DestinationState.RUNNING:
      return (DestState.RUNNING);

  default:
      return (DestState.UNKNOWN);

  }
    }

    /*
     * Returns an ArrayList of Destinations that are visible to
     * the outside
     */
    public static List getVisibleDestinations()  {
  int  numDests = 0;

  Iterator itr = Destination.getAllDestinations();
  ArrayList al = new ArrayList();

  while (itr.hasNext()) {
      Destination oneDest = (Destination)itr.next();
      if (!isVisibleDestination(oneDest))  {
          continue;
      }
      al.add(oneDest);
  }

  return (al);
    }

    /*
     * Returns an ArrayList of Destinations that are visible,
     * is temporary and matches the specified connectionID.
     */
    public static List getVisibleTemporaryDestinations(long connectionID)  {
  int  numDests = 0;

  Iterator itr = Destination.getAllDestinations();
  ArrayList al = new ArrayList();

  while (itr.hasNext()) {
      Destination oneDest = (Destination)itr.next();
      if (!isVisibleDestination(oneDest))  {
          continue;
      }

      if (!oneDest.isTemporary())  {
          continue;
      }

      ConnectionUID cxnId = oneDest.getConnectionUID();
      if (cxnId == null)  {
    continue;
      }

      if (!(cxnId.longValue() == connectionID))  {
    continue;
      }

      al.add(oneDest);
  }

  return (al);
    }


    public static boolean isVisibleDestination(Destination d)  {
        if (d.isInternal() ||
                d.isAdmin() ||
                (d.getDestinationName().equals(MessageType.JMQ_ADMIN_DEST)) ||
                (d.getDestinationName().equals(MessageType.JMQ_BRIDGE_ADMIN_DEST)))  {
      return (false);
        }

  return (true);
    }

    /*
     * Get DestinationInfo object from Destination object.
     */
    public static DestinationInfo getDestinationInfo(Destination d)  {
  DestinationInfo di = GetDestinationsHandler.getDestinationInfo(d);

  return (di);
    }

    public static String toExternalDestLimitBehavior(int internalDestLimitBehavior)  {
  switch (internalDestLimitBehavior)  {
  case DestLimitBehavior.FLOW_CONTROL:
      return (DestinationLimitBehavior.FLOW_CONTROL);
  case DestLimitBehavior.REMOVE_OLDEST:
      return (DestinationLimitBehavior.REMOVE_OLDEST);
  case DestLimitBehavior.REJECT_NEWEST:
      return (DestinationLimitBehavior.REJECT_NEWEST);
  case DestLimitBehavior.REMOVE_LOW_PRIORITY:
      return (DestinationLimitBehavior.REMOVE_LOW_PRIORITY);
  default:
      return (DestinationLimitBehavior.UNKNOWN);
  }
    }

    public static int toInternalDestLimitBehavior(String externalDestLimitBehavior)  {
  if (externalDestLimitBehavior.equals(DestinationLimitBehavior.FLOW_CONTROL))  {
      return (DestLimitBehavior.FLOW_CONTROL);
  } else if (externalDestLimitBehavior.equals(DestinationLimitBehavior.REMOVE_OLDEST))  {
      return (DestLimitBehavior.REMOVE_OLDEST);
  } else if (externalDestLimitBehavior.equals(DestinationLimitBehavior.REJECT_NEWEST))  {
      return (DestLimitBehavior.REJECT_NEWEST);
  } else if (externalDestLimitBehavior.
      equals(DestinationLimitBehavior.REMOVE_LOW_PRIORITY))  {
      return (DestLimitBehavior.REMOVE_LOW_PRIORITY);
  } else  {
      return (DestLimitBehavior.UNKNOWN);
  }
    }
  
    public static int toInternalPauseType(String externalPauseType)  {
  if (externalPauseType.equals(DestinationPauseType.PRODUCERS))  {
      return (DestState.PRODUCERS_PAUSED);
  } else if (externalPauseType.equals(DestinationPauseType.CONSUMERS))  {
      return (DestState.CONSUMERS_PAUSED);
  } else if (externalPauseType.equals(DestinationPauseType.ALL))  {
      return (DestState.PAUSED);
  }

  return (DestState.UNKNOWN);
    }

    public static String toExternalPauseType(int internalPauseType)  {
  switch(internalPauseType)  {
  case DestState.PRODUCERS_PAUSED:
      return (DestinationPauseType.PRODUCERS);
  case DestState.CONSUMERS_PAUSED:
      return (DestinationPauseType.CONSUMERS);
  case DestState.PAUSED:
      return (DestinationPauseType.ALL);
  default:
      return ("UNKNOWN");
  }
    }

    public static boolean isValidPauseType(String pauseType)  {
  if (pauseType.equals(DestinationPauseType.PRODUCERS))  {
      return (true);
  } else if (pauseType.equals(DestinationPauseType.CONSUMERS))  {
      return (true);
  } else if (pauseType.equals(DestinationPauseType.ALL))  {
      return (true);
  }

  return (false);
    }

    public static void pauseAllDestinations(int internalPauseType)  {
        Iterator itr = Destination.getAllDestinations();

        while (itr.hasNext()) {
            Destination d =(Destination)itr.next();
            /*
             * Skip internal, admin, or temp destinations.
             * Skipping temp destinations may need to be
             * revisited.
             */
            if (d.isInternal() || d.isAdmin() || d.isTemporary())  {
                continue;
            }

            d.pauseDestination(internalPauseType);
        }

    }

    public static void resumeAllDestinations()  {
        Iterator itr = Destination.getAllDestinations();

        while (itr.hasNext()) {
            Destination d =(Destination)itr.next();
            if (d.isPaused()) {
                d.resumeDestination();
            }
        }
    }

    public static void compactAllDestinations() throws BrokerException  {
        Iterator itr = Destination.getAllDestinations();
        boolean docompact = true;
  String errMsg = null;
  BrokerResources rb = Globals.getBrokerResources();
  Logger logger = Globals.getLogger();

        while (itr.hasNext()) {
            // make sure all are paused
            Destination d = (Destination)itr.next();

            /*
             * Skip internal, admin, or temp destinations.
             * Skipping temp destinations may need to be
             * revisited.
             */
            if (d.isInternal() || d.isAdmin() || d.isTemporary())  {
                continue;
            }

            if (!d.isPaused()) {
                docompact = false;
                String msg = rb.getString(
                        rb.E_SOME_DESTINATIONS_NOT_PAUSED);
                errMsg = rb.getString(rb.X_COMPACT_DSTS_EXCEPTION, msg);

    throw (new BrokerException(errMsg));
            }
        }

        if (docompact) {
            itr = Destination.getAllDestinations();
            while (itr.hasNext()) {
                Destination d = (Destination)itr.next();

                /*
                 * Skip internal, admin, or temp destinations.
                 * Skipping temp destinations may need to be
                 * revisited.
                 */
                if (d.isInternal() || d.isAdmin() || d.isTemporary())  {
                    continue;
                }

                d.compact();
            }
        }
    }
   
    public static void checkDestType(String type) throws BrokerException  {
  if (type == null)  {
      throw new BrokerException("Null destination type specified");
  }

  if (type.equals(DestinationType.QUEUE) ||
      type.equals(DestinationType.TOPIC))  {
     
      return;
  }

  BrokerResources rb = Globals.getBrokerResources();
  throw new BrokerException(rb.getString(rb.X_JMX_INVALID_DEST_TYPE_SPEC, type));
    }

    public static void checkCreateDestinationAttrs(String type, AttributeList attrs) throws BrokerException {
  String[] validAttrs = null;

  checkDestType(type);

  if (attrs == null)  {
      return;
  }

        if (type.equals(DestinationType.QUEUE))  {
      validAttrs = queueCreateAttrs;
  } else if (type.equals(DestinationType.TOPIC))  {
      validAttrs = topicCreateAttrs;
        }

  for (Iterator i = attrs.iterator(); i.hasNext();) {
      Attribute attr = (Attribute) i.next();
      String name = attr.getName();
     
      if (!checkOneDestAttr(name, validAttrs))  {
          BrokerResources rb = Globals.getBrokerResources();
    String err;

    if (type.equals(DestinationType.QUEUE))  {
              err = rb.getString(rb.X_JMX_INVALID_CREATE_TIME_ATTR_SPEC_QUEUE, name);
    } else  {
              err = rb.getString(rb.X_JMX_INVALID_CREATE_TIME_ATTR_SPEC_TOPIC, name);
    }
    throw new BrokerException(err);
      }
  }
    }

    /*
     * Returns true if attrName is valid (ie in validAttrs array),
     * false otherwise.
     */
    private static boolean checkOneDestAttr(String attrName, String[] validAttrs)  {
  if (attrName == null)  {
      return(false);
  }

  if (validAttrs == null)  {
      return(false);
  }

  for (int i = 0; i < validAttrs.length; ++i)  {
      if (attrName.equals(validAttrs[i]))  {
    return (true);
      }
  }
  return(false);
    }

    public static void createDestination(DestinationInfo info) throws BrokerException {
        String errMsg = null;
        int status = Status.OK;
  BrokerResources rb = Globals.getBrokerResources();
  Logger logger = Globals.getLogger();

        // Default attributes of the destination
        int type = DestType.DEST_TYPE_QUEUE | DestType.DEST_FLAVOR_SINGLE;
        int maxMessages = -1;
        SizeString maxMessageBytes = null;
        SizeString maxMessageSize = null;

        if (MemoryGlobals.MEM_DISALLOW_CREATE_DEST) {
            status = Status.ERROR;
            errMsg = rb.W_LOW_MEM_REJECT_DEST;
        } else if (info.isModified(DestinationInfo.NAME)) {
            if (info.isModified(DestinationInfo.TYPE)) {
                type = info.type;
            }
            if (info.isModified(DestinationInfo.MAX_MESSAGES)) {
                maxMessages = info.maxMessages;
            }
            if (info.isModified(DestinationInfo.MAX_MESSAGE_BYTES)) {
                maxMessageBytes = new SizeString();
                maxMessageBytes.setBytes(info.maxMessageBytes);
            }
            if (info.isModified(DestinationInfo.MAX_MESSAGE_SIZE)) {
                maxMessageSize = new SizeString();
                maxMessageSize.setBytes(info.maxMessageSize);
            }

        } else {
            status = Status.ERROR;
            errMsg = rb.X_NO_DEST_NAME_SET;
        }
        //
        //XXX create destination
        if (status == Status.OK) {

            if (DestType.destNameIsInternal(info.name)) {
                status = Status.ERROR;
                errMsg =  rb.getKString( rb.X_CANNOT_CREATE_INTERNAL_DEST,
                            info.name,
          DestType.INTERNAL_DEST_PREFIX);
      } else  {
                if (CreateDestinationHandler.isValidDestinationName(info.name)) {

                    try {
                        Destination.createDestination(info.name,
                          type);
                    } catch (Exception ex) {
                        status = Status.ERROR;
                        errMsg =  rb.getString( rb.X_CREATE_DEST_EXCEPTION,
                            info.name, getMessageFromException(ex));
                       if (ex instanceof ConflictException)
                           logger.log(Logger.INFO, errMsg, ex);
                       else
                           logger.logStack(Logger.INFO, errMsg, ex);
                    }
                } else {
                    status = Status.ERROR;
                    errMsg =  rb.getKString( rb.X_DEST_NAME_INVALID,
                            info.name);
                }
      }
        }

        if (status == Status.OK) {
            try {

                Destination d = Destination.getDestination(info.name, DestType.isQueue(type));

                d.setCapacity(maxMessages);
                d.setByteCapacity(maxMessageBytes);
                d.setMaxByteSize(maxMessageSize);
                if (info.isModified(info.DEST_SCOPE)) {
                    int scope = info.destScope;
                    d.setScope(scope)
                }
                if (info.isModified(info.DEST_LIMIT)) {
                    int destlimit = info.destLimitBehavior;
                    d.setLimitBehavior(destlimit);
                }
                if (info.isModified(info.DEST_PREFETCH)) {
                    int prefetch = info.maxPrefetch;
                    d.setMaxPrefetch(prefetch);
                }
                if (info.isModified(info.DEST_CDP)) {
                    int clusterdeliverypolicy = info.destCDP;
                    d.setClusterDeliveryPolicy(clusterdeliverypolicy);
                }
                if (info.isModified(info.MAX_ACTIVE_CONSUMERS)) {
                    int maxcons = info.maxActiveConsumers;
                    d.setMaxActiveConsumers(maxcons);
                }
                if (info.isModified(info.MAX_PRODUCERS)) {
                    int maxp = info.maxProducers;
                    d.setMaxProducers(maxp);
                }
                if (info.isModified(info.MAX_FAILOVER_CONSUMERS)) {
                    int maxcons = info.maxFailoverConsumers;
                    d.setMaxFailoverConsumers(maxcons);
                }
                if (info.isModified(info.MAX_SHARED_CONSUMERS)) {
                    int maxsharedcons = info.maxNumSharedConsumers;
                    d.setMaxSharedConsumers(maxsharedcons);
                }
                if (info.isModified(info.SHARE_FLOW_LIMIT)) {
                    int sflowlimit = info.sharedConsumerFlowLimit;
                    d.setSharedFlowLimit(sflowlimit);
                }
                if (info.isModified(info.USE_DMQ)) {
                    boolean dmq = info.useDMQ;
                    d.setUseDMQ(dmq);
                }
                d.update();
             
    /*
    // audit logging for create destination
    Globals.getAuditSession().destinationOperation(
      con.getUserName(), con.remoteHostString(),
      MQAuditSession.CREATE_DESTINATION,
      d.isQueue()?MQAuditSession.QUEUE:MQAuditSession.TOPIC,
      d.getDestinationName());
    */

            } catch (Exception ex) {

                // remove the destination
                try {
                    DestinationUID duid = DestinationUID.getUID(
                        info.name, DestType.isQueue(type));
                    Destination.removeDestination(duid, false, ex.toString());
                } catch (Exception ex1) {
                    // if we cant destroy .. its ok .. ignore the exception
                }

                status = Status.ERROR;
                errMsg = rb.getString( rb.X_UPDATE_DEST_EXCEPTION,
                            info.name, getMessageFromException(ex));

                logger.log(Logger.WARNING, errMsg, ex);

            }
        }

  if (status != Status.OK)  {
      throw new BrokerException(errMsg);
  }
    }

    /**
     * Get a message from an Exception. This basically checks
     * if the exception is a BrokerException and properly formats
     * the linked exceptions message. The string returned does
     * NOT include the exception name.
     */
    public static String getMessageFromException(Exception e) {

  String m = e.getMessage();

  if (e instanceof BrokerException) {
            Throwable root_ex = ((BrokerException)e).getCause();
            if (root_ex == null) return m; // no root cause
      String lm = root_ex.getMessage();

      if (lm != null) {
          m = m + "\n" + lm;
            }
  }
        return m;
    }

    public static DestinationInfo getDestinationInfoFromAttrs(String type,
            String destName, AttributeList attrs)  {
  DestinationInfo info = new DestinationInfo();

  info.setName(destName);

  if (type.equals(DestinationType.QUEUE))  {
      info.setType(DestType.DEST_TYPE_QUEUE);
  } else if (type.equals(DestinationType.TOPIC))  {
      info.setType(DestType.DEST_TYPE_TOPIC);
  }

  if (attrs == null)  {
      return (info);
  }

  /*
   * We assume that type checking was already handled
   */

  for (Iterator i = attrs.iterator(); i.hasNext();) {
      Attribute attr = (Attribute) i.next();
      String name = attr.getName();
      Object value = attr.getValue();

      if (name.equals(DestinationAttributes.CONSUMER_FLOW_LIMIT))  {
    info.setPrefetch(((Long)value).intValue());
      }

      if (name.equals(DestinationAttributes.LOCAL_ONLY))  {
    info.setScope(((Boolean)value).booleanValue());
      }

      if (name.equals(DestinationAttributes.LIMIT_BEHAVIOR))  {
    info.setLimitBehavior( toInternalDestLimitBehavior((String)value) );
      }

      if (name.equals(DestinationAttributes.LOCAL_DELIVERY_PREFERRED))  {
    int cdp;

    if (((Boolean)value).booleanValue())  {
        cdp = ClusterDeliveryPolicy.LOCAL_PREFERRED;
    } else  {
        cdp = ClusterDeliveryPolicy.DISTRIBUTED;
    }
    info.setClusterDeliveryPolicy(cdp);
      }

      if (name.equals(DestinationAttributes.MAX_BYTES_PER_MSG))  {
    info.setMaxMessageSize(((Long)value).longValue());
      }

      if (name.equals(DestinationAttributes.MAX_NUM_ACTIVE_CONSUMERS))  {
    info.setMaxActiveConsumers(((Integer)value).intValue());
      }

      if (name.equals(DestinationAttributes.MAX_NUM_BACKUP_CONSUMERS))  {
    info.setMaxFailoverConsumers(((Integer)value).intValue());
      }

      if (name.equals(DestinationAttributes.MAX_NUM_MSGS))  {
    info.setMaxMessages(((Long)value).intValue());
      }

      if (name.equals(DestinationAttributes.MAX_NUM_PRODUCERS))  {
    info.setMaxProducers(((Integer)value).intValue());
      }

      if (name.equals(DestinationAttributes.MAX_TOTAL_MSG_BYTES))  {
    info.setMaxMessageBytes(((Long)value).longValue());
      }

      if (name.equals(DestinationAttributes.USE_DMQ))  {
    info.setUseDMQ(((Boolean)value).booleanValue());
      }
  }

  return (info);
    }

    public static ObjectName getConfigObjectName(Destination d)
      throws MalformedObjectNameException {
  ObjectName o;

        o = MQObjectName.createDestinationConfig(
                    d.isQueue() ?
      DestinationType.QUEUE : DestinationType.TOPIC,
                    d.getDestinationName());

  return (o);
    }

    public static ObjectName getMonitorObjectName(Destination d)
      throws MalformedObjectNameException {
  ObjectName o;

        o = MQObjectName.createDestinationMonitor(
                    d.isQueue() ?
      DestinationType.QUEUE : DestinationType.TOPIC,
                    d.getDestinationName());

  return (o);
    }

    public static Object convertAttrValueInternaltoExternal(int attr,
      Object value)  {
  Object tmp;

  switch (attr)  {
  /*
   * All the other cases return the right type/value
  case DestinationInfo.DEST_PREFETCH:
  case DestinationInfo.USE_DMQ:
  case DestinationInfo.DEST_CDP:
  case DestinationInfo.MAX_MESSAGE_SIZE:
  case DestinationInfo.MAX_ACTIVE_CONSUMERS:
  case DestinationInfo.MAX_FAILOVER_CONSUMERS:
  case DestinationInfo.MAX_MESSAGES:
  case DestinationInfo.MAX_PRODUCERS:
  case DestinationInfo.MAX_MESSAGE_BYTES:
      return (value);
  */

  case DestinationInfo.DEST_LIMIT:
      if ((value != null) && (value instanceof Integer))  {
    Integer i = (Integer)value;
          return (DestinationUtil.toExternalDestLimitBehavior(i.intValue()));
      } else  {
          return (DestinationLimitBehavior.UNKNOWN);
      }

  default:
      return (value);
  }

    }

    /*
     * Convert attribute from DestinationInfo to attribute in DestinationAttributes
     */
    public static String getAttrNameFromDestinationInfoAttr(int attr)  {
  String attrName = null;

  switch (attr)  {
  case DestinationInfo.MAX_MESSAGES:
      return(DestinationAttributes.MAX_NUM_MSGS);

  case DestinationInfo.MAX_MESSAGE_SIZE:
      return(DestinationAttributes.MAX_BYTES_PER_MSG);

  case DestinationInfo.MAX_MESSAGE_BYTES:
      return(DestinationAttributes.MAX_TOTAL_MSG_BYTES);

  case DestinationInfo.DEST_LIMIT:
      return(DestinationAttributes.LIMIT_BEHAVIOR);

  case DestinationInfo.DEST_CDP:
      return(DestinationAttributes.LOCAL_DELIVERY_PREFERRED);

  case DestinationInfo.MAX_ACTIVE_CONSUMERS:
      return(DestinationAttributes.MAX_NUM_ACTIVE_CONSUMERS);

  case DestinationInfo.MAX_FAILOVER_CONSUMERS:
      return(DestinationAttributes.MAX_NUM_BACKUP_CONSUMERS);

  case DestinationInfo.MAX_PRODUCERS:
      return(DestinationAttributes.MAX_NUM_PRODUCERS);

  case DestinationInfo.DEST_PREFETCH:
      return(DestinationAttributes.CONSUMER_FLOW_LIMIT);

  case DestinationInfo.USE_DMQ:
      return(DestinationAttributes.USE_DMQ);

  /*
   * The following from DestinationInfo is not used/supported:
   *
   *   DestinationInfo.MAX_SHARED_CONSUMERS:
   *   DestinationInfo.DEST_PREFETCH:
   *   DestinationInfo.DEST_SCOPE:
   *
   */

  default:
      return (null);
  }
    }

    public static void checkPauseType(String pauseType) throws IllegalArgumentException  {
  if (pauseType.equals(DestinationPauseType.ALL) ||
      pauseType.equals(DestinationPauseType.PRODUCERS) ||
      pauseType.equals(DestinationPauseType.CONSUMERS))  {
     
      return;
  }

  BrokerResources rb = Globals.getBrokerResources();

  throw new IllegalArgumentException(rb.getString(rb.X_JMX_INVALID_DEST_PAUSE_TYPE_SPEC, pauseType));
    }


}
TOP

Related Classes of com.sun.messaging.jmq.jmsserver.management.util.DestinationUtil

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.