[ 
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.

Reply via email to