### Eclipse Workspace Patch 1.0 #P jackrabbit-jca Index: src/main/java/org/apache/jackrabbit/jca/JCAManagedConnectionFactory.java =================================================================== --- src/main/java/org/apache/jackrabbit/jca/JCAManagedConnectionFactory.java (revision 1201717) +++ src/main/java/org/apache/jackrabbit/jca/JCAManagedConnectionFactory.java (working copy) @@ -46,6 +46,15 @@ private final Map parameters = new HashMap(); /** + * Key for the repository home + */ + final static String HOMEDIR_KEY = "org.apache.jackrabbit.repository.home"; + /** + * Key for the repository config file + */ + final static String CONFIGFILE_KEY = "org.apache.jackrabbit.repository.conf"; + + /** * Flag indicating whether the session should be bound to the * transaction lifecycle. * In other words, if this flag is true the handle @@ -81,28 +90,28 @@ * Return the repository home directory. */ public String getHomeDir() { - return parameters.get("org.apache.jackrabbit.repository.home"); + return parameters.get(HOMEDIR_KEY); } /** * Set the repository home directory. */ public void setHomeDir(String home) { - parameters.put("org.apache.jackrabbit.repository.home", home); + parameters.put(HOMEDIR_KEY, home); } /** * Return the repository configuration file. */ public String getConfigFile() { - return parameters.get("org.apache.jackrabbit.repository.conf"); + return parameters.get(CONFIGFILE_KEY); } /** * Set the repository configuration file. */ public void setConfigFile(String conf) { - parameters.put("org.apache.jackrabbit.repository.conf", conf); + parameters.put(CONFIGFILE_KEY, conf); } /** @@ -168,7 +177,8 @@ /** * Returns a matched connection from the candidate set of connections. */ - public ManagedConnection matchManagedConnections( + @SuppressWarnings("rawtypes") + public ManagedConnection matchManagedConnections( Set set, Subject subject, ConnectionRequestInfo cri) throws ResourceException { for (Object connection : set) { Index: src/main/java/org/apache/jackrabbit/jca/JCARepositoryManager.java =================================================================== --- src/main/java/org/apache/jackrabbit/jca/JCARepositoryManager.java (revision 1201717) +++ src/main/java/org/apache/jackrabbit/jca/JCARepositoryManager.java (working copy) @@ -21,7 +21,10 @@ import org.apache.jackrabbit.api.JackrabbitRepository; import org.apache.jackrabbit.commons.JcrUtils; +import org.apache.jackrabbit.core.RepositoryImpl; +import org.apache.jackrabbit.core.config.RepositoryConfig; +import java.io.InputStream; import java.util.HashMap; import java.util.Map; @@ -68,13 +71,46 @@ Map parameters) throws RepositoryException { Repository repository = repositories.get(parameters); if (repository == null) { - repository = JcrUtils.getRepository(parameters); + if (parameters.containsKey(JcrUtils.REPOSITORY_URI)) { + repository = JcrUtils.getRepository(parameters); + } else { + repository = createNonTransientRepository(parameters); + } repositories.put(parameters, repository); } return repository; } /** + * Creates a non transient Repository + * + * @param parameters + * @return Repository + * @throws RepositoryException + */ + private Repository createNonTransientRepository( + Map parameters) throws RepositoryException { + RepositoryConfig config = null; + + String configFile = parameters.get(JCAManagedConnectionFactory.CONFIGFILE_KEY); + String homeDir = parameters.get(JCAManagedConnectionFactory.HOMEDIR_KEY); + + if (configFile != null && configFile.startsWith(CLASSPATH_CONFIG_PREFIX)) { + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + if (cl == null) { + cl = this.getClass().getClassLoader(); + } + + InputStream configInputStream = cl.getResourceAsStream( + configFile.substring(CLASSPATH_CONFIG_PREFIX.length())); + config = RepositoryConfig.create(configInputStream, homeDir); + } else { + config = RepositoryConfig.create(configFile, homeDir); + } + return RepositoryImpl.create(config); + } + + /** * Shutdown all the repositories. */ public synchronized void shutdown() {