Jackrabbit Content Repository
  1. Jackrabbit Content Repository
  2. JCR-1304

Support system properties in ${...} vars in XML config files

    Details

    • Type: New Feature New Feature
    • Status: Closed
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 1.4
    • Component/s: config, jackrabbit-core
    • Labels:
      None

      Description

      The variable replacement ($

      {...}

      ) in config files like repository.xml currently only allows for the special variables introduced by Jackrabbit, eg. $

      {wsp.name}

      or $

      {rep.home}

      . But it would be useful to support all java system properties here as it is some kind of a standard in Java XML config files (see Spring for an example).

      This makes it easier to inject variables from outside the config file, eg. by setting them on the command line or injecting them programmatically in test cases. Typical parameters for that include database connection credentials, which one wants to avoid to put into repository.xml files that are often checked into SVN.

      This is especially true for test cases, eg. I currently work on a persistence manager component and I want to include the repository.xml in the source tree (under applications/test) but without my specific credentials. These are applied by loading a user-specific properties file through the test case before the repository is started and the config is read.

      1. enable-system-props-in-config-vars.patch
        1 kB
        Alexander Klimetschek
      2. JCR-1304.patch
        1 kB
        Jukka Zitting
      3. JCR-1304.patch
        0.8 kB
        Jukka Zitting

        Issue Links

          Activity

          Hide
          Jukka Zitting added a comment -

          Committed my patch in revision 611143 and merged it to the 1.4 branch in revision 611145.

          Show
          Jukka Zitting added a comment - Committed my patch in revision 611143 and merged it to the 1.4 branch in revision 611145.
          Hide
          Jukka Zitting added a comment -

          Good point about the workspace config, the attached updated version of my patch addresses this.

          Text.replaceVariables is probably not used elsewhere within Jackrabbit, but I'd still be wary of changing the API. The current API is clean and simple and a client can trivially include (or exclude) system properties in the set of properties being replaced.

          Show
          Jukka Zitting added a comment - Good point about the workspace config, the attached updated version of my patch addresses this. Text.replaceVariables is probably not used elsewhere within Jackrabbit, but I'd still be wary of changing the API. The current API is clean and simple and a client can trivially include (or exclude) system properties in the set of properties being replaced.
          Hide
          Alexander Klimetschek added a comment -

          I just found nothing using Text.replaceVariables apart from the config files

          Is RepositoryConfig.create ok? AFAIU it parses repository.xml. What about a workspace.xml of an exisiting workspace? Will it still contain the variables or are they replaced by their values when the workspace.xml is created?

          Show
          Alexander Klimetschek added a comment - I just found nothing using Text.replaceVariables apart from the config files Is RepositoryConfig.create ok? AFAIU it parses repository.xml. What about a workspace.xml of an exisiting workspace? Will it still contain the variables or are they replaced by their values when the workspace.xml is created?
          Hide
          Jukka Zitting added a comment -

          Instead of changing the contract of Text.replaceVariables (there might be cases where you don't want system properties) I'd just change RepositoryConfig.create. See the attached JCR-1304.patch.

          Show
          Jukka Zitting added a comment - Instead of changing the contract of Text.replaceVariables (there might be cases where you don't want system properties) I'd just change RepositoryConfig.create. See the attached JCR-1304 .patch.
          Hide
          Alexander Klimetschek added a comment -

          Patches the o.a.j.util.Text.replaceVariables() method in jackrabbit-jcr-commons to look for system properties as well.

          The jackrabbit specific properties are still inspected first, but if none is found, a lookup via System.getProperty() is made. If that fails, the behaviour is as before, ie. it either returns "" or throws an exception, depending on the is ignoreMissing variable.

          As the Text class hasn't change over that last releases, this patch can be applied to 1.3, 1.4 and 1.5 (trunk) branches. (That's why I set the affects version field to those)

          Show
          Alexander Klimetschek added a comment - Patches the o.a.j.util.Text.replaceVariables() method in jackrabbit-jcr-commons to look for system properties as well. The jackrabbit specific properties are still inspected first, but if none is found, a lookup via System.getProperty() is made. If that fails, the behaviour is as before, ie. it either returns "" or throws an exception, depending on the is ignoreMissing variable. As the Text class hasn't change over that last releases, this patch can be applied to 1.3, 1.4 and 1.5 (trunk) branches. (That's why I set the affects version field to those)

            People

            • Assignee:
              Jukka Zitting
              Reporter:
              Alexander Klimetschek
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development