001: /**
002: * JOnAS: Java(TM) Open Application Server
003: * Copyright (C) 2004 Bull S.A.
004: * Contact: jonas-team@objectweb.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * Initial developer: Florent BENOIT
022: * --------------------------------------------------------------------------
023: * $Id: PolicyConfigurationFactoryWrapper.java 4578 2004-04-09 09:58:27Z benoitf $
024: * --------------------------------------------------------------------------
025: */package org.objectweb.jonas_lib.security.jacc;
026:
027: import javax.security.jacc.PolicyConfiguration;
028: import javax.security.jacc.PolicyConfigurationFactory;
029: import javax.security.jacc.PolicyContextException;
030:
031: /**
032: * Defines a wrapper for the PolicyConfigurationFactory
033: * Uses a wrapper because JACC provider factory is loaded by abstract Factory
034: * with the system classloader. The problem is that System classloader loads only
035: * few JOnAS classes. All classes are loaded by JOnAS classloader
036: * This wrapper could be removed if the class is no more loaded by System classloader
037: * @author Florent Benoit
038: */
039: public class PolicyConfigurationFactoryWrapper extends
040: PolicyConfigurationFactory {
041:
042: /**
043: * List of PolicyConfiguration objects
044: * Manage all configurations available
045: */
046: private PolicyConfigurationFactory policyConfigurationFactory = null;
047:
048: /**
049: * Name of the implementation class
050: */
051: private static final String CLASS_NAME = "org.objectweb.jonas_lib.security.jacc.JPolicyConfigurationFactory";
052:
053: /**
054: * Update policyConfigurationFactory object for delegating requests
055: */
056: public PolicyConfigurationFactoryWrapper() {
057: try {
058: ClassLoader classLoader = Thread.currentThread()
059: .getContextClassLoader();
060: Class clazz = classLoader.loadClass(CLASS_NAME);
061: Object o = clazz.newInstance();
062: policyConfigurationFactory = (PolicyConfigurationFactory) o;
063: } catch (Exception e) {
064: // no logger available (bootstrap jar)
065: System.err
066: .println("PolicyConfigurationFactoryWrapper : Error with JACC :"
067: + e.getMessage());
068: }
069: }
070:
071: /**
072: * This method is used to obtain an instance of the provider specific
073: * class that implements the PolicyConfiguration interface that corresponds
074: * to the identified policy context within the provider.
075: * @param contextID A String identifying the policy context whose
076: * PolicyConfiguration interface is to be returned. The value passed
077: * to this parameter must not be null.
078: * @param remove A boolean value that establishes whether or not the policy
079: * statements of an existing policy context are to be removed before
080: * its PolicyConfiguration object is returned. If the value passed to
081: * this parameter is true, the policy statements of an existing
082: * policy context will be removed. If the value is false,
083: * they will not be removed.
084: * @return an Object that implements the PolicyConfiguration Interface
085: * matched to the Policy provider and corresponding to the
086: * identified policy context.
087: * @throws SecurityException when called by an AccessControlContext that
088: * has not been granted the "setPolicy" SecurityPermission.
089: * @throws PolicyContextException if the implementation throws a checked
090: * exception that has not been accounted for by the
091: * getPolicyConfiguration method signature. The exception thrown
092: * by the implementation class will be encapsulated
093: * (during construction) in the thrown PolicyContextException.
094: */
095: public PolicyConfiguration getPolicyConfiguration(String contextID,
096: boolean remove) throws PolicyContextException,
097: SecurityException {
098: return policyConfigurationFactory.getPolicyConfiguration(
099: contextID, remove);
100: }
101:
102: /**
103: * This method determines if the identified policy context exists
104: * with state "inService" in the Policy provider associated with
105: * the factory.
106: * @param contextID A string identifying a policy context
107: * @return true if the identified policy context exists within
108: * the provider and its state is "inService", false otherwise.
109: * @throws SecurityException when called by an AccessControlContext
110: * that has not been granted the "setPolicy" SecurityPermission.
111: * @throws PolicyContextException if the implementation throws a checked
112: * exception that has not been accounted for by the inService
113: * method signature. The exception thrown by the implementation
114: * class will be encapsulated (during construction) in the thrown
115: * PolicyContextException.
116: */
117: public boolean inService(String contextID)
118: throws PolicyContextException, SecurityException {
119: return policyConfigurationFactory.inService(contextID);
120: }
121:
122: }
|