Package com.sun.messaging

Source Code of com.sun.messaging.AdminConnectionFactory

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

/*
* @(#)AdminConnectionFactory.java  1.13 06/28/07
*/

package com.sun.messaging;

import java.util.Properties;
import java.util.HashMap;
import java.net.MalformedURLException;
import javax.management.JMException;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import com.sun.messaging.jmq.io.MQAddress;
import com.sun.messaging.jmq.management.JMXMQAddress;
import com.sun.messaging.jmq.jmsclient.GenericPortMapperClient;

/**
* An <code>AdminConnectionFactory</code> is used by management clients
* to create JMX connections to the  Message Queue broker. After establishing
* a connection successfully, a handle to a JMX Connector can be obtained
* which can then be used for management or monitoring operations.
* <P>
* The sample code below obtains a JMX Connector that communicates with the
* default RMI based connector on the broker that is running on the default
* host and port (localhost and port 7676).
* The administrator username and password used here is the default
* <CODE>admin</CODE> and <CODE>admin</CODE>.
* <P>
* <PRE>
*     import javax.management.*;
*     import javax.management.remote.*;
*     import com.sun.messaging.AdminConnectionFactory;
*     ...
*     AdminConnectionFactory acf;
*
*     acf = new AdminConnectionFactory();
*     System.out.println("JMXServiceURL used: " + acf.getJMXServiceURL().toString());
*
*     JMXConnector jmxc = acf.createConnection();
*
*     // Proceed to manage/monitor the broker using the JMX Connector
*     // obtained above.
*     ...
* </PRE>
* <P>
* The sample code below obtains a JMX Connector that communicates with the
* default RMI connector on the broker that is running on the host
* <CODE>myhost</CODE> on port 7979.
* The administrator username and password used here is <CODE>admin1</CODE>
* and <CODE>adminpasswd</CODE>.
* <P>
* <PRE>
*     import javax.management.*;
*     import javax.management.remote.*;
*     import com.sun.messaging.AdminConnectionFactory;
*     import com.sun.messaging.AdminConnectionConfiguration;
*     ...
*     AdminConnectionFactory acf;
*
*     acf = new AdminConnectionFactory();
*     acf.setProperty(AdminConnectionConfiguration.imqAddress,
*      "myhost:7979");
*     System.out.println("JMXServiceURL used: " + acf.getJMXServiceURL().toString());
*
*     JMXConnector jmxc = acf.createConnection("admin1", "adminpasswd");
*
*     // Proceed to manage/monitor the broker using the JMX Connector
*     // obtained above.
*     ...
* </PRE>
* <P>
* The sample code below obtains a JMX Connector that communicates with the
* RMI connector named ssljmxrmi on the broker that is running on the localhost
* and on port 7676.
* This is the JMX connector that is configured to use SSL.
* The administrator username and password used here is the default
* <CODE>admin</CODE> and <CODE>admin</CODE>.
* <P>
* <PRE>
*     import javax.management.*;
*     import javax.management.remote.*;
*     import com.sun.messaging.AdminConnectionFactory;
*     import com.sun.messaging.AdminConnectionConfiguration;
*     ...
*     AdminConnectionFactory acf;
*
*     acf = new AdminConnectionFactory();
*     acf.setProperty(AdminConnectionConfiguration.imqAddress,
*      "localhost:7676/ssljmxrmi");
*     System.out.println("JMXServiceURL used: " + acf.getJMXServiceURL().toString());
*
*     JMXConnector jmxc = acf.createConnection();
*
*     // Proceed to manage/monitor the broker using the JMX Connector
*     // obtained above.
*     ...
* </PRE>
*
* @see         com.sun.messaging.AdminConnectionConfiguration com.sun.messaging.AdminConnectionConfiguration
*/
public class AdminConnectionFactory extends com.sun.messaging.AdministeredObject {

    /** The default basename for AdministeredObject initialization */
    private static final String defaultsBase = "AdminConnectionFactory";

    /** The default Username and Password for Sun MQ client authentication */
    private static final String DEFAULT_IMQ_ADMIN_USERNAME_PASSWORD = "admin";

    /** The default Username Label */
    private static final String DEFAULT_IMQ_ADMIN_USERNAME_LABEL
        = "Default Administrator Username";

    /** The default Password Label */
    private static final String DEFAULT_IMQ_ADMIN_PASSWORD_LABEL
        = "Default Administrator Password";

    /**
     * Constructs a AdminConnectionFactory with the default configuration.
     *
     */
    public AdminConnectionFactory() {
        super(defaultsBase);
    }
    /**
     * Constructs a AdminConnectionFactory with the specified configuration.
     *
     */
    protected AdminConnectionFactory(String defaultsBase) {
        super(defaultsBase);
    }
    /**
     * Creates a Connection with the default user identity. The default user identity
     * is defined by the <code>AdminConnectionFactory</code> properties
     * <code><b>imqDefaultAdminUsername</b></code> and <code><b>imqDefaultAdminPassword</b></code>
     *
     * @return a newly created Connection.
     *
     * @exception JMException if a JMS error occurs.
     * @see AdminConnectionConfiguration#imqDefaultAdminUsername
     * @see AdminConnectionConfiguration#imqDefaultAdminPassword
     */ 
    public JMXConnector createConnection() throws JMException {
  String u = null, p = null;
  try  {
            u = getCurrentConfiguration().getProperty(
      AdminConnectionConfiguration.imqDefaultAdminUsername);
            p = getCurrentConfiguration().getProperty(
      AdminConnectionConfiguration.imqDefaultAdminPassword);
  } catch (Exception e)  {
  }

        return createConnection(u, p);
    }

