public interface RepositoryFactory extends RepositoryFactory, Repositories
RepositoryFactory
interface, with ModeShape-specific constants and additional
shutdown()
methods.
ModeShape's RepositoryFactory implementation looks for two parameters:
org.modeshape.jcr.URL
- This parameter specifies the URL of the configuration file for the repository
to be used.
org.modeshape.jcr.RepositoryName
- This parameter specifies the name of the repository that is to be
used.
org.modeshape.jcr.RepositoryName
. If one is
found, then return that Repository instance.org.modeshape.jcr.URL
. If the file had
already been loaded, find the repository and return it; otherwise attempt to load the file, deploy the repository, and return
the Repository instance.
But strictly speaking, only the org.modeshape.jcr.api.URL
parameter is required, since the configuration file
contains the name of the repository. So why supply the org.modeshape.jcr.RepositoryName
parameter? Because
ModeShape's RepositoryFactory.getRepository(Map)
method can look up an existing repository by name faster
than it can load the configuration file. In other words, using both parameters makes for a faster operation.
The best way for your application to use the RepositoryFactory is to use only the JCR API, and load the properties from a file. This way, only the file has implementation-specific information, while your application uses only the standard JCR API:
Properties parameters = new Properties(); parameters.load(...); // Load from a stream or reader Repository repository = null; for (RepositoryFactory factory : ServiceLoader.load(RepositoryFactory.class)) { repository = factory.getRepository(parameters); if (repository != null) break; }
If you'd rather your application programmatically create the parameters to pass to JCR's RepositoryFactory, and your application is already dependent upon the ModeShape public API, you can use the constants in this interface to build your parameters.
String configUrl = "file://path/to/configFile.json"; // URL that points to the repository's configuration file String repoName = "MyRepository"; // Name of the repository (this is optional) Map<String, String> parameters = new HashMap<String, String>(); parameters.put(org.modeshape.jcr.api.RepositoryFactory.URL, configUrl); parameters.put(org.modeshape.jcr.api.RepositoryFactory.RepositoryName, repoName); Repository repository = null; for (RepositoryFactory factory : ServiceLoader.load(RepositoryFactory.class)) { repository = factory.getRepository(parameters); if (repository != null) break; }
Modifier and Type | Field and Description |
---|---|
static String |
REPOSITORY_NAME
The name of the key for the ModeShape JCR repository name in the parameter map.
|
static String |
URL
The name of the key for the ModeShape JCR URL in the parameter map.
|
Modifier and Type | Method and Description |
---|---|
Repository |
getRepository(String repositoryName)
Deprecated.
since 3.4, this method should not be used. Code using it should change to use
RepositoriesContainer instead |
Set<String> |
getRepositoryNames()
Deprecated.
since 3.4, this method should not be used. Code using it should change to use
RepositoriesContainer instead |
Future<Boolean> |
shutdown()
Deprecated.
since 3.4, this method should not be used. Code using it should change to use
RepositoriesContainer instead |
boolean |
shutdown(long timeout,
TimeUnit unit)
Deprecated.
since 3.4, this method should not be used. Code using it should change to use
RepositoriesContainer instead |
getRepository
static final String URL
For example, define a URL that points to the configuration file for your repository:
\// Define a String configUrl = "file://path/to/configFile.xml?repositoryName=myRepository"; // URL that points to your configuration file Map<String, String> parameters = new HashMap<String, String>(); parameters.put(org.modeshape.jcr.api.RepositoryFactory.URL, configUrl); Repository repository = null; for (RepositoryFactory factory : ServiceLoader.load(RepositoryFactory.class)) { repository = factory.getRepository(parameters); if (repository != null) break; }
static final String REPOSITORY_NAME
URL
.
For example:
String configUrl = "file://path/to/configFile.json"; // URL that points to your configuration file String repoName = "myRepository"; // Name of your repository defined within the configuration file Map<String, String> parameters = new HashMap<String, String>(); parameters.put(org.modeshape.jcr.api.RepositoryFactory.URL, configUrl); parameters.put(org.modeshape.jcr.api.RepositoryFactory.REPOSITORY_NAME, repoName); Repository repository = null; for (RepositoryFactory factory : ServiceLoader.load(RepositoryFactory.class)) { repository = factory.getRepository(parameters); if (repository != null) break; }
@Deprecated Future<Boolean> shutdown()
RepositoriesContainer
insteadRepositoryFactory.getRepository(Map)
, terminate any ongoing
background operations (such as sequencing), and reclaim any resources that were acquired by the repositories. This method
may be called multiple times, but only the first time has an effect.
Invoking this method does not preclude creating new Repository
instances with future calls to
RepositoryFactory.getRepository(Map)
. Any caller using this method as part of an application shutdown process should take care to
cease invocations of RepositoryFactory.getRepository(Map)
prior to invoking this method.
This method returns immediately, even before the repositories have been shut down. However, the caller can simply call the
get()
method on the returned Future
to block until all repositories have shut down. Note that
the Future.get(long, TimeUnit)
method can be called to block for a maximum amount of time.
getting
the repository from the future, where the exception is wrapped in a
ExecutionException
. The value returned from the future will always be true if the engine shutdown (or was
not running), or false if the engine is still running.@Deprecated boolean shutdown(long timeout, TimeUnit unit) throws InterruptedException
RepositoriesContainer
insteadRepositoryFactory.getRepository(Map)
, terminate any ongoing
background operations (such as sequencing), and reclaim any resources that were acquired by the repositories. This method
may be called multiple times, but only the first time has an effect.
This method is equivalent to calling "shutdown().get(timeout,unit)
" on this method.
Invoking this method does not preclude creating new Repository
instances with future calls to
RepositoryFactory.getRepository(Map)
. Any caller using this method as part of an application shutdown process should take care to
cease invocations of RepositoryFactory.getRepository(Map)
prior to invoking this method.
This method returns immediately, even before the repositories have been shut down. However, the caller can simply call the
get()
method on the returned Future
to block until all repositories have shut down. Note that
the Future.get(long, TimeUnit)
method can be called to block for a maximum amount of time.
timeout
- the maximum time per engine to allow for shutdownunit
- the time unit of the timeout argumentInterruptedException
- if interrupted while waiting@Deprecated Set<String> getRepositoryNames()
RepositoriesContainer
insteadRepositories
getRepositoryNames
in interface Repositories
@Deprecated Repository getRepository(String repositoryName) throws RepositoryException
RepositoriesContainer
insteadRepositories
getRepository
in interface Repositories
repositoryName
- the name of the repository to return; may not be nullRepositoryException
- if no repository exists with the given name or there is an error communicating with
the repositoryCopyright © 2008-2013 JBoss, a division of Red Hat. All Rights Reserved.