001: /*
002: * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
003: * PROPRIETARY/CONFIDENTIAL. Use of this product is subject to license terms.
004: */
005: package com.sun.portal.desktop.monitoring;
006:
007: import com.sun.portal.desktop.mfwk.MfwkContext;
008: import com.sun.portal.monitoring.MonitoringException;
009: import com.sun.portal.monitoring.SubsystemProperties;
010: import com.sun.portal.monitoring.MonitoringClassLoader;
011: import com.sun.portal.monitoring.utilities.PropertyHelper;
012: import com.sun.portal.monitoring.utilities.UtilityException;
013: import com.sun.portal.util.ResourceLoader;
014: import com.sun.portal.log.common.PortalLogger;
015:
016: import java.util.Properties;
017: import java.util.logging.Level;
018: import java.util.logging.Logger;
019: import java.util.logging.LogRecord;
020: import java.io.InputStream;
021: import java.io.FileNotFoundException;
022: import java.io.IOException;
023: import java.lang.reflect.Constructor;
024: import java.lang.reflect.InvocationTargetException;
025:
026: public class MonitoringSubsystemWrapper {
027: private static final Logger logger = PortalLogger
028: .getLogger(MonitoringSubsystemWrapper.class);
029:
030: private static LogRecord getLogRecord(Level level, String message,
031: Object[] parameters, Throwable t) {
032: LogRecord result = new LogRecord(level, message);
033: result.setLoggerName(logger.getName());
034: result.setParameters(parameters);
035: result.setThrown(t);
036: return result;
037: }
038:
039: private static final String MONITORING_PROPERTIES = "monitoring.properties";
040: private static final String MFWK_PROPERTIES = "desktopmfwk.properties";
041:
042: private static void gearUpProperties(PropertyHelper propertyHelper,
043: String propertyFileName, Level logLevel)
044: throws MonitoringException {
045: InputStream is = null;
046: try {
047: is = ResourceLoader.getInstance(System.getProperties())
048: .getResourceAsStream(propertyFileName);
049: propertyHelper.loadProperties(is);
050: } catch (UtilityException e) {
051: if (logger.isLoggable(logLevel)) {
052: logger.log(getLogRecord(logLevel, "PSMN_CSPM0001",
053: new Object[] { e.getLocalizedMessage() }, e));
054: }
055: throw new MonitoringException(e);
056: } catch (FileNotFoundException e) {
057: if (logger.isLoggable(logLevel)) {
058: logger.log(getLogRecord(logLevel, "PSMN_CSPM0001",
059: new Object[] { e.getLocalizedMessage() }, e));
060: }
061: throw new MonitoringException(e);
062: } catch (IOException e) {
063: if (logger.isLoggable(logLevel)) {
064: logger.log(getLogRecord(logLevel, "PSMN_CSPM0001",
065: new Object[] { e.getLocalizedMessage() }, e));
066: }
067: throw new MonitoringException(e);
068: } finally {
069: if (is != null) {
070: try {
071: is.close();
072: } catch (IOException e) {
073: if (logger.isLoggable(Level.WARNING)) {
074: logger.log(getLogRecord(Level.WARNING,
075: "PSMN_CSPM0001", new Object[] { e
076: .getLocalizedMessage() }, e));
077: }
078: }
079: }
080: }
081: }
082:
083: private static Properties gearUpMonitoringSubsystemProperties()
084: throws MonitoringException {
085: PropertyHelper propertyHelper = new PropertyHelper(
086: new Properties());
087:
088: gearUpProperties(propertyHelper, MONITORING_PROPERTIES,
089: Level.SEVERE);
090: try {
091: gearUpProperties(propertyHelper, MFWK_PROPERTIES,
092: Level.CONFIG);
093: } catch (MonitoringException e) {
094: // ignore, mfwk integration is disabled
095: }
096:
097: // Add portalID and instanceID to Monitoring Subsystem properties.
098: propertyHelper.setProperty("com.sun.portal", "portalID",
099: ResourceLoader.getInstance(System.getProperties())
100: .getPortalId());
101: propertyHelper.setProperty("com.sun.portal", "instanceID",
102: ResourceLoader.getInstance(System.getProperties())
103: .getInstanceId());
104:
105: return propertyHelper.getProperties();
106: }
107:
108: private static void initMonitoringSubsystem(String url) {
109: try {
110: Properties properties = gearUpMonitoringSubsystemProperties();
111:
112: // Required for PS:JESMF Integration SNMP MIB Support
113: properties.setProperty("com.sun.portal.url", url);
114:
115: if (properties.getProperty(SubsystemProperties.CLASS_PATH) == null) {
116: MonitoringSubsystem monitoringSubsystem = new MonitoringSubsystemImpl(
117: properties);
118: setDesktopMonitoringSubsystem(monitoringSubsystem);
119: } else {
120: ClassLoader classLoader = new MonitoringClassLoader(
121: properties
122: .getProperty(SubsystemProperties.CLASS_PATH),
123: MonitoringSubsystemWrapper.class
124: .getClassLoader(),
125: properties
126: .getProperty(SubsystemProperties.CLASS_PATH_DELEGATEES),
127: properties
128: .getProperty(SubsystemProperties.CLASS_PATH_NON_DELEGATEES));
129: Class clazz = classLoader
130: .loadClass("com.sun.portal.desktop.monitoring.MonitoringSubsystemImpl");
131: Constructor constructor = clazz
132: .getConstructor(new Class[] { Properties.class });
133: Object object = constructor
134: .newInstance(new Object[] { properties });
135: setDesktopMonitoringSubsystem((MonitoringSubsystem) object);
136: }
137: } catch (MonitoringException e) {
138: if (logger.isLoggable(Level.SEVERE)) {
139: logger.log(getLogRecord(Level.SEVERE, "PSDT_CSPD0026",
140: new Object[] { e.getLocalizedMessage() }, e));
141: }
142: } catch (IllegalAccessException e) {
143: if (logger.isLoggable(Level.SEVERE)) {
144: logger.log(getLogRecord(Level.SEVERE, "PSDT_CSPD0026",
145: new Object[] { e.getLocalizedMessage() }, e));
146: }
147: } catch (NoSuchMethodException e) {
148: if (logger.isLoggable(Level.SEVERE)) {
149: logger.log(getLogRecord(Level.SEVERE, "PSDT_CSPD0026",
150: new Object[] { e.getLocalizedMessage() }, e));
151: }
152: } catch (InvocationTargetException e) {
153: if (logger.isLoggable(Level.SEVERE)) {
154: logger.log(getLogRecord(Level.SEVERE, "PSDT_CSPD0026",
155: new Object[] { e.getLocalizedMessage() }, e));
156: }
157: } catch (InstantiationException e) {
158: if (logger.isLoggable(Level.SEVERE)) {
159: logger.log(getLogRecord(Level.SEVERE, "PSDT_CSPD0026",
160: new Object[] { e.getLocalizedMessage() }, e));
161: }
162: } catch (ClassNotFoundException e) {
163: if (logger.isLoggable(Level.SEVERE)) {
164: logger.log(getLogRecord(Level.SEVERE, "PSDT_CSPD0026",
165: new Object[] { e.getLocalizedMessage() }, e));
166: }
167: }
168:
169: if (!gearedUp()) {
170: if (logger.isLoggable(Level.SEVERE)) {
171: logger.log(getLogRecord(Level.SEVERE, "PSDT_CSPDM0003",
172: null, null));
173: }
174: setDesktopMonitoringSubsystem(new MonitoringSubsystemNoOp());
175: }
176: }
177:
178: private static MonitoringSubsystem monitoringSubsystem;
179:
180: public static boolean gearedUp() {
181: return (monitoringSubsystem == null) ? false : true;
182: }
183:
184: public static void setDesktopMonitoringSubsystem(
185: MonitoringSubsystem monitoringSubsystem) {
186: MonitoringSubsystemWrapper.monitoringSubsystem = monitoringSubsystem;
187: }
188:
189: public static MonitoringSubsystem getDesktopMonitoringSubsystem(
190: String url) {
191: synchronized (MonitoringSubsystemWrapper.class) {
192: if (!gearedUp()) {
193: initMonitoringSubsystem(url);
194: }
195: }
196:
197: return monitoringSubsystem;
198: }
199:
200: public static MonitoringSubsystem getDesktopMonitoringSubsystem() {
201: synchronized (MonitoringSubsystemWrapper.class) {
202: if (!gearedUp()) {
203: initMonitoringSubsystem(null);
204: }
205: }
206:
207: return monitoringSubsystem;
208: }
209: }
|