    /**
     * Creates a Connection with a specified user identity.
     *
     * @param username the caller's user name
     * @param password the caller's password
     *
     * @return a newly created connection.
     *
     * @exception JMException if a JMX error occurs.
     */ 
    public JMXConnector createConnection(String username, String password)
    throws JMException {
  JMXConnector jmxc = null;
  JMXServiceURL url = null;

  url = getJMXServiceURL();
  /*
  System.err.println("url: " + url);
  */

  try  {
      HashMap env = new HashMap();
      String[] credentials = new String[] { username, password };
      env.put(JMXConnector.CREDENTIALS, credentials);

      jmxc = JMXConnectorFactory.connect(url, env);
  } catch (Exception e)  {
      JMException jme
    = new JMException("Caught exception when creating JMXConnector");
      jme.initCause(e);

      throw (jme);
  }

        return (jmxc);
    }

    /**
     * Returns a pretty printed version of the provider specific
     * information for this ConnectionFactory object.
     *
     * @return the pretty printed string.
     */
    public String toString() {
        return ("Oracle GlassFish(tm) Server MQ AdminConnectionFactory" + super.toString());
    }

    /**
     * Returns the relevant JMXServiceURL that is advertised by the
     * portmapper. This url will be used in connection attempts.
     *
     * @return The relevant JMXServiceURL that is advertised by the
     * portmapper.
     */
    public JMXServiceURL getJMXServiceURL() throws JMException {
  GenericPortMapperClient pmc;
  JMXMQAddress mqAddr;
  JMXServiceURL url;
  String addr = null, urlString, host, connectorName;
  int port;

  try  {
      addr = getCurrentConfiguration().getProperty(
      AdminConnectionConfiguration.imqAddress);

      mqAddr = JMXMQAddress.createAddress(addr);
      host = mqAddr.getHostName();
      port = mqAddr.getPort();
      connectorName = mqAddr.getServiceName();

      /*
      System.out.println("ACF: address used: " + addr);
      System.out.println("\thost: " + host);
      System.out.println("\tport: " + port);
      System.out.println("\tconnector: " + connectorName);
      */

  } catch (Exception e)  {
      JMException jme
    = new JMException("Caught exception when parsing address: "
          + addr);
      jme.initCause(e);

      throw (jme);
  }

  /*
  System.out.println("host: " + host);
  System.out.println("port: " + port);
  System.out.println("connectorName: " + connectorName);
  */

  try  {
      pmc = new GenericPortMapperClient(host, port);

      /*
       * Should add code to check/compare version of client runtime and
       * broker here.
       */

  } catch (Exception e)  {
      JMException jme
    = new JMException("Caught exception when contacing portmapper.");
      jme.initCause(e);

      throw (jme);
  }

  urlString = pmc.getProperty("url", null, "JMX", connectorName);

  if (urlString == null)  {
      JMException jme = new JMException("No JMXServiceURL was found for connector "
      + connectorName + ".\n"
      + "Address used: "
      + addr);

      throw (jme);
  }

  try  {
      url = new JMXServiceURL(urlString);
  } catch (MalformedURLException mfe)  {
      JMException jme
    = new JMException("Caught exception when creating JMXServiceURL.");
      jme.initCause(mfe);

      throw (jme);
  }
 
  return (url);
    }

    /**
     * Sets the minimum <code>AdminConnectionFactory</code> configuration defaults
     * required to connect to the MQ Administration Service.
     */ 
    public void setDefaultConfiguration() {
        configuration = new Properties();
        configurationTypes = new Properties();
        configurationLabels = new Properties();

        configuration.put(AdminConnectionConfiguration.imqDefaultAdminUsername,
                                DEFAULT_IMQ_ADMIN_USERNAME_PASSWORD);
        configurationTypes.put(AdminConnectionConfiguration.imqDefaultAdminUsername,
                                AO_PROPERTY_TYPE_STRING);
        configurationLabels.put(AdminConnectionConfiguration.imqDefaultAdminUsername,
                                DEFAULT_IMQ_ADMIN_USERNAME_LABEL);
        configuration.put(AdminConnectionConfiguration.imqDefaultAdminPassword,
                                DEFAULT_IMQ_ADMIN_USERNAME_PASSWORD);
        configurationTypes.put(AdminConnectionConfiguration.imqDefaultAdminPassword,
                                AO_PROPERTY_TYPE_STRING);
        configurationLabels.put(AdminConnectionConfiguration.imqDefaultAdminPassword,
                                DEFAULT_IMQ_ADMIN_PASSWORD_LABEL);
    }

}
TOP

Related Classes of com.sun.messaging.AdminConnectionFactory

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.