You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Sebastian Hennebrueder <us...@laliluna.de> on 2010/11/21 23:59:48 UTC

ObjectProvider called to often

Hello,

I added an object provider to integrate the Guice IOC Framework. Though I have added it at the end, it is called for many Tapestry related pieces. Is this not a very big inefficiency?

my integration stuff in AppModule
	public static void contributeMasterObjectProvider(OrderedConfiguration<ObjectProvider> configuration) {
		configuration.add("GuiceObjectProvider", new GuiceObjectProvider(), "after:*");
	}


Here is the list of services asked to build:

23:56:54,194 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.PipelineBuilder
23:56:54,224 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.PropertyShadowBuilder
23:56:54,243 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.RequestGlobals
23:56:54,263 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.ApplicationGlobals
23:56:54,270 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.ChainBuilder
23:56:54,275 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.Environment
23:56:54,280 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.StrategyBuilder
23:56:54,285 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.PropertyAccess
23:56:54,293 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.Request
23:56:54,311 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.Response
23:56:54,318 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.EnvironmentalShadowBuilder
23:56:54,323 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.internal.services.EndOfRequestEventHub
23:56:54,335 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.DefaultImplementationBuilder
23:56:54,345 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.TypeCoercer
23:56:54,346 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.ComponentClassResolver
23:56:54,362 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.Request
23:56:54,384 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.internal.services.ComponentInstantiatorSource
23:56:54,389 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.UpdateListenerHub
23:56:54,407 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.RequestGlobals
23:56:54,408 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.internal.services.ComponentClassTransformer
23:56:54,412 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.internal.services.InternalRequestGlobals
23:56:54,417 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.ClasspathURLConverter
23:56:54,434 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.internal.services.ComponentInstantiatorSource
23:56:54,435 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.ClassNameLocator
23:56:54,445 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.ClasspathURLConverter

-- 
Best Regards / Viele Grüße

Sebastian Hennebrueder

-----
http://www.laliluna.de
Java software developer and trainer for Hibernate and Java Persistence


Re: ObjectProvider called to often

Posted by Howard Lewis Ship <hl...@gmail.com>.
This is explained, more or less, on the injection page
http://tapestry.apache.org/ioc-injection.html

When processing an injection, Tapestry starts by seeing if there's an
unambiguous service that can be injected.

Following that it falls into the MasterObjectProvider service, and its
contributed ObjectProvider instances, in particular ServiceOverrides.

At the end of that chain, it does another check for the service and reports
an error if none can be found or if the match in ambiguous.

On Mon, Nov 22, 2010 at 4:40 PM, Tom van Dijk <to...@tvandijk.nl> wrote:

> Hallo Sebastian,
>
> Well, you will always need the ObjectProvider, and it in turn will always
> need a number of services, either virtual or realized. Maybe there is a way
> to draw dependency diagrams so you can really see what is going on (but as
> far as I know, this information isn't available from the IoC right now, it's
> on my list of things to do and be excited about)
>
> But again, these services aren't actually instantiated yet; at least not
> until they are needed.
>
>
> Op 22-11-2010 22:20, Sebastian Hennebrueder schreef:
>
>  Hi Tom,
>>
>> I wasn't surprised by the number of services to be prepared either as
>> proxy or to be created. I just don't see a reason why the object provider
>> which I add as last provider is called for framework internal services.
>>  There is just no need to call it at all for those services.
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>


-- 
Howard M. Lewis Ship

Creator of Apache Tapestry

The source for Tapestry training, mentoring and support. Contact me to learn
how I can get you up and productive in Tapestry fast!

(971) 678-5210
http://howardlewisship.com

Re: ObjectProvider called to often

Posted by Tom van Dijk <to...@tvandijk.nl>.
Hallo Sebastian,

