001: /*
002: * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/users/MemoryUserDatabaseFactory.java,v 1.4 2002/02/03 00:56:58 craigmcc Exp $
003: * $Revision: 1.4 $
004: * $Date: 2002/02/03 00:56:58 $
005: *
006: * ====================================================================
007: * The Apache Software License, Version 1.1
008: *
009: * Copyright (c) 2002 The Apache Software Foundation. All rights
010: * reserved.
011: *
012: * Redistribution and use in source and binary forms, with or without
013: * modification, are permitted provided that the following conditions
014: * are met:
015: *
016: * 1. Redistributions of source code must retain the above copyright
017: * notice, this list of conditions and the following disclaimer.
018: *
019: * 2. Redistributions in binary form must reproduce the above copyright
020: * notice, this list of conditions and the following disclaimer in
021: * the documentation and/or other materials provided with the
022: * distribution.
023: *
024: * 3. The end-user documentation included with the redistribution, if
025: * any, must include the following acknowlegement:
026: * "This product includes software developed by the
027: * Apache Software Foundation (http://www.apache.org/)."
028: * Alternately, this acknowlegement may appear in the software itself,
029: * if and wherever such third-party acknowlegements normally appear.
030: *
031: * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
032: * Foundation" must not be used to endorse or promote products derived
033: * from this software without prior written permission. For written
034: * permission, please contact apache@apache.org.
035: *
036: * 5. Products derived from this software may not be called "Apache"
037: * nor may "Apache" appear in their names without prior written
038: * permission of the Apache Group.
039: *
040: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
041: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
042: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
043: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
044: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
045: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
046: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
047: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
048: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
049: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
050: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
051: * SUCH DAMAGE.
052: * ====================================================================
053: *
054: * This software consists of voluntary contributions made by many
055: * individuals on behalf of the Apache Software Foundation. For more
056: * information on the Apache Software Foundation, please see
057: * <http://www.apache.org/>.
058: *
059: * [Additional notices, if required by prior licensing conditions]
060: *
061: */
062:
063: package org.apache.catalina.users;
064:
065: import java.util.Hashtable;
066: import javax.naming.Name;
067: import javax.naming.Context;
068: import javax.naming.NamingException;
069: import javax.naming.Reference;
070: import javax.naming.RefAddr;
071: import javax.naming.spi.ObjectFactory;
072:
073: /**
074: * <p>JNDI object creation factory for <code>MemoryUserDatabase</code>
075: * instances. This makes it convenient to configure a user database
076: * in the global JNDI resources associated with this Catalina instance,
077: * and then link to that resource for web applications that administer
078: * the contents of the user database.</p>
079: *
080: * <p>The <code>MemoryUserDatabase</code> instance is configured based
081: * on the following parameter values:</p>
082: * <ul>
083: * <li><strong>pathname</strong> - Absolute or relative (to the directory
084: * path specified by the <code>catalina.base</code> system property)
085: * pathname to the XML file from which our user information is loaded,
086: * and to which it is stored. [conf/tomcat-users.xml]</li>
087: * </ul>
088: *
089: * @author Craig R. McClanahan
090: * @version $Revision: 1.4 $ $Date: 2002/02/03 00:56:58 $
091: * @since 4.1
092: */
093:
094: public class MemoryUserDatabaseFactory implements ObjectFactory {
095:
096: // --------------------------------------------------------- Public Methods
097:
098: /**
099: * <p>Create and return a new <code>MemoryUserDatabase</code> instance
100: * that has been configured according to the properties of the
101: * specified <code>Reference</code>. If you instance can be created,
102: * return <code>null</code> instead.</p>
103: *
104: * @param obj The possibly null object containing location or
105: * reference information that can be used in creating an object
106: * @param name The name of this object relative to <code>nameCtx</code>
107: * @param nameCtx The context relative to which the <code>name</code>
108: * parameter is specified, or <code>null</code> if <code>name</code>
109: * is relative to the default initial context
110: * @param environment The possibly null environment that is used in
111: * creating this object
112: */
113: public Object getObjectInstance(Object obj, Name name,
114: Context nameCtx, Hashtable environment) throws Exception {
115:
116: // We only know how to deal with <code>javax.naming.Reference</code>s
117: // that specify a class name of "org.apache.catalina.UserDatabase"
118: if ((obj == null) || !(obj instanceof Reference)) {
119: return (null);
120: }
121: Reference ref = (Reference) obj;
122: if (!"org.apache.catalina.UserDatabase".equals(ref
123: .getClassName())) {
124: return (null);
125: }
126:
127: // Create and configure a MemoryUserDatabase instance based on the
128: // RefAddr values associated with this Reference
129: MemoryUserDatabase database = new MemoryUserDatabase(name
130: .toString());
131: RefAddr ra = null;
132:
133: ra = ref.get("pathname");
134: if (ra != null) {
135: database.setPathname(ra.getContent().toString());
136: }
137:
138: // Return the configured database instance
139: database.open();
140: database.save();
141: return (database);
142:
143: }
144:
145: }
|