You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Boris Horvat <ho...@gmail.com> on 2014/11/08 17:17:49 UTC

How to override property files in tapestry

Hi all,

I have the following folders structure

/payex.properties

/prod/payex.properties
/dev/payex.properties

My idea is for the tapestry to always load the root (/payex.properties) and
then give the execution mode to load one of the payex.properties that
contain environment specific fields. My first initial guess was to try
something like

    public static void contributeSymbolSource(final
OrderedConfiguration<SymbolProvider> configuration,
@Symbol(SymbolConstants.EXECUTION_MODE) String environment) {
        configuration.add("PayexSymbols", new
ClasspathResourceSymbolProvider("payex.properties"),
"before:ApplicationDefaults");
        configuration.add("PayexSymbols", new
ClasspathResourceSymbolProvider(environment + "/payex.properties"),
"before:ApplicationDefaults");
    }

But I got the following exception.

java.lang.IllegalStateException: Construction of service 'SymbolSource' has
failed due to recursion: the service depends on itself in some way. Please
check org.apache.tapestry5.ioc.internal.services.SymbolSourceImpl(List) (at
SymbolSourceImpl.java:198) via
org.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder) (at
TapestryIOCModule.java:49) for references to another service that is itself
dependent on service 'SymbolSource'.

I guess I can't use @Symbol at the same time I want to contribute to it

Is my hierarchy even possible to achieve given all of this?
-- 
Sincerely
*Boris Horvat*

Re: How to override property files in tapestry

Posted by Alex Kotchnev <ak...@gmail.com>.
Boris - not sure how helpful this would be, but here's my 2c. I'm not
entirely sure how you might accomplish the hierarchy of symbols that you're
looking for, but I think I've had an alternative approach that might
accomplish the same.

In the past, I've primarily accomplished this using Maven build magic and
property replacement. Thus, I'd have a single .properties file which
contains the symbols that I need in my application, and then I'd have maven
"build profile" specific properties that are substituted in the .properties
file using maven filtering.

e.g. in somesymbols.properties (making sure it's a filtered resource in
maven)
# static symbol, doesn't depend on the environment
foo=bar
# environment specific symbol
monkey=${envMonkey}

in a maven profile, e.g. development-profile:
<envMonkey>devMonkey</envMonkey)
in a maven profile, e.g. prod-profile
<envMonkey>prodMonkey</envMonkey>

Cheers - Alex K

On Sat, Nov 8, 2014 at 11:17 AM, Boris Horvat <ho...@gmail.com>
wrote:

> Hi all,
>
> I have the following folders structure
>
> /payex.properties
>
> /prod/payex.properties
> /dev/payex.properties
>
> My idea is for the tapestry to always load the root (/payex.properties) and
> then give the execution mode to load one of the payex.properties that
> contain environment specific fields. My first initial guess was to try
> something like
>
>     public static void contributeSymbolSource(final
> OrderedConfiguration<SymbolProvider> configuration,
> @Symbol(SymbolConstants.EXECUTION_MODE) String environment) {
>         configuration.add("PayexSymbols", new
> ClasspathResourceSymbolProvider("payex.properties"),
> "before:ApplicationDefaults");
>         configuration.add("PayexSymbols", new
> ClasspathResourceSymbolProvider(environment + "/payex.properties"),
> "before:ApplicationDefaults");
>     }
>
> But I got the following exception.
>
> java.lang.IllegalStateException: Construction of service 'SymbolSource' has
> failed due to recursion: the service depends on itself in some way. Please
> check org.apache.tapestry5.ioc.internal.services.SymbolSourceImpl(List) (at
> SymbolSourceImpl.java:198) via
> org.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder) (at
> TapestryIOCModule.java:49) for references to another service that is itself
> dependent on service 'SymbolSource'.
>
> I guess I can't use @Symbol at the same time I want to contribute to it
>
> Is my hierarchy even possible to achieve given all of this?
> --
> Sincerely
> *Boris Horvat*
>