001: /*
002: * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
003: * PROPRIETARY/CONFIDENTIAL. Use of this product is subject to license terms.
004: */
005: package com.sun.portal.monitoring;
006:
007: import com.sun.portal.monitoring.security.sasl.SaslContext;
008: import com.sun.portal.monitoring.security.sasl.SaslProvider;
009: import com.sun.portal.monitoring.security.ssl.SslContext;
010:
011: import javax.management.remote.*;
012: import java.io.IOException;
013: import java.net.MalformedURLException;
014: import java.security.Security;
015: import java.util.HashMap;
016:
017: public class ConnectorFactory {
018: private static HashMap getEnvironment(
019: ConnectorContext connectorContext, SaslContext saslContext,
020: SslContext sslContext) {
021: HashMap result = null;
022:
023: if (!connectorContext.getSaslDisable().booleanValue()) {
024: result = (result == null) ? new HashMap() : result;
025: result.put("jmx.remote.profiles", connectorContext
026: .getProfiles());
027: if (connectorContext.getProfiles().endsWith(
028: SaslContext.MECHANISM_NAME)) {
029: Security.addProvider(new SaslProvider(saslContext));
030: result.put("jmx.remote.sasl.callback.handler",
031: connectorContext.getSaslCallbackHandler());
032: }
033: }
034:
035: if (!connectorContext.getSslDisable().booleanValue()) {
036: result = (result == null) ? new HashMap() : result;
037: result.put("jmx.remote.tls.socket.factory",
038: connectorContext.getSSLSocketFactory());
039: result.put("jmx.remote.tls.enabled.protocols", sslContext
040: .getProtocol());
041: result.put("jmx.remote.tls.enabled.cipher.suites",
042: connectorContext.getCiphers());
043: }
044:
045: return result;
046: }
047:
048: private static JMXServiceURL getJMXServiceURL(
049: ConnectorContext connectorContext, SslContext sslContext)
050: throws MonitoringException {
051: JMXServiceURL result;
052:
053: try {
054: result = new JMXServiceURL(connectorContext.getProtocol(),
055: sslContext.getHostName(), Integer
056: .parseInt(sslContext.getPort()));
057: } catch (MalformedURLException murle) {
058: throw new MonitoringException(murle);
059: }
060:
061: return result;
062: }
063:
064: public static JMXConnectorServer getJMXConnectorServer(
065: ConnectorContext connectorContext, SaslContext saslContext,
066: SslContext sslContext) throws MonitoringException {
067: JMXConnectorServer result;
068:
069: HashMap env = getEnvironment(connectorContext, saslContext,
070: sslContext);
071: ClassLoader cl = Thread.currentThread().getContextClassLoader();
072: try {
073: Thread.currentThread().setContextClassLoader(
074: ConnectorFactory.class.getClassLoader());
075: result = JMXConnectorServerFactory.newJMXConnectorServer(
076: getJMXServiceURL(connectorContext, sslContext),
077: env, null);
078: } catch (IOException ioe) {
079: throw new MonitoringException(ioe);
080: } finally {
081: if (cl != null) {
082: Thread.currentThread().setContextClassLoader(cl);
083: }
084: }
085:
086: return result;
087: }
088:
089: public static JMXConnector getJMXConnector(
090: ConnectorContext connectorContext, SaslContext saslContext,
091: SslContext sslContext) throws MonitoringException {
092: JMXConnector result;
093:
094: HashMap env = getEnvironment(connectorContext, saslContext,
095: sslContext);
096: try {
097: result = JMXConnectorFactory
098: .newJMXConnector(getJMXServiceURL(connectorContext,
099: sslContext), env);
100: } catch (IOException ioe) {
101: throw new MonitoringException(ioe);
102: }
103:
104: return result;
105: }
106: }
|