IdRepoPluginsCache.java revision a7587037ca2237ee8a201dd776998171e8cfc00a
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Copyright (c) 2008 Sun Microsystems, Inc. All Rights Reserved.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The contents of this file are subject to the terms
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * of the Common Development and Distribution License
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * (the License). You may not use this file except in
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * compliance with the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * You can obtain a copy of the License at
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * See the License for the specific language governing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * permission and limitations under the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * When distributing Covered Code, include this CDDL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Header Notice in each file and include the License file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * If applicable, add the following below the CDDL Header,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * with the fields enclosed by brackets [] replaced by
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * your own identifying information:
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * $Id: IdRepoPluginsCache.java,v 1.8 2009/11/10 01:52:37 hengming Exp $
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Portions Copyrighted 2015-2016 ForgeRock AS.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.concurrent.ScheduledExecutorService;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.util.thread.ExecutorServiceFactory;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.security.AdminTokenAction;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.datastruct.OrderedSet;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.sm.ServiceConfigManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.sm.ServiceSchemaManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @author aravind
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic class IdRepoPluginsCache implements ServiceListener {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster static Debug debug = Debug.getInstance("amIdm");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster static ServiceConfigManager idRepoServiceConfigManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static int svcRevisionNumber;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Cache of IdRepo Plugins
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // The Map contains <orgName, MAP<name, IdRepo object>>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Needs to synchronized for get(), put() and clear()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private final ScheduledExecutorService scheduler;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Initialize listeners
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("IdRepoPluginsCache constructor called");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.scheduler = InjectorHolder.getInstance(ExecutorServiceFactory.class).createScheduledService(1);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected Set<IdRepo> getIdRepoPlugins(String orgName)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("IdRepoPluginsCache.getIdRepoPlugins orgName: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Check the cache
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Set readOrgRepos = (Set) readonlyPlugins.get(orgName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((readOrgRepos != null) && !readOrgRepos.isEmpty()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster synchronized (idrepoPlugins) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("IdRepoPluginsCache.getIdRepoPlugins " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Initialize the plugins
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Organization does not exist. Error condition
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("IdRepoPluginsCache.getIdRepoPlugins " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IdRepoBundle.BUNDLE_NAME, IdRepoErrorCode.REALM_DOESNT_EXIST, args);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("IdRepoPluginsCache.getIdRepoPlugins " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (subConfigNames != null && !subConfigNames.isEmpty()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (Iterator items = subConfigNames.iterator();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ServiceConfig reposc = sc.getSubConfig(idRepoName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "getIdRepoPlugins SubConfig is null for" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Add to cache
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Add internal repos
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("IdRepoPluginsCache.getIdRepoPlugins " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Cache a readonly copy
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (debug.messageEnabled() && (readOrgRepos != null)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (Iterator items = readOrgRepos.iterator(); items.hasNext();) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("IdRepoPluginsCache.getIdRepoPlugins retuned for" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected Set<IdRepo> getIdRepoPlugins(String orgName, IdOperation op,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IdType type) throws IdRepoException, SSOException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("IdRepoPluginsCache.getIdRepoPlugins for " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "OrgName: " + orgName + " Op: " + op + " Type: " + type);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String cacheName = DNUtils.normalizeDN(orgName) + op.toString() +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Set answer = (Set) readonlyPlugins.get(cacheName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (Iterator items = plugins.iterator(); items.hasNext();) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (Iterator items = answer.iterator(); items.hasNext();) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("IdRepoPluginsCache.getIdRepoPlugins retuned for" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster " OrgName: " + orgName + " Op: " + op + " Type: " + type +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster synchronized (idrepoPlugins) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Delete an IdRepo plugin
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void removeIdRepo(String orgName, String name,
synchronized (idrepoPlugins) {
name);
if (reinitialize) {
synchronized (idrepoPlugins) {
public void clearIdRepoPluginsCache() {
synchronized (idrepoPlugins) {
throw new IdRepoException(
throw new IdRepoException(
synchronized (idrepoPlugins) {
boolean addInternalRepos = false;
addInternalRepos = true;
if (addInternalRepos) {
protected void initializeListeners() {
synchronized (debug) {
if (!initializedListeners) {
new JAXRPCObjectImplEventListener());
initializedListeners = true;
smse);
ssoe);
return (null);
return (answer);
} catch (Exception e) {
return pluginClass;
} catch (Exception e) {
return pluginClass;
} catch (Exception e) {
return pluginClass;
} catch (Exception e) {
public void run() {