001: /*
002: * BEGIN_HEADER - DO NOT EDIT
003: *
004: * The contents of this file are subject to the terms
005: * of the Common Development and Distribution License
006: * (the "License"). You may not use this file except
007: * in compliance with the License.
008: *
009: * You can obtain a copy of the license at
010: * https://open-esb.dev.java.net/public/CDDLv1.0.html.
011: * See the License for the specific language governing
012: * permissions and limitations under the License.
013: *
014: * When distributing Covered Code, include this CDDL
015: * HEADER in each file and include the License file at
016: * https://open-esb.dev.java.net/public/CDDLv1.0.html.
017: * If applicable add the following below this CDDL HEADER,
018: * with the fields enclosed by brackets "[]" replaced with
019: * your own identifying information: Portions Copyright
020: * [year] [name of copyright owner]
021: */
022:
023: /*
024: * @(#)RuntimeConfiguration.java
025: * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
026: *
027: * END_HEADER - DO NOT EDIT
028: */
029: package com.sun.jbi.management.config;
030:
031: import com.sun.jbi.management.ConfigurationCategory;
032: import com.sun.jbi.management.LocalStringKeys;
033: import com.sun.jbi.management.registry.GenericQuery;
034: import com.sun.jbi.management.registry.Updater;
035:
036: import java.util.Map;
037: import java.util.concurrent.ConcurrentHashMap;
038:
039: import javax.management.Attribute;
040: import javax.management.AttributeNotFoundException;
041: import javax.management.InvalidAttributeValueException;
042: import javax.management.MBeanException;
043: import javax.management.ReflectionException;
044:
045: import javax.management.MBeanInfo;
046: import javax.management.MBeanAttributeInfo;
047: import javax.management.modelmbean.ModelMBeanInfo;
048: import javax.management.modelmbean.ModelMBeanAttributeInfo;
049:
050: /**
051: * InstanceConfiguration is a model facade MBean. An instance of this MBean is registered
052: * for each configuration category. The RuntimeConfiguration MBean on the DAS uses the
053: * InstanceConfiguration MBean to configure the instance.
054: *
055: * @author Sun Microsystems, Inc.
056: */
057: public class InstanceConfiguration extends
058: com.sun.jbi.management.config.RuntimeConfiguration {
059: /** The overriden attributes */
060: protected ConcurrentHashMap<String, Object> mOverridenAttributes;
061:
062: /** Creates a new InstanceConfiguration MBean.
063: * @param mbeanInfo metadata returned by the 'real' MBean in the
064: * target instance.
065: */
066: public InstanceConfiguration(ModelMBeanInfo mbeanInfo,
067: ConfigurationCategory category) throws Exception {
068: super (mbeanInfo, category, null);
069: }
070:
071: /*---------------------------------------------------------------------------------*\
072: * Dynamic MBean Attribute getter/setter *
073: \*---------------------------------------------------------------------------------*/
074:
075: /**
076: * Set the value of a specific attribute of the Dynamic MBean.
077: *
078: * @param attribute The identification of the attribute to
079: * be set and the value it is to be set to.
080: * @exception AttributeNotFoundException
081: * @exception InvalidAttributeValueException
082: * @exception MBeanException Wraps a <CODE>java.lang.Exception</CODE>
083: * thrown by the MBean's setter.
084: * @exception ReflectionException Wraps a <CODE>java.lang.Exception</CODE>
085: * thrown while trying to invoke the MBean's setter.
086: * @see #getAttribute
087: */
088: public void setAttribute(Attribute attribute)
089: throws AttributeNotFoundException,
090: InvalidAttributeValueException, MBeanException,
091: ReflectionException {
092: // -- If the domain configuration is not persisted, persist it first
093: persistDomainConfig();
094:
095: // -- Persist changes to the registry, this is an attribute override
096: try {
097: notifyListenersOfAttributeChange(attribute);
098:
099: // -- If the attribute value is the same as the domain config value
100: // then it is not a override, it is a possible load default, delete the
101: // override if it exists
102: GenericQuery query = getRegistry().getGenericQuery();
103: Updater updater = getRegistry().getUpdater();
104:
105: String attrValue = (attribute.getValue() == null ? "null"
106: : attribute.getValue().toString());
107: String domainValue = query.getAttribute("domain",
108: mCategory, attribute.getName());
109:
110: if (domainValue != null
111: && attrValue.toString().equals(domainValue)) {
112: updater.deleteAttribute(mCategory, attribute.getName());
113: } else {
114: String persistAttrValue = attrValue;
115: if (isPassword(attribute.getName())) {
116: com.sun.jbi.security.KeyStoreUtil ksUtil = getPlatformContext()
117: .getKeyStoreUtil();
118: persistAttrValue = ksUtil.encrypt(attrValue);
119: }
120: updater.setAttribute(mCategory, attribute.getName(),
121: persistAttrValue);
122: }
123: } catch (Exception ex) {
124: String errMsg = getTranslator().getString(
125: LocalStringKeys.JBI_ADMIN_SET_CFG_ATTRIB_FAILED,
126: attribute.getName(), mCategory.toString(),
127: ex.getMessage());
128: javax.jbi.JBIException jbiEx = new javax.jbi.JBIException(
129: errMsg);
130: throw new MBeanException(jbiEx, errMsg);
131: }
132: }
133:
134: /**
135: * This operation is called when a configuration attribute is to use the
136: * global configuration, the overriden attribute needs to be deleted from the
137: * target configiration
138: *
139: * @param attrName - attribute to be deleted
140: */
141: public void deleteOverride(String attrName) throws Exception {
142: // Delete the attribute from the registry
143: Updater updater = getRegistry().getUpdater();
144: updater.deleteAttribute(mCategory, attrName);
145: }
146:
147: }
|