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

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

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

/*
* @(#)TransactionUtil.java  1.8 06/28/07
*/

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

import java.util.Vector;
import java.util.Enumeration;

import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeDataSupport;
import javax.management.openmbean.CompositeType;
import javax.management.openmbean.OpenType;
import javax.management.openmbean.SimpleType;
import javax.management.openmbean.OpenDataException;

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.data.TransactionList;
import com.sun.messaging.jmq.jmsserver.data.TransactionUID;
import com.sun.messaging.jmq.jmsserver.data.TransactionState;
import com.sun.messaging.jmq.jmsserver.util.BrokerException;
import com.sun.messaging.jmq.util.JMQXid;

public class TransactionUtil {
    /*
     * Transaction Info item names for Monitor MBeans
     */
    private static final String[] transactionInfoMonitorItemNames = {
                            TransactionInfo.CLIENT_ID,
                            TransactionInfo.CONNECTION_STRING,
                            TransactionInfo.CREATION_TIME,
                            TransactionInfo.NUM_ACKS,
                            TransactionInfo.NUM_MSGS,
                            TransactionInfo.STATE,
                            TransactionInfo.STATE_LABEL,
                            TransactionInfo.TRANSACTION_ID,
                            TransactionInfo.USER,
                            TransactionInfo.XID
                    };

    /*
     * Transaction Info item description for Monitor MBeans
     * TBD: use real descriptions
     */
    private static final String[] transactionInfoMonitorItemDesc
          = transactionInfoMonitorItemNames;

    /*
     * Transaction Info item types for Monitor MBeans
     */
    private static final OpenType[] transactionInfoMonitorItemTypes = {
          SimpleType.STRING,    // client ID
          SimpleType.STRING,    // connection string
          SimpleType.LONG,    // creation time
          SimpleType.LONG,    // num acks
          SimpleType.LONG,    // num msgs
          SimpleType.INTEGER,    // state
          SimpleType.STRING,    // state label
          SimpleType.STRING,    // transaction ID
          SimpleType.STRING,    // user
          SimpleType.STRING    // xid
                    };

    /*
     * Transaction Info composite type for Monitor MBeans
     */
    private static CompositeType monitorCompType = null;

    public static int toExternalTransactionState(int internalTransactionState)  {
  switch (internalTransactionState)  {
  case TransactionState.CREATED:
      return (com.sun.messaging.jms.management.server.TransactionState.CREATED);

  case TransactionState.STARTED:
      return (com.sun.messaging.jms.management.server.TransactionState.STARTED);

  case TransactionState.FAILED:
      return (com.sun.messaging.jms.management.server.TransactionState.FAILED);

  case TransactionState.INCOMPLETE:
      return (com.sun.messaging.jms.management.server.TransactionState.INCOMPLETE);

  case TransactionState.COMPLETE:
      return (com.sun.messaging.jms.management.server.TransactionState.COMPLETE);

  case TransactionState.PREPARED:
      return (com.sun.messaging.jms.management.server.TransactionState.PREPARED);

  case TransactionState.COMMITTED:
      return (com.sun.messaging.jms.management.server.TransactionState.COMMITTED);

  case TransactionState.ROLLEDBACK:
      return (com.sun.messaging.jms.management.server.TransactionState.ROLLEDBACK);

  case TransactionState.TIMED_OUT:
      return (com.sun.messaging.jms.management.server.TransactionState.TIMED_OUT);

  default:
      return (-1);

  }
    }

    public static int toInternalTransactionState(int externalTransactionState)  {
  switch (externalTransactionState)  {
  case com.sun.messaging.jms.management.server.TransactionState.CREATED:
      return (TransactionState.CREATED);

  case com.sun.messaging.jms.management.server.TransactionState.STARTED:
      return (TransactionState.STARTED);

  case com.sun.messaging.jms.management.server.TransactionState.FAILED:
      return (TransactionState.FAILED);

  case com.sun.messaging.jms.management.server.TransactionState.INCOMPLETE:
      return (TransactionState.INCOMPLETE);

  case com.sun.messaging.jms.management.server.TransactionState.COMPLETE:
      return (TransactionState.COMPLETE);

  case com.sun.messaging.jms.management.server.TransactionState.PREPARED:
      return (TransactionState.PREPARED);

  case com.sun.messaging.jms.management.server.TransactionState.COMMITTED:
      return (TransactionState.COMMITTED);

  case com.sun.messaging.jms.management.server.TransactionState.ROLLEDBACK:
      return (TransactionState.ROLLEDBACK);

  case com.sun.messaging.jms.management.server.TransactionState.TIMED_OUT:
      return (TransactionState.TIMED_OUT);

  default:
      return (-1);

  }
    }

    public static String[] getTransactionIDs()  {
  TransactionList tl = Globals.getTransactionList();
  Vector transactions = tl.getTransactions(-1);
  String ids[];

  if ((transactions == null) || (transactions.size() == 0))  {
      return (null);
  }

  ids = new String [ transactions.size() ];

  Enumeration e = transactions.elements();

  int i = 0;
  while (e.hasMoreElements()) {
      TransactionUID tid = (TransactionUID)e.nextElement();
      long    txnID = tid.longValue();

      ids[i] = Long.toString(txnID);

      i++;
  }

  return (ids);
    }

