​Please let us know more about your use case. Why are you even "trying" to
load that many records all at once. Or at least scan them one by one, I
mean. In most use cases you wouldn't need to do this kind of thing, unless
it's some kind of backup or replication. I say "most" cases... I'm not
 saying you don't need to just asking for a bit more background. BTW: If
you don't need 'orderable' nodes try to avoid them. That type of node does
not work at 'scale'... and 50K is propably pushing it.​

Best regards,
Clay Ferguson
[email protected]


On Fri, Nov 13, 2015 at 3:33 PM, <[email protected]> wrote:

> Hi,
> I am new to JackRabbit and using version 2.11.2.  I am using JackRabbit to
> store documents in a multi-threaded environment.  I noticed that the time
> it takes to retrieve the root node is inconsistent and slow (several
> seconds +) and degrades over time (after 50K plus child nodes retrieval is
> taking ~15 seconds).
>
> Originally, I was using code as follows to obtain a repository:
>
>  public Repository getRepository() throws ClassNotFoundException,
> RepositoryException {
>
>  
> ServiceLoader.load(Class.forName("org.apache.jackrabbit.jcr2dav.Jcr2davRepositoryFactory"));
>      return JcrUtils.getRepository(jackabbitServerUrl);
>  }
>
> Then I came across the following thread:
>
> http://jackrabbit.510166.n4.nabble.com/getRootNode-takes-27-seconds-td1571027.html#a1571302
>
> This thread had some useful information (BatchReadConfig), but I am not
> certain how to use the API to take advantage of it.  I have changed my code
> to the following but it doesn't appear that node retrieval performance has
> improved, is there something I am missing/doing wrong?
>
> 1) Repository Factory
> public Repository getRepository(@SuppressWarnings("rawtypes") Map
> parameters) throws RepositoryException {
>         String repositoryFactoryName = parameters != null && (
>                 parameters.containsKey(PARAM_REPOSITORY_SERVICE_FACTORY) ||
>                         parameters.containsKey(PARAM_REPOSITORY_CONFIG))
>                 ? "org.apache.jackrabbit.jcr2spi.Jcr2spiRepositoryFactory"
>                 : "org.apache.jackrabbit.core.RepositoryFactoryImpl";
>
>         Object repositoryFactory;
>         try {
>             Class<?> repositoryFactoryClass =
> Class.forName(repositoryFactoryName, true,
>                     Thread.currentThread().getContextClassLoader());
>
>             repositoryFactory = repositoryFactoryClass.newInstance();
>         }
>         catch (Exception e) {
>             throw new RepositoryException(e);
>         }
>
>         if (repositoryFactory instanceof RepositoryFactory) {
>             return ((RepositoryFactory)
> repositoryFactory).getRepository(parameters);
>         }
>         else {
>             throw new RepositoryException(repositoryFactory + " is not a
> RepositoryFactory");
>         }
>     }
>
> 2) Use the factory to get a repo:
>  public Repository getRepository() throws ClassNotFoundException,
> RepositoryException {
>         Map<String, RepositoryConfig> parameters =
> Collections.singletonMap(
>                 "org.apache.jackrabbit.jcr2spi.RepositoryConfig",
>                 (RepositoryConfig) new
> RepositoryConfigImpl(jackabbitServerUrl));
>
>         return getRepository(parameters);
>     }
>
> 3) Repository Config:
> private static final class RepositoryConfigImpl implements
> RepositoryConfig {
>
>         private String jackabbitServerUrl;
>
>         private RepositoryConfigImpl(String jackabbitServerUrl) {
>             super();
>             this.jackabbitServerUrl = jackabbitServerUrl;
>         }
>
>         public CacheBehaviour getCacheBehaviour() {
>             return CacheBehaviour.INVALIDATE;
>         }
>
>         public int getItemCacheSize() {
>             return 100;
>         }
>
>         public int getPollTimeout() {
>             return 5000;
>         }
>
>         public RepositoryService getRepositoryService() throws
> RepositoryException {
>             BatchReadConfig brc = new BatchReadConfig() {
>                 public int getDepth(Path path, PathResolver resolver)
> throws NamespaceException {
>                     return 1;
>                 }
>             };
>             return new RepositoryServiceImpl(jackabbitServerUrl, brc);
>         }
>
>     }
>
> Thanks for your time.
>
> David
>
>
>
>

Reply via email to