Well, you will always need the ObjectProvider, and it in turn will 
always need a number of services, either virtual or realized. Maybe 
there is a way to draw dependency diagrams so you can really see what is 
going on (but as far as I know, this information isn't available from 
the IoC right now, it's on my list of things to do and be excited about)

But again, these services aren't actually instantiated yet; at least not 
until they are needed.


Op 22-11-2010 22:20, Sebastian Hennebrueder schreef:
> Hi Tom,
>
> I wasn't surprised by the number of services to be prepared either as proxy or to be created. I just don't see a reason why the object provider which I add as last provider is called for framework internal services.  There is just no need to call it at all for those services.
>


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


Re: ObjectProvider called to often

Posted by Sebastian Hennebrueder <us...@laliluna.de>.
Hi Tom,

I wasn't surprised by the number of services to be prepared either as proxy or to be created. I just don't see a reason why the object provider which I add as last provider is called for framework internal services.  There is just no need to call it at all for those services. 

-- 
Best Regards / Viele Grüße

Sebastian Hennebrueder

-----
http://www.laliluna.de
Java software developer and trainer for Hibernate and Java Persistence

Am 22.11.2010 um 00:37 schrieb Tom van Dijk:

> And obviously, I meant "every service that it somehow depends on" instead of the other thing which is not true.
> 
> Op 22-11-2010 0:34, Tom van Dijk schreef:
>> Well, no, you will see that a lot of services depend on each other, so in order to create an object that just happens to depend on stuff like object providers, many other services need to be created. This is not an inefficiency in Tapestry (The services are first only "virtual" before they are realized) but it may be that the lifecycle it not efficient in guice/tapestry integration as it is in tapestry.
>> 
>> When you ask for a service, every service that somehow depends on it (via field/constructor initialization) is created as a VIRTUAL object. Then when they are actually used (you call a method) they are REALIZED (by the virtual proxy object). This is why it's not inefficient to create all these virtual proxies. That part is easy. And when they are actually used, well, then you need to have the realized object anyway, so it's still efficient.
>> 
>> Op 21-11-2010 23:59, Sebastian Hennebrueder schreef:
>>> Hello,
>>> 
>>> I added an object provider to integrate the Guice IOC Framework. Though I have added it at the end, it is called for many Tapestry related pieces. Is this not a very big inefficiency?
>>> 
>>> my integration stuff in AppModule
>>>    public static void contributeMasterObjectProvider(OrderedConfiguration<ObjectProvider>  configuration) {
>>>        configuration.add("GuiceObjectProvider", new GuiceObjectProvider(), "after:*");
>>>    }
>>> 
>>> 
>>> Here is the list of services asked to build:
>>> 
>>> 23:56:54,194 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.PipelineBuilder
>>> 23:56:54,224 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.PropertyShadowBuilder
>>> 23:56:54,243 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.RequestGlobals
>>> 23:56:54,263 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.ApplicationGlobals
>>> 23:56:54,270 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.ChainBuilder
>>> 23:56:54,275 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.Environment
>>> 23:56:54,280 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.StrategyBuilder
>>> 23:56:54,285 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.PropertyAccess
>>> 23:56:54,293 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.Request
>>> 23:56:54,311 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.Response
>>> 23:56:54,318 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.EnvironmentalShadowBuilder
>>> 23:56:54,323 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.internal.services.EndOfRequestEventHub
>>> 23:56:54,335 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.DefaultImplementationBuilder
>>> 23:56:54,345 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.TypeCoercer
>>> 23:56:54,346 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.ComponentClassResolver
>>> 23:56:54,362 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.Request
>>> 23:56:54,384 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.internal.services.ComponentInstantiatorSource
>>> 23:56:54,389 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.UpdateListenerHub
>>> 23:56:54,407 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.RequestGlobals
>>> 23:56:54,408 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.internal.services.ComponentClassTransformer
>>> 23:56:54,412 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.internal.services.InternalRequestGlobals
>>> 23:56:54,417 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.ClasspathURLConverter
>>> 23:56:54,434 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.internal.services.ComponentInstantiatorSource
>>> 23:56:54,435 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.ClassNameLocator
>>> 23:56:54,445 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.ClasspathURLConverter
>>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> 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: ObjectProvider called to often

Posted by Tom van Dijk <to...@tvandijk.nl>.
And obviously, I meant "every service that it somehow depends on" 
instead of the other thing which is not true.

Op 22-11-2010 0:34, Tom van Dijk schreef:
> Well, no, you will see that a lot of services depend on each other, so 
> in order to create an object that just happens to depend on stuff like 
> object providers, many other services need to be created. This is not 
> an inefficiency in Tapestry (The services are first only "virtual" 
> before they are realized) but it may be that the lifecycle it not 
> efficient in guice/tapestry integration as it is in tapestry.
>
> When you ask for a service, every service that somehow depends on it 
> (via field/constructor initialization) is created as a VIRTUAL object. 
> Then when they are actually used (you call a method) they are REALIZED 
> (by the virtual proxy object). This is why it's not inefficient to 
> create all these virtual proxies. That part is easy. And when they are 
> actually used, well, then you need to have the realized object anyway, 
> so it's still efficient.
>
> Op 21-11-2010 23:59, Sebastian Hennebrueder schreef:
>> Hello,
>>
>> I added an object provider to integrate the Guice IOC Framework. 
>> Though I have added it at the end, it is called for many Tapestry 
>> related pieces. Is this not a very big inefficiency?
>>
>> my integration stuff in AppModule
>>     public static void 
>> contributeMasterObjectProvider(OrderedConfiguration<ObjectProvider>  
>> configuration) {
>>         configuration.add("GuiceObjectProvider", new 
>> GuiceObjectProvider(), "after:*");
>>     }
>>
>>
>> Here is the list of services asked to build:
>>
>> 23:56:54,194 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.ioc.services.PipelineBuilder
>> 23:56:54,224 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.ioc.services.PropertyShadowBuilder
>> 23:56:54,243 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.services.RequestGlobals
>> 23:56:54,263 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.services.ApplicationGlobals
>> 23:56:54,270 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.ioc.services.ChainBuilder
>> 23:56:54,275 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.services.Environment
>> 23:56:54,280 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.ioc.services.StrategyBuilder
>> 23:56:54,285 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.ioc.services.PropertyAccess
>> 23:56:54,293 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.services.Request
>> 23:56:54,311 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.services.Response
>> 23:56:54,318 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.services.EnvironmentalShadowBuilder
>> 23:56:54,323 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.internal.services.EndOfRequestEventHub
>> 23:56:54,335 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.ioc.services.DefaultImplementationBuilder
>> 23:56:54,345 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.ioc.services.TypeCoercer
>> 23:56:54,346 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.services.ComponentClassResolver
>> 23:56:54,362 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.services.Request
>> 23:56:54,384 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface 
>> org.apache.tapestry5.internal.services.ComponentInstantiatorSource
>> 23:56:54,389 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.services.UpdateListenerHub
>> 23:56:54,407 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.services.RequestGlobals
>> 23:56:54,408 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface 
>> org.apache.tapestry5.internal.services.ComponentClassTransformer
>> 23:56:54,412 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.internal.services.InternalRequestGlobals
>> 23:56:54,417 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.ioc.services.ClasspathURLConverter
>> 23:56:54,434 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface 
>> org.apache.tapestry5.internal.services.ComponentInstantiatorSource
>> 23:56:54,435 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.ioc.services.ClassNameLocator
>> 23:56:54,445 DEBUG GuiceObjectProvider:24 - guice asked to provide: 
>> interface org.apache.tapestry5.ioc.services.ClasspathURLConverter
>>
>
>
> ---------------------------------------------------------------------
> 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: ObjectProvider called to often

Posted by Tom van Dijk <to...@tvandijk.nl>.
Well, no, you will see that a lot of services depend on each other, so 
in order to create an object that just happens to depend on stuff like 
object providers, many other services need to be created. This is not an 
inefficiency in Tapestry (The services are first only "virtual" before 
they are realized) but it may be that the lifecycle it not efficient in 
guice/tapestry integration as it is in tapestry.

When you ask for a service, every service that somehow depends on it 
(via field/constructor initialization) is created as a VIRTUAL object. 
Then when they are actually used (you call a method) they are REALIZED 
(by the virtual proxy object). This is why it's not inefficient to 
create all these virtual proxies. That part is easy. And when they are 
actually used, well, then you need to have the realized object anyway, 
so it's still efficient.

Op 21-11-2010 23:59, Sebastian Hennebrueder schreef:
> Hello,
>
> I added an object provider to integrate the Guice IOC Framework. Though I have added it at the end, it is called for many Tapestry related pieces. Is this not a very big inefficiency?
>
> my integration stuff in AppModule
> 	public static void contributeMasterObjectProvider(OrderedConfiguration<ObjectProvider>  configuration) {
> 		configuration.add("GuiceObjectProvider", new GuiceObjectProvider(), "after:*");
> 	}
>
>
> Here is the list of services asked to build:
>
> 23:56:54,194 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.PipelineBuilder
> 23:56:54,224 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.PropertyShadowBuilder
> 23:56:54,243 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.RequestGlobals
> 23:56:54,263 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.ApplicationGlobals
> 23:56:54,270 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.ChainBuilder
> 23:56:54,275 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.Environment
> 23:56:54,280 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.StrategyBuilder
> 23:56:54,285 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.PropertyAccess
> 23:56:54,293 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.Request
> 23:56:54,311 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.Response
> 23:56:54,318 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.EnvironmentalShadowBuilder
> 23:56:54,323 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.internal.services.EndOfRequestEventHub
> 23:56:54,335 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.DefaultImplementationBuilder
> 23:56:54,345 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.TypeCoercer
> 23:56:54,346 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.ComponentClassResolver
> 23:56:54,362 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.Request
> 23:56:54,384 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.internal.services.ComponentInstantiatorSource
> 23:56:54,389 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.UpdateListenerHub
> 23:56:54,407 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.services.RequestGlobals
> 23:56:54,408 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.internal.services.ComponentClassTransformer
> 23:56:54,412 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.internal.services.InternalRequestGlobals
> 23:56:54,417 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.ClasspathURLConverter
> 23:56:54,434 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.internal.services.ComponentInstantiatorSource
> 23:56:54,435 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.ClassNameLocator
> 23:56:54,445 DEBUG GuiceObjectProvider:24 - guice asked to provide: interface org.apache.tapestry5.ioc.services.ClasspathURLConverter
>


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