/** * Created on Aug 31, 2005 * * $Id: RepositoryFactoryBean.java,v 1.2 2006/07/03 22:07:31 costin Exp $ * $Revision: 1.2 $ */ package org.springmodules.jcr.jackrabbit; import javax.jcr.Repository; import org.apache.jackrabbit.api.JackrabbitRepository; import org.apache.jackrabbit.core.RepositoryImpl; import org.apache.jackrabbit.core.config.RepositoryConfig; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.xml.sax.InputSource; /** * FactoryBean for creating a JackRabbit (JCR-170) repository through Spring * configuration files. Use this factory bean when you have to manually * configure the repository; for retrieving the repository from JNDI use the * JndiObjectFactoryBean {@link org.springframework.jndi.JndiObjectFactoryBean} * * * @see org.springframework.jndi.JndiObjectFactoryBean * @author Costin Leau * */ public class RepositoryFactoryBean extends org.springmodules.jcr.RepositoryFactoryBean { /** * Default repository configuration file. */ private static final String DEFAULT_CONF_FILE = "repository.xml"; /** * Default repository directory. */ private static final String DEFAULT_REP_DIR = "."; /** * Home directory for the repository. */ private Resource homeDir; /** * Repository configuratin created through Spring. */ private RepositoryConfig repositoryConfig; /** * @see org.springmodules.jcr.RepositoryFactoryBean#createRepository() */ protected Repository createRepository() throws Exception { // return JackRabbit repository. return RepositoryImpl.create(repositoryConfig); } /** * @see org.springmodules.jcr.RepositoryFactoryBean#resolveConfigurationResource() */ protected void resolveConfigurationResource() throws Exception { // read the configuration object if (repositoryConfig != null) return; if (this.configuration == null) { if (log.isDebugEnabled()) log.debug("no configuration resource specified, using the default one:" + DEFAULT_CONF_FILE); configuration = new ClassPathResource(DEFAULT_CONF_FILE); } if (homeDir == null) { if (log.isDebugEnabled()) log.debug("no repository home dir specified, using the default one:" + DEFAULT_REP_DIR); homeDir = new FileSystemResource(DEFAULT_REP_DIR); } repositoryConfig = RepositoryConfig.create(new InputSource(configuration.getInputStream()), homeDir.getFile().getAbsolutePath()); } /** * Shutdown method. * */ public void destroy() throws Exception { // force cast (but use only the interface) if (repository instanceof JackrabbitRepository) ((JackrabbitRepository) repository).shutdown(); } /** * @return Returns the defaultRepDir. */ public Resource getHomeDir() { return this.homeDir; } /** * @param defaultRepDir The defaultRepDir to set. */ public void setHomeDir(Resource defaultRepDir) { this.homeDir = defaultRepDir; } /** * @return Returns the repositryConfig. */ public RepositoryConfig getRepositoryConfig() { return this.repositoryConfig; } /** * @param repositoryConfig The repositryConfig to set. */ public void setRepositoryConfig(RepositoryConfig repositoryConfig) { this.repositoryConfig = repositoryConfig; } }