Uploaded image for project: 'Jackrabbit Content Repository'
  1. Jackrabbit Content Repository
  2. JCR-2935

RepositoryAccessServlet fails to get jndi.name

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Trivial
    • Resolution: Unresolved
    • 2.2.4
    • None
    • config, jackrabbit-webapp
    • None

    Description

      The RepositoryAccessServlet provided in JackRabbit WebApp lookup for a repository.name instead of jndi.name.
      By default both variables has the same value, if the user doesn't customize WEB-INF/template/bootstrap.properties or config/jackrabbit/boostrap.properties Jackrabbit works.

      Otherwise, if the user customize bootstrap.properties causing jndi.name has a different value compared to repository.name the servlet will register the JNDI perfectly but will fail to lookup for the resource.

      An example of a config/jackrabbit/bootstrap.properties that will fail is:
      #bootstrap properties for the repository startup servlet.
      #Wed Mar 30 12:35:24 BRT 2011
      jndi.name=jcr/RepositorioJCR
      repository.home=/scratch/jcr/repositorios/coletaCVM
      jndi.enabled=true
      rmi.enabled=false
      repository.name=RepositorioJCR
      repository.config=/scratch/jcr/repositorios/coletaCVM/repository.xml

      Note: jndi.name and repository.name has different values.

      To fix this issue one should edit the getRepositoryByJNDI() function at http://svn.apache.org/repos/asf/jackrabbit/trunk/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryAccessServlet.java.

      /**

      • Checks if the repository is available via JNDI and returns it.
      • @return the repository or <code>null</code>
      • @throws ServletException if this servlet is not properly configured.
        */
        private Repository getRepositoryByJNDI() throws ServletException {
        BootstrapConfig config = getConfig();
        if (!config.getJndiConfig().isValid() || !config.getJndiConfig().enabled()) { return null; }
        // acquire via JNDI
        String repositoryName = config.getRepositoryName();
        InitialContext ctx = getInitialContext();
        if (ctx == null) { return null; }

        try

        { Repository r = (Repository) ctx.lookup(repositoryName); log.info("Acquired repository via JNDI."); return r; }

        catch (NamingException e) {
        log.error("Error while retrieving repository using JNDI (name={})", repositoryName, e);
        return null;
        }
        }

      Change the line
      String repositoryName = config.getRepositoryName();
      To:
      String repositoryName = config.getJndiConfig().getJndiName();

      Attachments

        1. RepositoryAccessServlet.java
          13 kB
          Gustavo Orair

        Activity

          People

            Unassigned Unassigned
            orair Gustavo Orair
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:

              Time Tracking

                Estimated:
                Original Estimate - 10m
                10m
                Remaining:
                Remaining Estimate - 10m
                10m
                Logged:
                Time Spent - Not Specified
                Not Specified