You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Sid Ferreira <si...@gmail.com> on 2009/01/21 14:59:41 UTC

Doubts in Tapestry

Hi folks!After a while Im writting again, I hope this time with enough
details.

My mission was buid a small support screen where a user logs and has access
to a list of users of the client.
The details:
1) The url is used to define the client (a.t5.com is one and b.t5.com is
another client)
2) The user needs to log in
3) If, after login, the user changes the url, it must logoff or something,
but the new client must be loaded
4) The users belong to one and only one client

After a long brawl with documentations, I finally found a small solution
(wich I dunno how to code neighter if it is correct), and I would like to
have a help:

1) Create a MyContextService, wich has an ApplicationState object
2) Create a @Private annotation (Dispatcher docs, but not clear how to
finish it)
3) Create 2 pages, one to login and another to list, wich extends
MyContextService
4) Create a dispatcher, wich extends MyContextService

the idea:
1) Dispatcher is called, identify the client and set/reset it
2) If user is logged (didn't decided this part yet) it validates the Client
- User relation
3) If not logged, check if has a submit and try to login
4) If now the user is not logged, forward in server side to the login
5) Dispatcher forward to list

So, the questions:
1) How to finish up the @Private? (
http://wiki.apache.org/tapestry/Tapestry5HowToControlAccess) I dunno what to
ser in the type for instance
2) How to server-side forward?
3) Using ASO (or AOS?) in a super class, isn't the same (and so useless to
do) to have a protected static property in MyContextService?

Thanks in advance folks!

-- 
Sidney G B Ferreira
Desenvolvedor Web - Tibox Innovations

Re: Doubts in Tapestry

Posted by Sid Ferreira <si...@gmail.com>.
package fastSupport.data;
public class AllertContext {

