[ https://issues.apache.org/jira/browse/JCR-1861?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12650583#action_12650583 ]
Jukka Zitting commented on JCR-1861: ------------------------------------ Thanks! I wonder if we should make this into a generic feature that you could use also for the repository configuration file even outside jackrabbit-jca. PS. Minor nits: your patch contains weird linebreaks (U+2028 LINE SEPARATOR) and uses tabs instead of spaces for indentation. > Support classpath config > ------------------------ > > Key: JCR-1861 > URL: https://issues.apache.org/jira/browse/JCR-1861 > Project: Jackrabbit > Issue Type: Improvement > Components: config > Reporter: Stephane Landelle > Fix For: 1.6.0 > > Attachments: classpathresolvingsearchindex.patch > > Original Estimate: 0.5h > Remaining Estimate: 0.5h > > 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 -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.