You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Tim <ko...@gmail.com> on 2011/09/28 18:47:09 UTC

Where to store site settings?

Can someone please tell me the best way to store site settings in a 
Tapestry application?

I would like to store the location of a certain directory (where Lucene 
data is to be kept), and it is different in development and in 
production, so I don't want it hard coded into the code.  Where should I 
store this setting?  In a properties file? (and if so, where do I store 
the location to the properties files?)   In the web.xml file as a 
context-param?  In app.properties?

What do people out there do?

I suspect the answer is probably app.properties, so how do I get access 
to this in a normal Java class?

Thanks.

--
Tim Koop

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Where to store site settings?

Posted by Mark <ma...@xeric.net>.
On Wed, Sep 28, 2011 at 11:47 AM, Tim <ko...@gmail.com> wrote:

> Can someone please tell me the best way to store site settings in a
> Tapestry application?
>
>
You can set a context parameter in web.xml like this:

<context-param>
     <param-name>registration.properties-file</param-name>
     <param-value>misc/registration.properties</param-value>
</context-param>
(I'm not sure, but putting things in app.properties may do the exact same
thing, but without the XML.)

I use Apache Common's to handle the properties in situations where I want
the users to be able to update them from the webapp and the values to be
saved to the properties file. So what you see above is how I set the name of
the properties file in the first place.

Then I get the value in a service using a constructor like:

 public ConfigurationImpl(@Value("${registration.properties-file}") String
fileName)

For handling the differences between test and production, my master branch
sets the registration.properties at one location and my deployment branches
set it in a different location. Before deploying I always merge everything I
need from master to the deployment branch and deploy from there.

I'm not saying that is the best way to handle it, but that is what I'm doing
for one of my applications and it seems to be working well. In particular,
it makes it easy for me to wipe out my database during testing without
losing all the configuration data.

Mark

Re: Where to store site settings?

Posted by ksrijith <ks...@gmail.com>.
You could access the properties as symbol.

You can refer the link below for an example:
http://wiki.apache.org/tapestry/Tapestry5HowToReadSymbolsFromPropertiesFile

This gives you the freedom to hold the configs in the property files rather
than as part of system properties or as init parameters in the web.xml

-----
--
Don't Forget to Rate
--
View this message in context: http://tapestry.1045711.n5.nabble.com/Where-to-store-site-settings-tp4849942p5605548.html
Sent from the Tapestry - User mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Where to store site settings?

Posted by trsvax <tr...@gmail.com>.
I think I've done this differently on every project and every way has turned
out wrong. The way I do it now is objects in the environment. The great
thing about this way is you can set defaults for the entire site, override
them depending on development/production and override it at any point in the
page render cycle. For example the defaults are set this way in AppModule. 

	@Contribute(EnvironmentSetup.class)
	public static void provideEnvironmentSetup(MappedConfiguration<Class,
Object> configuration) {
		configuration.add(FrameworkEnvironment.class, new
FrameworkValues(null).withName("tb"));
		configuration.add(ButtonEnvironment.class, new ButtonValues(null));
		configuration.add(FormEnvironment.class, new FormValues(null));
		configuration.add(NavEnvironment.class, new NavValues(null));
		configuration.add(TableEnvironment.class, new TableValues(null));
	}

To override them 

	@Contribute(EnvironmentSetup.class)
	public static void provideEnvironmentSetup(MappedConfiguration<Class,
Object> configuration) {
		configuration.override(TableEnvironment.class, new
TableValues(null).withType("table"));
		configuration.override(FormEnvironment.class, new
FormValues(null).withType("form-horizontal"));
	}


You'll need to set then in a markup filter