    @ApplicationState(create=false)
    private DataContext dataContext;
private boolean dataContextExists;

@ApplicationState
protected Clientes cliente;
private boolean clienteExists;

@ApplicationState(create=false)
private UsuariosClientes usuario;
private boolean usuarioExists;

This was needed to paste too...

About the plural, it was a quick test with cayenne, not production.

On Thu, Jan 22, 2009 at 4:03 PM, Thiago H. de Paula Figueiredo <
thiagohp@gmail.com> wrote:

> Em Thu, 22 Jan 2009 13:58:54 -0300, Sid Ferreira <si...@gmail.com>
> escreveu:
>
>  Im sorry but, I readed twice today, more two or tree times before... I
>> can't see a reason to not work.
>>
>
> The key sentence is this: "Any other component or page that declares a
> field of the *same type*, regardless of name, and marks it with the
> ApplicationState annotation will share the same value. It's that simple."
>
> In one page, you put @ApplicationState in a Clientes field. In the other,
> you put that annotation in a field with another type. They should have the
> same type (in this case, Clientes).
>
> By the way, if Clientes is a class that represents a single client, not a
> collection of them, name it Cliente, not Clientes.
>
> --
> Thiago H. de Paula Figueiredo
> Independent Java consultant, developer, and instructor
> http://www.arsmachina.com.br/thiago
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>


-- 
Sidney G B Ferreira
Desenvolvedor Web - Tibox Innovations

Re: Hibernate in background thread

Posted by Kalle Korhonen <ka...@gmail.com>.
Chenillekit already has Quartz integration, sort of similar to what Spring
offers (but easier):
http://www.chenillekit.org/chenillekit-quartz/index.html

Kalle

On Thu, Jan 22, 2009 at 1:44 PM, Daniel Honig <da...@gmail.com>wrote:

> What about using Quartz for such a task?
> http://www.opensymphony.com/quartz/
>
> On Thu, Jan 22, 2009 at 4:43 PM, Tomas Kolda <ko...@web2net.cz> wrote:
>
> > Hi,
> >
> > I need to do something in background (import data once a day). I'm using
> > Tapestry-Hibernate package. User should be able to run import from web
> page
> > also. What is the right way to get Hibernate session in background
> thread? I
> > found nice howto on wiki.
> >
> > http://wiki.apache.org/tapestry/Tapestry5HowToRunTaskInThread
> >
> > There is simple service wrapper ThreadSource. I can write:
> >
> > _threadSource.runInThread(new Runnable(){
> >   public void run(){
> >       //do something
> >   }
> > });
> >
> > But I need something like:
> >
> > _threadSource.runInThread(new Runnable(){
> >   @Inject
> >   Session session;
> >   public void run(){
> >       //do something
> >   }
> > });
> >
> > As I know, AOP search for constructors using reflection that will get
> what
> > it needs. So no way to get it working in this way.
> >
> > What should I do? I can modify ThreadSource and put there Session that
> will
> > be provided to thread. Is it right approach? Or is there something that
> will
> > provide me service object to satisfy my needs? Something like
> > registry.getService(Session.class); ?
> >
> > Second question:
> > Is there something like "cron" in Tapestry? I know that it looks ugly, to
> > run something in servlet container, but is it possible?
> >
> > Thank you
> > Tomas
> >
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > For additional commands, e-mail: users-help@tapestry.apache.org
> >
> >
>

Re: Hibernate in background thread

Posted by Daniel Honig <da...@gmail.com>.
What about using Quartz for such a task?http://www.opensymphony.com/quartz/

On Thu, Jan 22, 2009 at 4:43 PM, Tomas Kolda <ko...@web2net.cz> wrote:

> Hi,
>
> I need to do something in background (import data once a day). I'm using
> Tapestry-Hibernate package. User should be able to run import from web page
> also. What is the right way to get Hibernate session in background thread? I
> found nice howto on wiki.
>
> http://wiki.apache.org/tapestry/Tapestry5HowToRunTaskInThread
>
> There is simple service wrapper ThreadSource. I can write:
>
> _threadSource.runInThread(new Runnable(){
>   public void run(){
>       //do something
>   }
> });
>
> But I need something like:
>
> _threadSource.runInThread(new Runnable(){
>   @Inject
>   Session session;
>   public void run(){
>       //do something
>   }
> });
>
> As I know, AOP search for constructors using reflection that will get what
> it needs. So no way to get it working in this way.
>
> What should I do? I can modify ThreadSource and put there Session that will
> be provided to thread. Is it right approach? Or is there something that will
> provide me service object to satisfy my needs? Something like
> registry.getService(Session.class); ?
>
> Second question:
> Is there something like "cron" in Tapestry? I know that it looks ugly, to
> run something in servlet container, but is it possible?
>
> Thank you
> Tomas
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>

Hibernate in background thread

Posted by Tomas Kolda <ko...@web2net.cz>.
Hi,

I need to do something in background (import data once a day). I'm using 
Tapestry-Hibernate package. User should be able to run import from web 
page also. What is the right way to get Hibernate session in background 
thread? I found nice howto on wiki.

http://wiki.apache.org/tapestry/Tapestry5HowToRunTaskInThread

There is simple service wrapper ThreadSource. I can write:

_threadSource.runInThread(new Runnable(){
    public void run(){
        //do something
    }
});

But I need something like:

_threadSource.runInThread(new Runnable(){
    @Inject
    Session session;
    public void run(){
        //do something
    }
});

As I know, AOP search for constructors using reflection that will get 
what it needs. So no way to get it working in this way.

What should I do? I can modify ThreadSource and put there Session that 
will be provided to thread. Is it right approach? Or is there something 
that will provide me service object to satisfy my needs? Something like 
registry.getService(Session.class); ?

Second question:
Is there something like "cron" in Tapestry? I know that it looks ugly, 
to run something in servlet container, but is it possible?

Thank you
Tomas




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


Re: Doubts in Tapestry

Posted by "Thiago H. de Paula Figueiredo" <th...@gmail.com>.
Em Thu, 22 Jan 2009 13:58:54 -0300, Sid Ferreira <si...@gmail.com>  
escreveu:

> Im sorry but, I readed twice today, more two or tree times before... I  
> can't see a reason to not work.

The key sentence is this: "Any other component or page that declares a  
field of the *same type*, regardless of name, and marks it with the  
ApplicationState annotation will share the same value. It's that simple."

In one page, you put @ApplicationState in a Clientes field. In the other,  
you put that annotation in a field with another type. They should have the  
same type (in this case, Clientes).

By the way, if Clientes is a class that represents a single client, not a  
collection of them, name it Cliente, not Clientes.

-- 
Thiago H. de Paula Figueiredo
Independent Java consultant, developer, and instructor
http://www.arsmachina.com.br/thiago

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


Re: Doubts in Tapestry

Posted by Sid Ferreira <si...@gmail.com>.
Im sorry but, I readed twice today, more two or tree times before... I can't
see a reason to not work.

On Thu, Jan 22, 2009 at 12:19 PM, Thiago HP <th...@gmail.com> wrote:

> Read http://tapestry.apache.org/tapestry5/guide/appstate.html and you
> find out what's wrong. :)
>
> On Thu, Jan 22, 2009 at 12:12 PM, Sid Ferreira <si...@gmail.com> wrote:
> > Seen today your mail and followed your words. A lot of changes later I
> just
> > have an ASO problem...
> > My dispatcher (
> http://wiki.apache.org/tapestry/Tapestry5HowToControlAccessbased)
> > sets the objects in ASM (this.asm.set() ) successfully.
> > But my meta-class wich has @ApplicationState(create=false) to this class,
> > always returns null.
> >
> > What may be the problem?
> >
> > A few snippers to help out:
> >
> > MyContext.java:
> > @ApplicationState(create=false)
> > protected Clientes cliente;
> > private boolean clienteExists;
> > public AllertContext() {
> > System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>");
> > System.out.println(this.cliente); //returns null
> > }
> >
> > AccessController.java:
> > if(ret.size() == 1) {
> > this.asm.set(Clientes.class, ret.get(0));
> > } else {
> > this.asm.set(Clientes.class, null);
> > }
> >
> > Index.java
> >    @ApplicationState
> >    @Property
> >    private MyContext context;
> > public Object onActivate() throws IOException {
> > if(context.hasCliente())
> > return Pesquisa.class;
> > return null;
> > }
> >
> > On Wed, Jan 21, 2009 at 3:37 PM, Thiago H. de Paula Figueiredo <
> > thiagohp@gmail.com> wrote:
> >
> >> Em Wed, 21 Jan 2009 10:59:41 -0300, Sid Ferreira <si...@gmail.com>
> >> escreveu:
> >>
> >>  1) Create a MyContextService, wich has an ApplicationState object
> >>>
> >>
> >> Tapestry-IoC services cannot use the @ApplicationState annotation. If
> they
> >> need to access ASOs, they need to use the ApplicationStateManager.
> >>
> >>  2) Create a @Private annotation (Dispatcher docs, but not clear how to
> >>> finish it)
> >>>
> >>
> >> It can be any annotation you fancy. @Private was just the name the wiki
> >> article author chose.
> >>
> >>  3) Create 2 pages, one to login and another to list, wich extends
> >>> MyContextService
> >>>
> >>
> >> Pages can't be services, but they can use them (through @Inject).
> >>
> >>  4) Create a dispatcher, wich extends MyContextService
> >>>
> >>
> >> The dispatcher would use your service, not extend it.
> >>
> >>  the idea:
> >>> 1) Dispatcher is called, identify the client and set/reset it
> >>> 2) If user is logged (didn't decided this part yet) it validates the
> >>> Client
> >>> - User relation
> >>> 3) If not logged, check if has a submit and try to login
> >>> 4) If now the user is not logged, forward in server side to the login
> >>> 5) Dispatcher forward to list
> >>>
> >>
> >> It seems ok.
> >>
> >>  So, the questions:
> >>> 1) How to finish up the @Private? (
> >>> http://wiki.apache.org/tapestry/Tapestry5HowToControlAccess) I dunno
> what
> >>> to
> >>> ser in the type for instance
> >>>
> >>
> >> This annotation is just a marker. Annotations can't have code nor logic.
> >> Reading your "1 week of Tapestry" message, I got the impression that
> you're
> >> not familiar with Java yet. Therefore, I strongly suggest you to really
> >> understand Java before learning Tapestry. You must really understand OOP
> and
> >> Java to use Tapestry really well.
> >>
> >>  2) How to server-side forward?
> >>>
> >>
> >> RTFM! (hehehe, sorry, I coundn't resist)
> >> http://tapestry.apache.org/tapestry5/guide/pagenav.html.
> >>
> >>  3) Using ASO (or AOS?) in a super class, isn't the same (and so useless
> to
> >>> do) to have a protected static property in MyContextService?
> >>>
> >>
> >> ASOs must be private fields, but you can write a protected getter. ;)
> >> A static property in a service would be just one variable for the whole
> >> application. As you need separate state (session) for each user, it must
> be
> >> an ASO.
> >>
> >> --
> >> Thiago H. de Paula Figueiredo
> >> Independent Java consultant, developer, and instructor
> >> http://www.arsmachina.com.br/thiago
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> >> For additional commands, e-mail: users-help@tapestry.apache.org
> >>
> >>
> >
> >
> > --
> > Sidney G B Ferreira
> > Desenvolvedor Web - Tibox Innovations
> >
>
>
>
> --
> Thiago
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>


