/** * RepositoryContainer constructor. * * @param parent container * @param config Repository configuration * @param addNamespacePlugins list of addNamespacePlugin * @throws RepositoryException container initialization error * @throws RepositoryConfigurationException configuration error * @throws PrivilegedActionException */ public RepositoryContainer( final ExoContainer parent, RepositoryEntry config, List<ComponentPlugin> addNamespacePlugins) throws RepositoryException, RepositoryConfigurationException { super(new MX4JComponentAdapterFactory(), parent); // Defaults: if (config.getAccessControl() == null) config.setAccessControl(AccessControlPolicy.OPTIONAL); this.config = config; this.addNamespacePlugins = addNamespacePlugins; this.name = config.getName(); try { SecurityHelper.doPrivilegedExceptionAction( new PrivilegedExceptionAction<Void>() { public Void run() throws RepositoryConfigurationException { context.setName(parent.getContext().getName() + "-" + name); try { parent.registerComponentInstance(name, RepositoryContainer.this); initAllWorkspaceComponentEntries(parent); registerComponents(); } catch (Throwable t) // NOSONAR { unregisterAllComponents(); parent.unregisterComponent(name); throw new RepositoryConfigurationException( "Can not register repository container " + name + " in parent container.", t); } return null; } }); } catch (PrivilegedActionException e) { Throwable ex = e.getCause(); if (ex instanceof RepositoryConfigurationException) { throw (RepositoryConfigurationException) ex; } else { throw new RepositoryConfigurationException(ex.getMessage(), ex); } } }