public void
contributeMarkupRenderer(OrderedConfiguration<MarkupRendererFilter>
configuration,
			final Logger logger,
			final EnvironmentSetup environmentSetup,
			final Environment environment, 
			final JavaScriptSupport javaScriptSupport, 
			final ExcludeVisitor excludeVistior,
			@InjectService(BootstrapVisitor.id)  final FrameworkVisitor
frameworkVisitor,
			@InjectService("FrameworkProvider") final FrameworkProvider
frameworkProvider) {

		MarkupRendererFilter bootstrapFilter = new MarkupRendererFilter() {		
			public void renderMarkup(MarkupWriter writer, MarkupRenderer renderer) {
				environmentSetup.push(); // push all the defaults
				renderer.renderMarkup(writer);				
				environmentSetup.pop(); // pop them after the render

Don't forget

public void
contributePartialMarkupRenderer(OrderedConfiguration<PartialMarkupRendererFilter>
configuration,

Here is the service to push/pop them

@SuppressWarnings("rawtypes")
public class EnvironmentSetupImpl implements EnvironmentSetup {
	private final Map<Class,Object> setup;
	private final Environment environment;
	
	public EnvironmentSetupImpl(Map<Class,Object> setup, Logger logger,
Environment environment) {
		this.setup = setup;
		this.environment = environment;
	}
	
	@SuppressWarnings("unchecked")
	public void push() {
		for ( Entry<Class, Object> entry : setup.entrySet() ) {
			environment.push(entry.getKey(), entry.getValue());
		}
	}
	@SuppressWarnings("unchecked")
	public void pop() {
		for ( Entry<Class, Object> entry : setup.entrySet() ) {
			environment.pop(entry.getKey());
		}
	}

}


Now you can access them in pages/components/services. Plus by pushing new
ones you can override them at any point in the render cycle. I make the
constructor take the current one so you can chain them like this

environment.push(TableEnvironment.class, new
TableValues(environment.peekRequired(TableEnvironment.class)).withType("table-bordered"));

public class TableValues implements TableEnvironment {
	private String type;
	private boolean isInstrumented;
	private String sortElement = "i";
	private String[] sortElementAttributes = {"class","icon-random"};
	private String prefix = "table";
	
	public TableValues(TableEnvironment values) {
		if ( values != null ) {
			type = values.getType(null);
			sortElement = values.getSortElement();
			sortElementAttributes = values.getSortElementAttributes();
		}
	}

Finally I created an EnvironmentBinding so you can do this

${env:InterfaceName.property}

https://github.com/trsvax/tapestry-bootstrap/blob/master/src/main/java/com/trsvax/bootstrap/services/EnvironmentBindingFactory.java

While this might seem like a lot of code it's all pretty straight forward
and can be implemented as a module so you can just drop it into any project.



--
View this message in context: http://tapestry.1045711.n5.nabble.com/Where-to-store-site-settings-tp4849942p5607227.html
Sent from the Tapestry - User mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Where to store site settings?

Posted by Beat Durrer <bd...@gmail.com>.
We load a different hibernate.cfg.xml for each environment by adding a
HibernateSessionSource Service:

In our DevelopmentModule:

public static void
contributeApplicationDefaults(MappedConfiguration<String, Object>
configuration){
      // to prevent the default file to be loaded
      configuration.add(HibernateSymbols.DEFAULT_CONFIGURATION, "false");
}


public static void
contributeHibernateSessionSource(OrderedConfiguration<HibernateConfigurer>
hibernateConfigurers, Logger logger){
     hibernateConfigurers.add("hibernate.cfg.file", new
FilebasedHibernateSetup(logger, "hibernate.cfg.DEV.xml"));
}


public class FilebasedHibernateSetup implements HibernateConfigurer{
     private final String hibernateFile;
     private final Logger logger;

     public FilebasedHibernateSetup(Logger aLogger, String anHibernateFile)
     {
          hibernateFile = anHibernateFile;
          logger = aLogger;
     }
	
     public void configure(Configuration configuration)
     {
          logger.info("Loading Hibernate config:" + hibernateFile);
          configuration.configure(hibernateFile);
     }
}


Have fun :)


2012/3/29 Jonathan Barker <jo...@gmail.com>:
> I reference a JNDI datasource in my hibernate configuration, so each
> environment (server) just has a different configuration for a
> datasource of the same name.  It took a bit of experimenting to get
> something that worked well across Tomcat, Jetty and JBoss.
>
> I haven't hit upon the magic recipe for log4j yet.
>
> On Thu, Mar 29, 2012 at 9:46 AM, Earle Nietzel <ea...@gmail.com> wrote:
>> Quick question on this topic about configuration.
>>
>> Has anyone tried having separate configs for hibernate.cfg.xml and/or
>> log4j.properties i.e. production/QA/development?
>>
>> I was looking at commons-configuration and have it setup with spring
>> via tapestry-spring. Would like a way to move the configs mentioned
>> above into it as well?
>>
>> My next thought is to look at when log4j and hibernate are initialized
>> to inject them with a configuration from spring that way I can manage
>> all the config using commons-configuration.
>>
>> Thoughts or ideas are appreciated?
>> Earle
>>
>>
>> On Wed, Sep 28, 2011 at 12:53 PM, Kalle Korhonen
>> <ka...@gmail.com> wrote:
>>> I typically have a bunch of application specific symbols since they
>>> allow so much flexibility. Set the defaults in AppModule, override
>>> with jvm system properties, in your setup scripts for production
>>> environment etc.
>>>
>>> Kalle
>>>
>>>
>>> On Wed, Sep 28, 2011 at 9:47 AM, Tim <ko...@gmail.com> wrote:
>>>> Can someone please tell me the best way to store site settings in a Tapestry
>>>> application?
>>>>
>>>> I would like to store the location of a certain directory (where Lucene data
>>>> is to be kept), and it is different in development and in production, so I
>>>> don't want it hard coded into the code.  Where should I store this setting?
>>>>  In a properties file? (and if so, where do I store the location to the
>>>> properties files?)   In the web.xml file as a context-param?  In
>>>> app.properties?
>>>>
>>>> What do people out there do?
>>>>
>>>> I suspect the answer is probably app.properties, so how do I get access to
>>>> this in a normal Java class?
>>>>
>>>> Thanks.
>>>>
>>>> --
>>>> Tim Koop
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>>>> For additional commands, e-mail: users-help@tapestry.apache.org
>>>>
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>>> For additional commands, e-mail: users-help@tapestry.apache.org
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>>
>
>
>
> --
> Jonathan Barker
> ITStrategic
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Where to store site settings?

Posted by Jonathan Barker <jo...@gmail.com>.
I reference a JNDI datasource in my hibernate configuration, so each
environment (server) just has a different configuration for a
datasource of the same name.  It took a bit of experimenting to get
something that worked well across Tomcat, Jetty and JBoss.

I haven't hit upon the magic recipe for log4j yet.

On Thu, Mar 29, 2012 at 9:46 AM, Earle Nietzel <ea...@gmail.com> wrote:
> Quick question on this topic about configuration.
>
> Has anyone tried having separate configs for hibernate.cfg.xml and/or
> log4j.properties i.e. production/QA/development?
>
> I was looking at commons-configuration and have it setup with spring
> via tapestry-spring. Would like a way to move the configs mentioned
> above into it as well?
>
> My next thought is to look at when log4j and hibernate are initialized
> to inject them with a configuration from spring that way I can manage
> all the config using commons-configuration.
>
> Thoughts or ideas are appreciated?
> Earle
>
>
> On Wed, Sep 28, 2011 at 12:53 PM, Kalle Korhonen
> <ka...@gmail.com> wrote:
>> I typically have a bunch of application specific symbols since they
>> allow so much flexibility. Set the defaults in AppModule, override
>> with jvm system properties, in your setup scripts for production
>> environment etc.
>>
>> Kalle
>>
>>
>> On Wed, Sep 28, 2011 at 9:47 AM, Tim <ko...@gmail.com> wrote:
>>> Can someone please tell me the best way to store site settings in a Tapestry
>>> application?
>>>
>>> I would like to store the location of a certain directory (where Lucene data
>>> is to be kept), and it is different in development and in production, so I
>>> don't want it hard coded into the code.  Where should I store this setting?
>>>  In a properties file? (and if so, where do I store the location to the
>>> properties files?)   In the web.xml file as a context-param?  In
>>> app.properties?
>>>
>>> What do people out there do?
>>>
>>> I suspect the answer is probably app.properties, so how do I get access to
>>> this in a normal Java class?
>>>
>>> Thanks.
>>>
>>> --
>>> Tim Koop
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>>> For additional commands, e-mail: users-help@tapestry.apache.org
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>



-- 
Jonathan Barker
ITStrategic

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Where to store site settings?

Posted by Earle Nietzel <ea...@gmail.com>.
Quick question on this topic about configuration.

Has anyone tried having separate configs for hibernate.cfg.xml and/or
log4j.properties i.e. production/QA/development?

I was looking at commons-configuration and have it setup with spring
via tapestry-spring. Would like a way to move the configs mentioned
above into it as well?

My next thought is to look at when log4j and hibernate are initialized
to inject them with a configuration from spring that way I can manage
all the config using commons-configuration.

Thoughts or ideas are appreciated?
Earle


On Wed, Sep 28, 2011 at 12:53 PM, Kalle Korhonen
<ka...@gmail.com> wrote:
> I typically have a bunch of application specific symbols since they
> allow so much flexibility. Set the defaults in AppModule, override
> with jvm system properties, in your setup scripts for production
> environment etc.
>
> Kalle
>
>
> On Wed, Sep 28, 2011 at 9:47 AM, Tim <ko...@gmail.com> wrote:
>> Can someone please tell me the best way to store site settings in a Tapestry
>> application?
>>
>> I would like to store the location of a certain directory (where Lucene data
>> is to be kept), and it is different in development and in production, so I
>> don't want it hard coded into the code.  Where should I store this setting?
>>  In a properties file? (and if so, where do I store the location to the
>> properties files?)   In the web.xml file as a context-param?  In
>> app.properties?
>>
>> What do people out there do?
>>
>> I suspect the answer is probably app.properties, so how do I get access to
>> this in a normal Java class?
>>
>> Thanks.
>>
>> --
>> Tim Koop
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Where to store site settings?

Posted by Bob Harner <bo...@gmail.com>.
I like to have a simple "Settings" or "Config" table in the database,
having just VARCHAR "name" and "value" columns, and a simple Tapestry
IOC service that looks up and caches the values (either lazily or at
startup time). Another option is to have the settings in a property
file (outside the war), of course, but on the other hand having them
in the database makes it easier to later create crud interfaces for
those that may need to change at run time.

On Wed, Sep 28, 2011 at 12:53 PM, Kalle Korhonen
<ka...@gmail.com> wrote:
> I typically have a bunch of application specific symbols since they
> allow so much flexibility. Set the defaults in AppModule, override
> with jvm system properties, in your setup scripts for production
> environment etc.
>
> Kalle
>
>
> On Wed, Sep 28, 2011 at 9:47 AM, Tim <ko...@gmail.com> wrote:
>> Can someone please tell me the best way to store site settings in a Tapestry
>> application?
>>
>> I would like to store the location of a certain directory (where Lucene data
>> is to be kept), and it is different in development and in production, so I
>> don't want it hard coded into the code.  Where should I store this setting?
>>  In a properties file? (and if so, where do I store the location to the
>> properties files?)   In the web.xml file as a context-param?  In
>> app.properties?
>>
>> What do people out there do?
>>
>> I suspect the answer is probably app.properties, so how do I get access to
>> this in a normal Java class?
>>
>> Thanks.
>>
>> --
>> Tim Koop
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Where to store site settings?

Posted by Kalle Korhonen <ka...@gmail.com>.
I typically have a bunch of application specific symbols since they
allow so much flexibility. Set the defaults in AppModule, override
with jvm system properties, in your setup scripts for production
environment etc.

Kalle


On Wed, Sep 28, 2011 at 9:47 AM, Tim <ko...@gmail.com> wrote:
> Can someone please tell me the best way to store site settings in a Tapestry
> application?
>
> I would like to store the location of a certain directory (where Lucene data
> is to be kept), and it is different in development and in production, so I
> don't want it hard coded into the code.  Where should I store this setting?
>  In a properties file? (and if so, where do I store the location to the
> properties files?)   In the web.xml file as a context-param?  In
> app.properties?
>
> What do people out there do?
>
> I suspect the answer is probably app.properties, so how do I get access to
> this in a normal Java class?
>
> Thanks.
>
> --
> Tim Koop
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org