-- 
Sidney G B Ferreira
Desenvolvedor Web - Tibox Innovations

Re: Doubts in Tapestry

Posted by Thiago HP <th...@gmail.com>.
Read http://tapestry.apache.org/tapestry5/guide/appstate.html and you
find out what's wrong. :)

On Thu, Jan 22, 2009 at 12:12 PM, Sid Ferreira <si...@gmail.com> wrote:
> Seen today your mail and followed your words. A lot of changes later I just
> have an ASO problem...
> My dispatcher (http://wiki.apache.org/tapestry/Tapestry5HowToControlAccessbased)
> sets the objects in ASM (this.asm.set() ) successfully.
> But my meta-class wich has @ApplicationState(create=false) to this class,
> always returns null.
>
> What may be the problem?
>
> A few snippers to help out:
>
> MyContext.java:
> @ApplicationState(create=false)
> protected Clientes cliente;
> private boolean clienteExists;
> public AllertContext() {
> System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>");
> System.out.println(this.cliente); //returns null
> }
>
> AccessController.java:
> if(ret.size() == 1) {
> this.asm.set(Clientes.class, ret.get(0));
> } else {
> this.asm.set(Clientes.class, null);
> }
>
> Index.java
>    @ApplicationState
>    @Property
>    private MyContext context;
> public Object onActivate() throws IOException {
> if(context.hasCliente())
> return Pesquisa.class;
> return null;
> }
>
> On Wed, Jan 21, 2009 at 3:37 PM, Thiago H. de Paula Figueiredo <
> thiagohp@gmail.com> wrote:
>
>> Em Wed, 21 Jan 2009 10:59:41 -0300, Sid Ferreira <si...@gmail.com>
>> escreveu:
>>
>>  1) Create a MyContextService, wich has an ApplicationState object
>>>
>>
>> Tapestry-IoC services cannot use the @ApplicationState annotation. If they
>> need to access ASOs, they need to use the ApplicationStateManager.
>>
>>  2) Create a @Private annotation (Dispatcher docs, but not clear how to
>>> finish it)
>>>
>>
>> It can be any annotation you fancy. @Private was just the name the wiki
>> article author chose.
>>
>>  3) Create 2 pages, one to login and another to list, wich extends
>>> MyContextService
>>>
>>
>> Pages can't be services, but they can use them (through @Inject).
>>
>>  4) Create a dispatcher, wich extends MyContextService
>>>
>>
>> The dispatcher would use your service, not extend it.
>>
>>  the idea:
>>> 1) Dispatcher is called, identify the client and set/reset it
>>> 2) If user is logged (didn't decided this part yet) it validates the
>>> Client
>>> - User relation
>>> 3) If not logged, check if has a submit and try to login
>>> 4) If now the user is not logged, forward in server side to the login
>>> 5) Dispatcher forward to list
>>>
>>
>> It seems ok.
>>
>>  So, the questions:
>>> 1) How to finish up the @Private? (
>>> http://wiki.apache.org/tapestry/Tapestry5HowToControlAccess) I dunno what
>>> to
>>> ser in the type for instance
>>>
>>
>> This annotation is just a marker. Annotations can't have code nor logic.
>> Reading your "1 week of Tapestry" message, I got the impression that you're
>> not familiar with Java yet. Therefore, I strongly suggest you to really
>> understand Java before learning Tapestry. You must really understand OOP and
>> Java to use Tapestry really well.
>>
>>  2) How to server-side forward?
>>>
>>
>> RTFM! (hehehe, sorry, I coundn't resist)
>> http://tapestry.apache.org/tapestry5/guide/pagenav.html.
>>
>>  3) Using ASO (or AOS?) in a super class, isn't the same (and so useless to
>>> do) to have a protected static property in MyContextService?
>>>
>>
>> ASOs must be private fields, but you can write a protected getter. ;)
>> A static property in a service would be just one variable for the whole
>> application. As you need separate state (session) for each user, it must be
>> an ASO.
>>
>> --
>> Thiago H. de Paula Figueiredo
>> Independent Java consultant, developer, and instructor
>> http://www.arsmachina.com.br/thiago
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>>
>>
>
>
> --
> Sidney G B Ferreira
> Desenvolvedor Web - Tibox Innovations
>



