Attach filesAttach ScreenshotAdd voteVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Open
    • Major
    • Resolution: Unresolved
    • None
    • None
    • config, jackrabbit-core
    • None

    Description

      It's possible (and even handy) not to have config resources as Files but as classpath resources, so they can be bundled into the binaries.
      For example, org.apache.jackrabbit.jca.JCARepositoryManager is able to resolve the repository config file as a classpath resource if it's prefixed with "classpath:".

      However, other config files such as the indexing configuration can't currently be resolved this way. IMHO, this is particularly a problem when using a connector, which should operate as a standalone bundle without requiring deploying additional resources on the filesystem.

      Concerning the indexing configuration, I've modified org.apache.jackrabbit.core.query.lucene.SearchIndex.getIndexingConfigurationDOM() so it resolves indexingConfiguration as a classpath resource if it's prefixed with "classpath:":

      protected Element getIndexingConfigurationDOM() {
      if (indexingConfiguration != null)

      { return indexingConfiguration; }

      if (indexingConfigPath == null)

      { return null; }

      try {
      DocumentBuilderFactory factory =
      DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();
      builder.setEntityResolver(new IndexingConfigurationEntityResolver());

      if (indexingConfigPath.startsWith(CLASSPATH_CONFIG_PREFIX)) {
      ClassLoader cl = Thread.currentThread().getContextClassLoader();
      if (cl == null)

      { cl = this.getClass().getClassLoader(); }

      InputStream config = cl.getResourceAsStream(indexingConfigPath.substring(CLASSPATH_CONFIG_PREFIX.length()));
      if (config == null) {
      log.warn("Classpath resource does not exist: {}", indexingConfigPath);
      return null;
      }
      indexingConfiguration = builder.parse(config).getDocumentElement();
      log.info("indexingConfigPath '{}' resolved as classpath resource", indexingConfigPath);

      } else {
      File config = new File(indexingConfigPath);
      if (!config.exists()) {
      log.warn("File does not exist: {}", indexingConfigPath);
      return null;
      } else if (!config.canRead()) {
      log.warn("Cannot read file: {}", indexingConfigPath);
      return null;
      }
      indexingConfiguration = builder.parse(config).getDocumentElement();
      }

      } catch (ParserConfigurationException e)

      { log.warn("Unable to create XML parser", e); }

      catch (IOException e)

      { log.warn("Exception parsing " + indexingConfigPath, e); } catch (SAXException e) { log.warn("Exception parsing " + indexingConfigPath, e); }

      return indexingConfiguration;
      }

      Would it be possible to commit this in the trunk?

      Best regards,

      Stéphane Landelle

      Attachments

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            kalished Stephane Landelle

            Dates

              Created:
              Updated:

              Time Tracking

                Estimated:
                Original Estimate - 0.5h
                0.5h
                Remaining:
                Remaining Estimate - 0.5h
                0.5h
                Logged:
                Time Spent - Not Specified
                Not Specified

                Slack

                  Issue deployment