    public static CompositeData[] getTransactionInfo()
        throws BrokerException, OpenDataException  {
  String[] ids = getTransactionIDs();

  if (ids == null)  {
      return (null);
  }

  CompositeData cds[] = new CompositeData [ ids.length ];

  for (int i = 0; i < ids.length; ++i)  {
      cds[i] = getTransactionInfo(ids[i]);
  }
 
  return (cds);
    }

    public static CompositeData getTransactionInfo(String transactionID)
        throws BrokerException, OpenDataException  {
  CompositeData cd = null;
  TransactionUID tid = null;
        BrokerResources  rb = Globals.getBrokerResources();

  if (transactionID == null)  {
      throw new
    IllegalArgumentException(rb.getString(rb.X_JMX_NULL_TXN_ID_SPEC));
  }

  long longTid = 0;

  try  {
      longTid = Long.parseLong(transactionID);
  } catch (NumberFormatException e)  {
      throw new
    IllegalArgumentException(rb.getString(rb.X_JMX_INVALID_TXN_ID_SPEC, transactionID));
  }

  tid = new TransactionUID(longTid);

  if (tid == null)  {
      throw new BrokerException(rb.getString(rb.X_JMX_TXN_NOT_FOUND, transactionID));
  }

  cd = getTransactionInfo(tid);

  return (cd);
    }

    public static String getClientID(TransactionUID tid)  {
  TransactionList tl = Globals.getTransactionList();
  TransactionState ts;

  if (tl == null)  {
      return (null);
  }

  ts = tl.retrieveState(tid);

  if (ts == null)  {
      return (null);
  }

  return (ts.getClientID());
    }

    public static String getConnectionString(TransactionUID tid)  {
  TransactionList tl = Globals.getTransactionList();
  TransactionState ts;

  if (tl == null)  {
      return (null);
  }

  ts = tl.retrieveState(tid);

  if (ts == null)  {
      return (null);
  }

  return (ts.getConnectionString());
    }

    public static Long getCreationTime(TransactionUID tid)  {
  long currentTime = System.currentTimeMillis();

  return (new Long(currentTime - tid.age(currentTime)));
    }

    public static Long getNumAcks(TransactionUID tid)  {
  TransactionList tl = Globals.getTransactionList();

  if (tl == null)  {
      return (null);
  }

  return (new Long(tl.retrieveNConsumedMessages(tid)));
    }

    public static Long getNumMsgs(TransactionUID tid)  {
  TransactionList tl = Globals.getTransactionList();

  if (tl == null)  {
      return (null);
  }

  return (new Long(tl.retrieveNSentMessages(tid)));
    }

    public static Integer getState(TransactionUID tid)  {
  TransactionList tl = Globals.getTransactionList();
  TransactionState ts;

  if (tl == null)  {
      return (null);
  }

  ts = tl.retrieveState(tid);

  if (ts == null)  {
      return (null);
  }

  return (new Integer(toExternalTransactionState(ts.getState())));
    }

    public static String getStateLabel(TransactionUID tid)  {
  Integer i = getState(tid);

  if (i == null)  {
      return (null);
  }

  return (com.sun.messaging.jms.management.server.TransactionState.toString(
        i.intValue()));
    }

    public static String getUser(TransactionUID tid)  {
  TransactionList tl = Globals.getTransactionList();
  TransactionState ts;

  if (tl == null)  {
      return (null);
  }

  ts = tl.retrieveState(tid);

  if (ts == null)  {
      return (null);
  }

  return (ts.getUser());
    }

    public static String getXID(TransactionUID tid)  {
  TransactionList tl = Globals.getTransactionList();
  JMQXid xid;

  if (tl == null)  {
      return (null);
  }

  xid = tl.UIDToXid(tid);

  if (xid == null)  {
      return (null);
  }

  return (xid.toString());
    }


    private static CompositeData getTransactionInfo(TransactionUID tid)
            throws OpenDataException  {
  Object[] transactionInfoMonitorItemValues = {
                            getClientID(tid),
                            getConnectionString(tid),
                            getCreationTime(tid),
                            getNumAcks(tid),
                            getNumMsgs(tid),
                            getState(tid),
                            getStateLabel(tid),
                      Long.toString(tid.longValue()),
                            getUser(tid),
                            getXID(tid)
      };
  CompositeData cd = null;

        if (monitorCompType == null)  {
            monitorCompType = new CompositeType("TransactionMonitorInfo", "TransactionMonitorInfo",
                        transactionInfoMonitorItemNames, transactionInfoMonitorItemDesc,
        transactionInfoMonitorItemTypes);
        }

  cd = new CompositeDataSupport(monitorCompType,
      transactionInfoMonitorItemNames, transactionInfoMonitorItemValues);
 
  return (cd);
    }
}
TOP

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

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.