-- 
Thiago

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


Re: Doubts in Tapestry

Posted by Sid Ferreira <si...@gmail.com>.
Seen today your mail and followed your words. A lot of changes later I just
have an ASO problem...
My dispatcher (http://wiki.apache.org/tapestry/Tapestry5HowToControlAccessbased)
sets the objects in ASM (this.asm.set() ) successfully.
But my meta-class wich has @ApplicationState(create=false) to this class,
always returns null.

What may be the problem?

A few snippers to help out:

MyContext.java:
@ApplicationState(create=false)
protected Clientes cliente;
private boolean clienteExists;
public AllertContext() {
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>");
System.out.println(this.cliente); //returns null
}

AccessController.java:
if(ret.size() == 1) {
this.asm.set(Clientes.class, ret.get(0));
} else {
this.asm.set(Clientes.class, null);
}

Index.java
    @ApplicationState
    @Property
    private MyContext context;
public Object onActivate() throws IOException {
if(context.hasCliente())
return Pesquisa.class;
return null;
}

On Wed, Jan 21, 2009 at 3:37 PM, Thiago H. de Paula Figueiredo <
thiagohp@gmail.com> wrote:

> Em Wed, 21 Jan 2009 10:59:41 -0300, Sid Ferreira <si...@gmail.com>
> escreveu:
>
>  1) Create a MyContextService, wich has an ApplicationState object
>>
>
> Tapestry-IoC services cannot use the @ApplicationState annotation. If they
> need to access ASOs, they need to use the ApplicationStateManager.
>
>  2) Create a @Private annotation (Dispatcher docs, but not clear how to
>> finish it)
>>
>
> It can be any annotation you fancy. @Private was just the name the wiki
> article author chose.
>
>  3) Create 2 pages, one to login and another to list, wich extends
>> MyContextService
>>
>
> Pages can't be services, but they can use them (through @Inject).
>
>  4) Create a dispatcher, wich extends MyContextService
>>
>
> The dispatcher would use your service, not extend it.
>
>  the idea:
>> 1) Dispatcher is called, identify the client and set/reset it
>> 2) If user is logged (didn't decided this part yet) it validates the
>> Client
>> - User relation
>> 3) If not logged, check if has a submit and try to login
>> 4) If now the user is not logged, forward in server side to the login
>> 5) Dispatcher forward to list
>>
>
> It seems ok.
>
>  So, the questions:
>> 1) How to finish up the @Private? (
>> http://wiki.apache.org/tapestry/Tapestry5HowToControlAccess) I dunno what
>> to
>> ser in the type for instance
>>
>
> This annotation is just a marker. Annotations can't have code nor logic.
> Reading your "1 week of Tapestry" message, I got the impression that you're
> not familiar with Java yet. Therefore, I strongly suggest you to really
> understand Java before learning Tapestry. You must really understand OOP and
> Java to use Tapestry really well.
>
>  2) How to server-side forward?
>>
>
> RTFM! (hehehe, sorry, I coundn't resist)
> http://tapestry.apache.org/tapestry5/guide/pagenav.html.
>
>  3) Using ASO (or AOS?) in a super class, isn't the same (and so useless to
>> do) to have a protected static property in MyContextService?
>>
>
> ASOs must be private fields, but you can write a protected getter. ;)
> A static property in a service would be just one variable for the whole
> application. As you need separate state (session) for each user, it must be
> an ASO.
>
> --
> Thiago H. de Paula Figueiredo
> Independent Java consultant, developer, and instructor
> http://www.arsmachina.com.br/thiago
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>


