You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-dev@lucene.apache.org by "Mo Chen (JIRA)" <ji...@apache.org> on 2009/02/05 09:03:59 UTC
[jira] Updated: (SOLR-1007) Use property values immediately after
definition in every configuration files
[ https://issues.apache.org/jira/browse/SOLR-1007?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mo Chen updated SOLR-1007:
--------------------------
Attachment: solr-1007(solr-336).patch
> Use property values immediately after definition in every configuration files
> -----------------------------------------------------------------------------
>
> Key: SOLR-1007
> URL: https://issues.apache.org/jira/browse/SOLR-1007
> Project: Solr
> Issue Type: Improvement
> Affects Versions: 1.3
> Environment: sun-jre-1.6.0_01, apache-tomcat-6.0, apache-solr-1.3.0
> Reporter: Mo Chen
> Priority: Minor
> Attachments: solr-1007(solr-336).patch
>
>
> h3. Requirement & Target
> the follwing code cause a "No system property or default value specified" exception:
> {code:xml|title=solr_home/solr.xml}
> <solr>
> <property name="foo" value="blah" />
> <property name="bar" value="${foo}" />
> </solr>
> {code}
> because the property *foo* won't be appended to context until method *CoreContainer#readProperties(Config cfg, Node node)* has been accomplished,
> the method can't used it to fill the value of property *bar*.
> The patch allow configuration files use defined property values immediately in the next property definition.
> Also, base on the patch for issue [SOLR-336], the mechanism works in every configuration files like *solr.xml*, and *solrconfig.xml*
> h3. Use cases:
> * define some long base dir at the begining of a configuration file
> * maps some JNDI values and refer them in other properties
> h3. Usage:
> define two main cores and some test cores, two main cores share a same configuration, and test cores share another one.
> {code:xml|title=solr_home/solr.xml}
> <solr persistent="true" sharedLib="lib">
> <property name="solr.solr.home" value="java:comp/env/solr/home" />
> <property name="mainDir" value="${solr.solr.home:./solr}/cores/main/" />
> <property name="testDir" value="${solr.solr.home:./solr}/cores/test/" />
>
> <cores adminPath="/admin/cores">
> <core name="core1" instanceDir="${mainDir}" />
> <core name="core2" instanceDir="${mainDir}" />
> <core name="testcore1" instanceDir="${testDir}" />
> ...
> </cores>
> </solr>
> {code}
> {code:xml|title=solr_home/cores/main/conf/solrconfig.xml}
> <config>
> <!-- this will create two data dirs: solr_home/cores/main/data/core1 & solr_home/cores/main/data/core2 -->
> <dataDir>${solr.core.instanceDir}/data/${solr.core.name}</dataDir>
> ...
> </config>
> {code}
> h3. Coding notes: (including changes from issue [SOLR-336])
> * DOMUtil.java
> public method *substituteProperty(String value, Properties coreProperties)*
> {quote}??method *readProperties(Config cfg, Node node)* use it to convert property values??{quote}
> * CoreContainer.java
> move method *readProperties(Config cfg, Node node)* to *Config.java*
> {quote}??the moved method got a Config for the first argument already... so I think that will be ok??{quote}
> * Config.java
> .
> ** *public Properties readProperties(Node node)*
> create a *context properties* including just parsed properties, default JNDI properties and loader's core properties.
> each property value must be converted by this using *DOMUtil#substituteProperty* and *substituteJNDIProperties*
> before being appended to just parsed properties.
> .
> ** *public Config(SolrResourceLoader loader, String name, InputStream is, String prefix)*
> create a *config properties* base on loader.getCoreProperties(), overwrite JNDI properties and read properties onto it
> and pass it to *DOMUtil.substituteProperties(doc, properties)* instead of loader.getCoreProperties()
> {quote}
> ??this ensure the properties defined in a configuration file only works in the same configuration file.??
> ??I didn't change the core properties itself because I'm not very sure about its influence...??
> ??properties inheriting between files can be implemented by other patches like [SOLR-646]??
> {quote}
> ** *static final Properties DEFAULT_JNDI_PROPERTIES*
> default JNDI mappings. just mapped {{solr/home}} to {{solr.solr.home}} currently.
> .
> ** *private String substituteJNDIProperty(String value)*
> convert a value string in JNDI format like {{java:comp/env/xxx}} into real value
> {quote}??but if you don't want it to be convert... I write {{$\{:java:comp/env/xxx\}}} now. ugly... any better solution???{quote}
> ** *private Properties substituteJNDIProperties(Properties jndiProps)*
> convert all JNDI values in a *Properties* object
> .
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.