You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ad...@apache.org on 2003/11/22 21:04:29 UTC

cvs commit: incubator-geronimo/specs/j2ee-jacc/src/java/javax/security/jacc PolicyConfigurationFactory.java

adc         2003/11/22 12:04:29

  Modified:    specs/j2ee-jacc/src/java/javax/security/jacc
                        PolicyConfigurationFactory.java
  Log:
  Comments are always appreciated.
  
  Revision  Changes    Path
  1.2       +190 -113  incubator-geronimo/specs/j2ee-jacc/src/java/javax/security/jacc/PolicyConfigurationFactory.java
  
  Index: PolicyConfigurationFactory.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/specs/j2ee-jacc/src/java/javax/security/jacc/PolicyConfigurationFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PolicyConfigurationFactory.java	30 Aug 2003 01:55:12 -0000	1.1
  +++ PolicyConfigurationFactory.java	22 Nov 2003 20:04:28 -0000	1.2
  @@ -1,113 +1,190 @@
  -/* ====================================================================
  - * The Apache Software License, Version 1.1
  - *
  - * Copyright (c) 2003 The Apache Software Foundation.  All rights
  - * reserved.
  - *
  - * Redistribution and use in source and binary forms, with or without
  - * modification, are permitted provided that the following conditions
  - * are met:
  - *
  - * 1. Redistributions of source code must retain the above copyright
  - *    notice, this list of conditions and the following disclaimer.
  - *
  - * 2. Redistributions in binary form must reproduce the above copyright
  - *    notice, this list of conditions and the following disclaimer in
  - *    the documentation and/or other materials provided with the
  - *    distribution.
  - *
  - * 3. The end-user documentation included with the redistribution,
  - *    if any, must include the following acknowledgment:
  - *       "This product includes software developed by the
  - *        Apache Software Foundation (http://www.apache.org/)."
  - *    Alternately, this acknowledgment may appear in the software itself,
  - *    if and wherever such third-party acknowledgments normally appear.
  - *
  - * 4. The names "Apache" and "Apache Software Foundation" and
  - *    "Apache Geronimo" must not be used to endorse or promote products
  - *    derived from this software without prior written permission. For
  - *    written permission, please contact apache@apache.org.
  - *
  - * 5. Products derived from this software may not be called "Apache",
  - *    "Apache Geronimo", nor may "Apache" appear in their name, without
  - *    prior written permission of the Apache Software Foundation.
  - *
  - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  - * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  - * SUCH DAMAGE.
  - * ====================================================================
  - *
  - * This software consists of voluntary contributions made by many
  - * individuals on behalf of the Apache Software Foundation.  For more
  - * information on the Apache Software Foundation, please see
  - * <http://www.apache.org/>.
  - *
  - * This source code implements specifications defined by the Java
  - * Community Process. In order to remain compliant with the specification
  - * DO NOT add / change / or delete method signatures!
  - *
  - * ====================================================================
  - */
  -
  -package javax.security.jacc;
  -
  -import java.security.AccessController;
  -import java.security.PrivilegedActionException;
  -import java.security.PrivilegedExceptionAction;
  -import java.security.SecurityPermission;
  -
  -/**
  - *
  - * @version $Revision$ $Date$
  - */
  -public abstract class PolicyConfigurationFactory {
  -
  -    private final static String FACTORY_NAME = "javax.security.jacc.PolicyConfigurationFactory.provider";
  -    private static PolicyConfigurationFactory policyConfigurationFactory;
  -
  -    public static PolicyConfigurationFactory getPolicyConfigurationFactory() throws ClassNotFoundException, PolicyContextException {
  -        SecurityManager sm = System.getSecurityManager();
  -        if (sm != null) sm.checkPermission(new SecurityPermission("setPolicy"));
  -
  -        if (policyConfigurationFactory != null) return policyConfigurationFactory;
  -
  -        final String[] factoryClassName = { null };
  -        try {
  -            policyConfigurationFactory = (PolicyConfigurationFactory)AccessController.doPrivileged(new
  -                PrivilegedExceptionAction() {
  -                    public Object run() throws Exception
  -                    {
  -                        factoryClassName[0] = System.getProperty(FACTORY_NAME);
  -
  -                        if (factoryClassName[0] == null) throw new ClassNotFoundException("Property " + FACTORY_NAME + " not set");
  -
  -                        return Class.forName(factoryClassName[0]).newInstance();
  -                    }
  -                });
  -        } catch(PrivilegedActionException pae) {
  -            if (pae.getException() instanceof ClassNotFoundException) {
  -                throw (ClassNotFoundException)pae.getException();
  -            } else if (pae.getException() instanceof InstantiationException) {
  -                throw new ClassNotFoundException(factoryClassName[0] + " could not be instantiated");
  -            } else if (pae.getException() instanceof IllegalAccessException) {
  -                throw new ClassNotFoundException("Illegal access to " + factoryClassName);
  -            }
  -            throw new PolicyContextException(pae.getException());
  -        }
  -
  -        return policyConfigurationFactory;
  -    }
  -
  -    public abstract javax.security.jacc.PolicyConfiguration getPolicyConfiguration(String contextID, boolean remove) throws PolicyContextException;
  -
  -    public abstract boolean inService(String contextID) throws PolicyContextException;
  -}
  +/* ====================================================================
  + * The Apache Software License, Version 1.1
  + *
  + * Copyright (c) 2003 The Apache Software Foundation.  All rights
  + * reserved.
  + *
  + * Redistribution and use in source and binary forms, with or without
  + * modification, are permitted provided that the following conditions
  + * are met:
  + *
  + * 1. Redistributions of source code must retain the above copyright
  + *    notice, this list of conditions and the following disclaimer.
  + *
  + * 2. Redistributions in binary form must reproduce the above copyright
  + *    notice, this list of conditions and the following disclaimer in
  + *    the documentation and/or other materials provided with the
  + *    distribution.
  + *
  + * 3. The end-user documentation included with the redistribution,
  + *    if any, must include the following acknowledgment:
  + *       "This product includes software developed by the
  + *        Apache Software Foundation (http://www.apache.org/)."
  + *    Alternately, this acknowledgment may appear in the software itself,
  + *    if and wherever such third-party acknowledgments normally appear.
  + *
  + * 4. The names "Apache" and "Apache Software Foundation" and
  + *    "Apache Geronimo" must not be used to endorse or promote products
  + *    derived from this software without prior written permission. For
  + *    written permission, please contact apache@apache.org.
  + *
  + * 5. Products derived from this software may not be called "Apache",
  + *    "Apache Geronimo", nor may "Apache" appear in their name, without
  + *    prior written permission of the Apache Software Foundation.
  + *
  + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  + * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  + * SUCH DAMAGE.
  + * ====================================================================
  + *
  + * This software consists of voluntary contributions made by many
  + * individuals on behalf of the Apache Software Foundation.  For more
  + * information on the Apache Software Foundation, please see
  + * <http://www.apache.org/>.
  + *
  + * This source code implements specifications defined by the Java
  + * Community Process. In order to remain compliant with the specification
  + * DO NOT add / change / or delete method signatures!
  + *
  + * ====================================================================
  + */
  +
  +package javax.security.jacc;
  +
  +import java.security.AccessController;
  +import java.security.PrivilegedActionException;
  +import java.security.PrivilegedExceptionAction;
  +import java.security.SecurityPermission;
  +
  +/**
  + * Abstract factory and finder class for obtaining the instance of the class
  + * that implements the PolicyConfigurationFactory of a provider. The factory
  + * will be used to instantiate PolicyConfiguration objects that will be used
  + * by the deployment tools of the container to create and manage policy
  + * contexts within the Policy Provider.
  + *
  + * Implementation classes must have a public no argument constructor that may
  + * be used to create an operational instance of the factory implementation class.
  + * @see java.security.Permission
  + * @see PolicyConfiguration
  + * @see PolicyContextException
  + * @version $Revision$ $Date$
  + */
  +public abstract class PolicyConfigurationFactory {
  +
  +    private final static String FACTORY_NAME = "javax.security.jacc.PolicyConfigurationFactory.provider";
  +    private static PolicyConfigurationFactory policyConfigurationFactory;
  +
  +    /**
  +     * This static method uses a system property to find and instantiate (via a
  +     * public constructor) a provider specific factory implementation class.
  +     * The name of the provider specific factory implementation class is
  +     * obtained from the value of the system property,<p>
  +     * <code>javax.security.jacc.PolicyConfigurationFactory.provider</code>.
  +     * @return the singleton instance of the provider specific
  +     * PolicyConfigurationFactory implementation class.
  +     * @throws ClassNotFoundException when the class named by the system
  +     * property could not be found including because the value of the system
  +     * property has not be set.
  +     * @throws PolicyContextException if the implementation throws a checked
  +     * exception that has not been accounted for by the
  +     * getPolicyConfigurationFactory method signature. The exception thrown by
  +     * the implementation class will be encapsulated (during construction) in
  +     * the thrown PolicyContextException
  +     */
  +    public static PolicyConfigurationFactory getPolicyConfigurationFactory() throws ClassNotFoundException, PolicyContextException {
  +        SecurityManager sm = System.getSecurityManager();
  +        if (sm != null) sm.checkPermission(new SecurityPermission("setPolicy"));
  +
  +        if (policyConfigurationFactory != null) return policyConfigurationFactory;
  +
  +        final String[] factoryClassName = { null };
  +        try {
  +            policyConfigurationFactory = (PolicyConfigurationFactory)AccessController.doPrivileged(new
  +                PrivilegedExceptionAction() {
  +                    public Object run() throws Exception
  +                    {
  +                        factoryClassName[0] = System.getProperty(FACTORY_NAME);
  +
  +                        if (factoryClassName[0] == null) throw new ClassNotFoundException("Property " + FACTORY_NAME + " not set");
  +
  +                        return Class.forName(factoryClassName[0]).newInstance();
  +                    }
  +                });
  +        } catch(PrivilegedActionException pae) {
  +            if (pae.getException() instanceof ClassNotFoundException) {
  +                throw (ClassNotFoundException)pae.getException();
  +            } else if (pae.getException() instanceof InstantiationException) {
  +                throw new ClassNotFoundException(factoryClassName[0] + " could not be instantiated");
  +            } else if (pae.getException() instanceof IllegalAccessException) {
  +                throw new ClassNotFoundException("Illegal access to " + factoryClassName);
  +            }
  +            throw new PolicyContextException(pae.getException());
  +        }
  +
  +        return policyConfigurationFactory;
  +    }
  +
  +    /**
  +     * This method is used to obtain an instance of the provider specific class
  +     * that implements the PolicyConfiguration interface that corresponds to
  +     * the identified policy context within the provider. The methods of the
  +     * PolicyConfiguration interface are used to define the policy statements
  +     * of the identified policy context.<p>
  +     *
  +     * If at the time of the call, the identified policy context does not exist
  +     * in the provider, then the policy context will be created in the provider
  +     * and the Object that implements the context's PolicyConfiguration
  +     * Interface will be returned. If the state of the identified context is
  +     * "deleted" or "inService" it will be transitioned to the "open" state as
  +     * a result of the call. The states in the lifecycle of a policy context
  +     * are defined by the PolicyConfiguration interface.<p>
  +     *
  +     * For a given value of policy context identifier, this method must always
  +     * return the same instance of PolicyConfiguration and there must be at
  +     * most one actual instance of a PolicyConfiguration with a given policy
  +     * context identifier (during a process context). <p>
  +     *
  +     * To preserve the invariant that there be at most one PolicyConfiguration
  +     * object for a given policy context, it may be necessary for this method
  +     * to be thread safe.
  +     * @param contextID A String identifying the policy context whose
  +     * PolicyConfiguration interface is to be returned. The value passed to
  +     * this parameter must not be null.
  +     * @param remove A boolean value that establishes whether or not the policy
  +     * statements of an existing policy context are to be removed before its
  +     * PolicyConfiguration object is returned. If the value passed to this
  +     * parameter is true, the policy statements of an existing policy context
  +     * will be removed. If the value is false, they will not be removed.
  +     * @return an Object that implements the PolicyConfiguration Interface
  +     * matched to the Policy provider and corresponding to the identified
  +     * policy context.
  +     * @throws PolicyContextException if the implementation throws a checked
  +     * exception that has not been accounted for by the getPolicyConfiguration
  +     * method signature. The exception thrown by the implementation class will
  +     * be encapsulated (during construction) in the thrown PolicyContextException.
  +     */
  +    public abstract javax.security.jacc.PolicyConfiguration getPolicyConfiguration(String contextID, boolean remove) throws PolicyContextException;
  +
  +    /**
  +     * This method determines if the identified policy context exists with
  +     * state "inService" in the Policy provider associated with the factory.
  +     * @param contextID A string identifying a policy context
  +     * @return true if the identified policy context exists within the provider
  +     * and its state is "inService", false otherwise.
  +     * @throws PolicyContextException if the implementation throws a checked
  +     * exception that has not been accounted for by the inService method
  +     * signature. The exception thrown by the implementation class will be
  +     * encapsulated (during construction) in the thrown PolicyContextException.
  +     */
  +    public abstract boolean inService(String contextID) throws PolicyContextException;
  +}