001: /*
002: * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/NamingResourcesMBean.java,v 1.10 2002/06/24 21:11:42 amyroh Exp $
003: * $Revision: 1.10 $
004: * $Date: 2002/06/24 21:11:42 $
005: *
006: * ====================================================================
007: *
008: * The Apache Software License, Version 1.1
009: *
010: * Copyright (c) 2002 The Apache Software Foundation. All rights
011: * reserved.
012: *
013: * Redistribution and use in source and binary forms, with or without
014: * modification, are permitted provided that the following conditions
015: * are met:
016: *
017: * 1. Redistributions of source code must retain the above copyright
018: * notice, this list of conditions and the following disclaimer.
019: *
020: * 2. Redistributions in binary form must reproduce the above copyright
021: * notice, this list of conditions and the following disclaimer in
022: * the documentation and/or other materials provided with the
023: * distribution.
024: *
025: * 3. The end-user documentation included with the redistribution, if
026: * any, must include the following acknowlegement:
027: * "This product includes software developed by the
028: * Apache Software Foundation (http://www.apache.org/)."
029: * Alternately, this acknowlegement may appear in the software itself,
030: * if and wherever such third-party acknowlegements normally appear.
031: *
032: * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
033: * Foundation" must not be used to endorse or promote products derived
034: * from this software without prior written permission. For written
035: * permission, please contact apache@apache.org.
036: *
037: * 5. Products derived from this software may not be called "Apache"
038: * nor may "Apache" appear in their names without prior written
039: * permission of the Apache Group.
040: *
041: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
042: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
043: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
044: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
045: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
046: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
047: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
048: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
049: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
050: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
051: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
052: * SUCH DAMAGE.
053: * ====================================================================
054: *
055: * This software consists of voluntary contributions made by many
056: * individuals on behalf of the Apache Software Foundation. For more
057: * information on the Apache Software Foundation, please see
058: * <http://www.apache.org/>.
059: *
060: * [Additional notices, if required by prior licensing conditions]
061: *
062: */
063:
064: package org.apache.catalina.mbeans;
065:
066: import java.net.URLDecoder;
067: import java.util.ArrayList;
068: import javax.management.MalformedObjectNameException;
069: import javax.management.MBeanException;
070: import javax.management.ObjectName;
071: import javax.management.RuntimeOperationsException;
072: import org.apache.catalina.deploy.ContextEnvironment;
073: import org.apache.catalina.deploy.ContextResource;
074: import org.apache.catalina.deploy.ContextResourceLink;
075: import org.apache.catalina.deploy.NamingResources;
076: import org.apache.catalina.deploy.ResourceParams;
077: import org.apache.commons.modeler.BaseModelMBean;
078: import org.apache.commons.modeler.ManagedBean;
079: import org.apache.commons.modeler.Registry;
080:
081: /**
082: * <p>A <strong>ModelMBean</strong> implementation for the
083: * <code>org.apache.catalina.deploy.NamingResources</code> component.</p>
084: *
085: * @author Amy Roh
086: * @version $Revision: 1.10 $ $Date: 2002/06/24 21:11:42 $
087: */
088:
089: public class NamingResourcesMBean extends BaseModelMBean {
090:
091: // ----------------------------------------------------------- Constructors
092:
093: /**
094: * Construct a <code>ModelMBean</code> with default
095: * <code>ModelMBeanInfo</code> information.
096: *
097: * @exception MBeanException if the initializer of an object
098: * throws an exception
099: * @exception RuntimeOperationsException if an IllegalArgumentException
100: * occurs
101: */
102: public NamingResourcesMBean() throws MBeanException,
103: RuntimeOperationsException {
104:
105: super ();
106:
107: }
108:
109: // ----------------------------------------------------- Instance Variables
110:
111: /**
112: * The configuration information registry for our managed beans.
113: */
114: protected Registry registry = MBeanUtils.createRegistry();
115:
116: /**
117: * The <code>ManagedBean</code> information describing this MBean.
118: */
119: protected ManagedBean managed = registry
120: .findManagedBean("NamingResources");
121:
122: // ------------------------------------------------------------- Attributes
123:
124: /**
125: * Return the MBean Names of the set of defined environment entries for
126: * this web application
127: */
128: public String[] getEnvironments() {
129: ContextEnvironment[] envs = ((NamingResources) this .resource)
130: .findEnvironments();
131: ArrayList results = new ArrayList();
132: for (int i = 0; i < envs.length; i++) {
133: try {
134: ObjectName oname = MBeanUtils.createObjectName(managed
135: .getDomain(), envs[i]);
136: results.add(oname.toString());
137: } catch (MalformedObjectNameException e) {
138: throw new IllegalArgumentException(
139: "Cannot create object name for environment "
140: + envs[i]);
141: }
142: }
143: return ((String[]) results.toArray(new String[results.size()]));
144:
145: }
146:
147: /**
148: * Return the MBean Names of all the defined resource references for this
149: * application.
150: */
151: public String[] getResources() {
152:
153: ContextResource[] resources = ((NamingResources) this .resource)
154: .findResources();
155: ArrayList results = new ArrayList();
156: for (int i = 0; i < resources.length; i++) {
157: try {
158: ObjectName oname = MBeanUtils.createObjectName(managed
159: .getDomain(), resources[i]);
160: results.add(oname.toString());
161: } catch (MalformedObjectNameException e) {
162: throw new IllegalArgumentException(
163: "Cannot create object name for resource "
164: + resources[i]);
165: }
166: }
167: return ((String[]) results.toArray(new String[results.size()]));
168:
169: }
170:
171: /**
172: * Return the MBean Names of all the defined resource link references for
173: * this application.
174: */
175: public String[] getResourceLinks() {
176:
177: ContextResourceLink[] resourceLinks = ((NamingResources) this .resource)
178: .findResourceLinks();
179: ArrayList results = new ArrayList();
180: for (int i = 0; i < resourceLinks.length; i++) {
181: try {
182: ObjectName oname = MBeanUtils.createObjectName(managed
183: .getDomain(), resourceLinks[i]);
184: results.add(oname.toString());
185: } catch (MalformedObjectNameException e) {
186: throw new IllegalArgumentException(
187: "Cannot create object name for resource "
188: + resourceLinks[i]);
189: }
190: }
191: return ((String[]) results.toArray(new String[results.size()]));
192:
193: }
194:
195: // ------------------------------------------------------------- Operations
196:
197: /**
198: * Add an environment entry for this web application.
199: *
200: * @param envName New environment entry name
201: * @param type The type of the new environment entry
202: * @param value The value of the new environment entry
203: */
204: public String addEnvironment(String envName, String type,
205: String value) throws MalformedObjectNameException {
206:
207: NamingResources nresources = (NamingResources) this .resource;
208: if (nresources == null) {
209: return null;
210: }
211: ContextEnvironment env = nresources.findEnvironment(envName);
212: if (env != null) {
213: throw new IllegalArgumentException(
214: "Invalid environment name - already exists '"
215: + envName + "'");
216: }
217: env = new ContextEnvironment();
218: env.setName(envName);
219: env.setType(type);
220: env.setValue(value);
221: nresources.addEnvironment(env);
222:
223: // Return the corresponding MBean name
224: ManagedBean managed = registry
225: .findManagedBean("ContextEnvironment");
226: ObjectName oname = MBeanUtils.createObjectName(managed
227: .getDomain(), env);
228: return (oname.toString());
229:
230: }
231:
232: /**
233: * Add a resource reference for this web application.
234: *
235: * @param resourceName New resource reference name
236: * @param type New resource reference type
237: */
238: public String addResource(String resourceName, String type)
239: throws MalformedObjectNameException {
240:
241: NamingResources nresources = (NamingResources) this .resource;
242: if (nresources == null) {
243: return null;
244: }
245: ContextResource resource = nresources
246: .findResource(resourceName);
247: if (resource != null) {
248: throw new IllegalArgumentException(
249: "Invalid resource name - already exists'"
250: + resourceName + "'");
251: }
252: resource = new ContextResource();
253: resource.setName(resourceName);
254: resource.setType(type);
255: nresources.addResource(resource);
256:
257: // Return the corresponding MBean name
258: ManagedBean managed = registry
259: .findManagedBean("ContextResource");
260: ObjectName oname = MBeanUtils.createObjectName(managed
261: .getDomain(), resource);
262: return (oname.toString());
263: }
264:
265: /**
266: * Add a resource link reference for this web application.
267: *
268: * @param global New resource link reference global name
269: * @param resourceLinkName New resource link reference name
270: * @param type New resource link reference type
271: */
272: public String addResourceLink(String global,
273: String resourceLinkName, String type)
274: throws MalformedObjectNameException {
275:
276: NamingResources nresources = (NamingResources) this .resource;
277: if (nresources == null) {
278: return null;
279: }
280: ContextResourceLink resourceLink = nresources
281: .findResourceLink(resourceLinkName);
282: if (resourceLink != null) {
283: throw new IllegalArgumentException(
284: "Invalid resource link name - already exists'"
285: + resourceLinkName + "'");
286: }
287: resourceLink = new ContextResourceLink();
288: resourceLink.setName(resourceLinkName);
289: resourceLink.setType(type);
290: resourceLink.setGlobal(global);
291: nresources.addResourceLink(resourceLink);
292:
293: // Return the corresponding MBean name
294: ManagedBean managed = registry
295: .findManagedBean("ContextResourceLink");
296: ObjectName oname = MBeanUtils.createObjectName(managed
297: .getDomain(), resourceLink);
298: return (oname.toString());
299: }
300:
301: /**
302: * Remove any environment entry with the specified name.
303: *
304: * @param name Name of the environment entry to remove
305: */
306: public void removeEnvironment(String envName) {
307:
308: NamingResources nresources = (NamingResources) this .resource;
309: if (nresources == null) {
310: return;
311: }
312: ContextEnvironment env = nresources.findEnvironment(envName);
313: if (env == null) {
314: throw new IllegalArgumentException(
315: "Invalid environment name '" + envName + "'");
316: }
317: nresources.removeEnvironment(envName);
318:
319: }
320:
321: /**
322: * Remove any resource reference with the specified name.
323: *
324: * @param resourceName Name of the resource reference to remove
325: */
326: public void removeResource(String resourceName) {
327:
328: resourceName = URLDecoder.decode(resourceName);
329: NamingResources nresources = (NamingResources) this .resource;
330: if (nresources == null) {
331: return;
332: }
333: ContextResource resource = nresources
334: .findResource(resourceName);
335: if (resource == null) {
336: throw new IllegalArgumentException(
337: "Invalid resource name '" + resourceName + "'");
338: }
339: nresources.removeResource(resourceName);
340: nresources.removeResourceParams(resourceName);
341:
342: }
343:
344: /**
345: * Remove any resource link reference with the specified name.
346: *
347: * @param resourceLinkName Name of the resource link reference to remove
348: */
349: public void removeResourceLink(String resourceLinkName) {
350:
351: resourceLinkName = URLDecoder.decode(resourceLinkName);
352: NamingResources nresources = (NamingResources) this .resource;
353: if (nresources == null) {
354: return;
355: }
356: ContextResourceLink resourceLink = nresources
357: .findResourceLink(resourceLinkName);
358: if (resourceLink == null) {
359: throw new IllegalArgumentException(
360: "Invalid resource Link name '" + resourceLinkName
361: + "'");
362: }
363: nresources.removeResourceLink(resourceLinkName);
364: }
365:
366: }
|