/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jackrabbit.core; import java.io.File; import java.io.IOException; import java.util.concurrent.ScheduledExecutorService; import javax.jcr.NoSuchWorkspaceException; import javax.jcr.RepositoryException; import org.apache.jackrabbit.core.RepositoryImpl.WorkspaceInfo; import org.apache.jackrabbit.core.cluster.ClusterNode; import org.apache.jackrabbit.core.config.RepositoryConfig; import org.apache.jackrabbit.core.data.DataStore; import org.apache.jackrabbit.core.fs.FileSystem; import org.apache.jackrabbit.core.id.NodeId; import org.apache.jackrabbit.core.id.NodeIdFactory; import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry; import org.apache.jackrabbit.core.security.JackrabbitSecurityManager; import org.apache.jackrabbit.core.security.authorization.PrivilegeRegistry; import org.apache.jackrabbit.core.state.ItemStateCacheFactory; import org.apache.jackrabbit.stats.RepositoryStatisticsImpl; import org.apache.jackrabbit.core.stats.StatManager; import org.apache.jackrabbit.core.version.InternalVersionManagerImpl; /** * Internal component context of a Jackrabbit content repository. * A repository context consists of the internal repository-level * components and resources like the namespace and node type * registries. Access to these resources is available only to objects * with a reference to the context object. */ public class RepositoryContext { /** * The repository instance to which this context is associated. */ private final RepositoryImpl repository; /** * The namespace registry of this repository. */ private NamespaceRegistryImpl namespaceRegistry; /** * The node type registry of this repository. */ private NodeTypeRegistry nodeTypeRegistry; /** * The privilege registry for this repository. */ private PrivilegeRegistry privilegeRegistry; /** * The internal version manager of this repository. */ private InternalVersionManagerImpl internalVersionManager; /** * The root node identifier of this repository. */ private NodeId rootNodeId; /** * The repository file system. */ private FileSystem fileSystem; /** * The data store of this repository, or <code>null</code>. */ private DataStore dataStore; /** * The cluster node instance of this repository, or <code>null</code>. */ private ClusterNode clusterNode; /** * Workspace manager of this repository. */ private WorkspaceManager workspaceManager; /** * Security manager of this repository; */ private JackrabbitSecurityManager securityManager; /** * Item state cache factory of this repository. */ private ItemStateCacheFactory itemStateCacheFactory; private NodeIdFactory nodeIdFactory; /** * Thread pool of this repository. */ private final ScheduledExecutorService executor = new JackrabbitThreadPool(); /** * Repository statistics collector. */ private final RepositoryStatisticsImpl statistics; /** * The Statistics manager, handles statistics */ private StatManager statManager; /** * flag to indicate if GC is running */ private boolean gcRunning; /** * Creates a component context for the given repository. * * @param repository repository instance */ RepositoryContext(RepositoryImpl repository) { assert repository != null; this.repository = repository; this.statistics = new RepositoryStatisticsImpl(executor); this.statManager = new StatManager(); } /** * Starts a repository with the given configuration and returns * the internal component context of the started repository. * * @since Apache Jackrabbit 2.3.1 * @param config repository configuration * @return component context of the repository * @throws RepositoryException if the repository could not be started */ public static RepositoryContext create(RepositoryConfig config) throws RepositoryException { RepositoryImpl repository = RepositoryImpl.create(config); return repository.getRepositoryContext(); } /** * Starts a repository in the given directory and returns the * internal component context of the started repository. If needed, * the directory is created and a default repository configuration * is installed inside it. * * @since Apache Jackrabbit 2.3.1 * @see RepositoryConfig#install(File) * @param dir repository directory * @return component context of the repository * @throws RepositoryException if the repository could not be started * @throws IOException if the directory could not be initialized */ public static RepositoryContext install(File dir) throws RepositoryException, IOException { return create(RepositoryConfig.install(dir)); } public RepositoryConfig getRepositoryConfig() { return repository.getConfig(); } /** * Returns the repository instance to which this context is associated. * * @return repository instance */ public RepositoryImpl getRepository() { return repository; } /** * Returns the thread pool of this repository. * * @return repository thread pool */ public ScheduledExecutorService getExecutor() { return executor; } /** * Returns the namespace registry of this repository. * * @return namespace registry */ public NamespaceRegistryImpl getNamespaceRegistry() { assert namespaceRegistry != null; return namespaceRegistry; } /** * Sets the namespace registry of this repository. * * @param namespaceRegistry namespace registry */ void setNamespaceRegistry(NamespaceRegistryImpl namespaceRegistry) { assert namespaceRegistry != null; this.namespaceRegistry = namespaceRegistry; } /** * Returns the namespace registry of this repository. * * @return node type registry */ public NodeTypeRegistry getNodeTypeRegistry() { assert nodeTypeRegistry != null; return nodeTypeRegistry; } /** * Sets the node type registry of this repository. * * @param nodeTypeRegistry node type registry */ void setNodeTypeRegistry(NodeTypeRegistry nodeTypeRegistry) { assert nodeTypeRegistry != null; this.nodeTypeRegistry = nodeTypeRegistry; } /** * Returns the privilege registry of this repository. * * @return the privilege registry of this repository. */ public PrivilegeRegistry getPrivilegeRegistry() { return privilegeRegistry; } /** * Sets the privilege registry of this repository. * * @param privilegeRegistry */ void setPrivilegeRegistry(PrivilegeRegistry privilegeRegistry) { assert privilegeRegistry != null; this.privilegeRegistry = privilegeRegistry; } /** * Returns the internal version manager of this repository. * * @return internal version manager */ public InternalVersionManagerImpl getInternalVersionManager() { return internalVersionManager; } /** * Sets the internal version manager of this repository. * * @param internalVersionManager internal version manager */ void setInternalVersionManager( InternalVersionManagerImpl internalVersionManager) { assert internalVersionManager != null; this.internalVersionManager = internalVersionManager; } /** * Returns the root node identifier of this repository. * * @return root node identifier */ public NodeId getRootNodeId() { assert rootNodeId != null; return rootNodeId; } /** * Sets the root node identifier of this repository. * * @param rootNodeId root node identifier */ void setRootNodeId(NodeId rootNodeId) { assert rootNodeId != null; this.rootNodeId = rootNodeId; } /** * Returns the repository file system. * * @return repository file system */ public FileSystem getFileSystem() { assert fileSystem != null; return fileSystem; } /** * Sets the repository file system. * * @param fileSystem repository file system */ void setFileSystem(FileSystem fileSystem) { assert fileSystem != null; this.fileSystem = fileSystem; } /** * Returns the data store of this repository, or <code>null</code> * if a data store is not configured. * * @return data store, or <code>null</code> */ public DataStore getDataStore() { return dataStore; } /** * Sets the data store of this repository. * * @param dataStore data store */ void setDataStore(DataStore dataStore) { assert dataStore != null; this.dataStore = dataStore; } /** * Returns the cluster node instance of this repository, or * <code>null</code> if clustering is not enabled. * * @return cluster node */ public ClusterNode getClusterNode() { return clusterNode; } /** * Sets the cluster node instance of this repository. * * @param clusterNode cluster node */ void setClusterNode(ClusterNode clusterNode) { assert clusterNode != null; this.clusterNode = clusterNode; } /** * Returns the workspace manager of this repository. * * @return workspace manager */ public WorkspaceManager getWorkspaceManager() { assert workspaceManager != null; return workspaceManager; } /** * Sets the workspace manager of this repository. * * @param workspaceManager workspace manager */ void setWorkspaceManager(WorkspaceManager workspaceManager) { assert workspaceManager != null; this.workspaceManager = workspaceManager; } /** * Returns the {@link WorkspaceInfo} for the named workspace. * * @param workspaceName The name of the workspace whose {@link WorkspaceInfo} * is to be returned. This must not be <code>null</code>. * @return The {@link WorkspaceInfo} for the named workspace. This will * never be <code>null</code>. * @throws NoSuchWorkspaceException If the named workspace does not exist. * @throws RepositoryException If this repository has been shut down. */ public WorkspaceInfo getWorkspaceInfo(String workspaceName) throws NoSuchWorkspaceException, RepositoryException { return repository.getWorkspaceInfo(workspaceName); } /** * Returns the security manager of this repository. * * @return security manager */ public JackrabbitSecurityManager getSecurityManager() { assert securityManager != null; return securityManager; } /** * Sets the security manager of this repository. * * @param securityManager security manager */ void setSecurityManager(JackrabbitSecurityManager securityManager) { assert securityManager != null; this.securityManager = securityManager; } /** * Returns the item state cache factory of this repository. * * @return item state cache factory */ public ItemStateCacheFactory getItemStateCacheFactory() { assert itemStateCacheFactory != null; return itemStateCacheFactory; } /** * Sets the item state cache factory of this repository. * * @param itemStateCacheFactory item state cache factory */ void setItemStateCacheFactory(ItemStateCacheFactory itemStateCacheFactory) { assert itemStateCacheFactory != null; this.itemStateCacheFactory = itemStateCacheFactory; } public void setNodeIdFactory(NodeIdFactory nodeIdFactory) { this.nodeIdFactory = nodeIdFactory; } public NodeIdFactory getNodeIdFactory() { return nodeIdFactory; } /** * Returns the repository statistics collector. * * @return repository statistics collector */ public RepositoryStatisticsImpl getRepositoryStatistics() { return statistics; } /** * @return the statistics manager object */ public StatManager getStatManager() { return statManager; } /** * * @return gcRunning status */ public boolean isGcRunning() { return gcRunning; } /** * set gcRunnign status * @param gcRunning */ public synchronized void setGcRunning(boolean gcRunning) { this.gcRunning = gcRunning; } }