-- 
Sidney G B Ferreira
Desenvolvedor Web - Tibox Innovations

Re: Doubts in Tapestry

Posted by "Thiago H. de Paula Figueiredo" <th...@gmail.com>.
Em Wed, 21 Jan 2009 10:59:41 -0300, Sid Ferreira <si...@gmail.com>  
escreveu:

> 1) Create a MyContextService, wich has an ApplicationState object

Tapestry-IoC services cannot use the @ApplicationState annotation. If they  
need to access ASOs, they need to use the ApplicationStateManager.

> 2) Create a @Private annotation (Dispatcher docs, but not clear how to
> finish it)

It can be any annotation you fancy. @Private was just the name the wiki  
article author chose.

> 3) Create 2 pages, one to login and another to list, wich extends
> MyContextService

Pages can't be services, but they can use them (through @Inject).

> 4) Create a dispatcher, wich extends MyContextService

The dispatcher would use your service, not extend it.

> the idea:
> 1) Dispatcher is called, identify the client and set/reset it
> 2) If user is logged (didn't decided this part yet) it validates the  
> Client
> - User relation
> 3) If not logged, check if has a submit and try to login
> 4) If now the user is not logged, forward in server side to the login
> 5) Dispatcher forward to list

It seems ok.

> So, the questions:
> 1) How to finish up the @Private? (
> http://wiki.apache.org/tapestry/Tapestry5HowToControlAccess) I dunno  
> what to
> ser in the type for instance

This annotation is just a marker. Annotations can't have code nor logic.
Reading your "1 week of Tapestry" message, I got the impression that  
you're not familiar with Java yet. Therefore, I strongly suggest you to  
really understand Java before learning Tapestry. You must really  
understand OOP and Java to use Tapestry really well.

> 2) How to server-side forward?

RTFM! (hehehe, sorry, I coundn't resist)  
http://tapestry.apache.org/tapestry5/guide/pagenav.html.

> 3) Using ASO (or AOS?) in a super class, isn't the same (and so useless  
> to do) to have a protected static property in MyContextService?

ASOs must be private fields, but you can write a protected getter. ;)
A static property in a service would be just one variable for the whole  
application. As you need separate state (session) for each user, it must  
be an ASO.

-- 
Thiago H. de Paula Figueiredo
Independent Java consultant, developer, and instructor
http://www.arsmachina.com.br/thiago

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