Re: Component rendering and parameters binding

2009-03-03 Thread Simon Raveh
I figure out what was happening. I think tapestry is doing a lasy bind for 
parameters and only getting them when thay bean access in the component. The 
null pointer I've got was related to my internal domain object.

Sorry for the confusion.

Thanks,
Simon


On 3/2/09 9:45 PM, Simon Raveh simon.ra...@icann.org wrote:

Yes but this is in the component template and it is being called before
tapestry is binding the parameter to the component. If you look at stack
trace you will see that the call to getTicketNumber() on the component is
coming before tapestry is calling getTicket()  on the page object to get the
parameter that need to be  pass to the component

[DEBUG] components.ViewTicket [ENTER] beforeRenderTamplate
[DEBUG] components.ViewTicket [ EXIT] beforeRenderTamplate
[DEBUG] components.ViewTicket [ENTER] getTicketNumber()
[DEBUG] pages.Index [ENTER] getTicket()
[DEBUG] pages.Index [ EXIT] getTicket

My dev environment is:

Mac book pro with Intellij IDEA 8.1 and Apache Tomcat Version 6.0.10 JDK
1.5_07. I'm running the project using maven 2.0.10

Thanks,
Simon


On 3/2/09 6:32 PM, Howard Lewis Ship hls...@gmail.com wrote:

 I'm not sure what the confusion is:

 td${ticketNumber}/td

 That's your call to getTicketNumber().

 On Mon, Mar 2, 2009 at 6:04 PM, Alex Kotchnev akoch...@gmail.com wrote:
 Simon,
   I still can't figure out your dilemma, but I notice something
 interesting.. In the stacktrace that you provided, it looks like this time
 getStatus() is being called before getTicket..

   Maybe some of the folks that are more familiar w/ the guts of T5 can look
 at this. It doesn't look like this is due to anything you're doing, looks
 like a race condition of some type.

   I think it would be helpful if you provide some more details on the
 environment that you run your app in : e.g. JVM version, app server . Btw,
 does this happen consistently if you run it on a different box (e.g. I've
 had non-tapestry related stuff sometimes behave differently in terms of
 threading on a single CPU vs dual core box) ? Maybe you can try different
 JVMs as well, just to check that this is not JVM or version specific.

 Cheers,

 Alex kotchnev

 On Mon, Mar 2, 2009 at 4:23 PM, Simon Raveh simon.ra...@icann.org wrote:

 Hi,

 Thanks for your help.
 I'm still trying to figure out why getTicketNumber() is being called before
 the parameter was set. From debugging this it seems that it is being called
 when the Index page is being render. Bellow you can find a thread dump:

 [INFO] Started Jetty Server
 2009-03-02 13:09:48.951::INFO:  Started
 selectchannelconnec...@0.0.0.0:8080
 [DEBUG] components.ViewTicket [ENTER] beforeRenderTamplate()
 [DEBUG] components.ViewTicket [ EXIT] beforeRenderTamplate
 java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1224)
at
 org.iana.ietf.ticketstatus.components.ViewTicket._$advised$getStatus(ViewTic
 ket.java:36)
 [DEBUG] components.ViewTicket [ENTER] getStatus()
 at
 org.iana.ietf.ticketstatus.components.ViewTicket$getStatus$invocation_11fc90
 9007b.invokeAdvisedMethod(ViewTicket$getStatus$invocation_11fc909007b.java)
at
 org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.pro
 ceed(AbstractComponentMethodInvocation.java:71)
at
 org.apache.tapestry5.ioc.internal.services.LoggingAdvice.advise(LoggingAdvic
 e.java:45)
at

org.apache.tapestry5.internal.transform.LogWorker$1.advise(LogWorker.java:54
)
at
 org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.pro
 ceed(AbstractComponentMethodInvocation.java:80)
at
 org.iana.ietf.ticketstatus.components.ViewTicket.getStatus(ViewTicket.java)
at $PropertyConduit_11fc9056327.get($PropertyConduit_11fc9056327.java)
at
 org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:53)
at
 org.apache.tapestry5.internal.structure.ExpansionPageElement.render(Expansio
 nPageElement.java:47)
at
 org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.j
 ava:72)
at
 org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRender
 QueueImpl.java:121)
at
 $PageRenderQueue_11fc9056337.render($PageRenderQueue_11fc9056337.java)
at
 $PageRenderQueue_11fc905632f.render($PageRenderQueue_11fc905632f.java)
at
 org.apache.tapestry5.services.TapestryModule$19.renderMarkup(TapestryModule.
 java:1200)
at
 org.apache.tapestry5.services.TapestryModule$29.renderMarkup(TapestryModule.
 java:1580)
at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at
 org.apache.tapestry5.services.TapestryModule$28.renderMarkup(TapestryModule.
 java:1561)
at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at
 org.apache.tapestry5.services.TapestryModule$27.renderMarkup(TapestryModule.
 java:1543)
at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at
 

Re: Component rendering and parameters binding

2009-03-03 Thread Howard Lewis Ship
Parameters are not JavaBeans properties; they are read/write and
lazy as you have now realized. They also do some caching.

Oh, and by the way, you can simplify your component a lot:

tdticket?.ticketNumber/td

The ?. operator encapsulates the null check you were doing in Java code.

Check out the Tapestry 5.0 refcard!

On Tue, Mar 3, 2009 at 1:41 PM, Simon Raveh simon.ra...@icann.org wrote:
 I figure out what was happening. I think tapestry is doing a lasy bind for 
 parameters and only getting them when thay bean access in the component. The 
 null pointer I've got was related to my internal domain object.

 Sorry for the confusion.

 Thanks,
 Simon


 On 3/2/09 9:45 PM, Simon Raveh simon.ra...@icann.org wrote:

 Yes but this is in the component template and it is being called before
 tapestry is binding the parameter to the component. If you look at stack
 trace you will see that the call to getTicketNumber() on the component is
 coming before tapestry is calling getTicket()  on the page object to get the
 parameter that need to be  pass to the component

 [DEBUG] components.ViewTicket [ENTER] beforeRenderTamplate
 [DEBUG] components.ViewTicket [ EXIT] beforeRenderTamplate
 [DEBUG] components.ViewTicket [ENTER] getTicketNumber()
 [DEBUG] pages.Index [ENTER] getTicket()
 [DEBUG] pages.Index [ EXIT] getTicket

 My dev environment is:

 Mac book pro with Intellij IDEA 8.1 and Apache Tomcat Version 6.0.10 JDK
 1.5_07. I'm running the project using maven 2.0.10

 Thanks,
 Simon


 On 3/2/09 6:32 PM, Howard Lewis Ship hls...@gmail.com wrote:

 I'm not sure what the confusion is:

 td${ticketNumber}/td

 That's your call to getTicketNumber().

 On Mon, Mar 2, 2009 at 6:04 PM, Alex Kotchnev akoch...@gmail.com wrote:
 Simon,
   I still can't figure out your dilemma, but I notice something
 interesting.. In the stacktrace that you provided, it looks like this time
 getStatus() is being called before getTicket..

   Maybe some of the folks that are more familiar w/ the guts of T5 can look
 at this. It doesn't look like this is due to anything you're doing, looks
 like a race condition of some type.

   I think it would be helpful if you provide some more details on the
 environment that you run your app in : e.g. JVM version, app server . Btw,
 does this happen consistently if you run it on a different box (e.g. I've
 had non-tapestry related stuff sometimes behave differently in terms of
 threading on a single CPU vs dual core box) ? Maybe you can try different
 JVMs as well, just to check that this is not JVM or version specific.

 Cheers,

 Alex kotchnev

 On Mon, Mar 2, 2009 at 4:23 PM, Simon Raveh simon.ra...@icann.org wrote:

 Hi,

 Thanks for your help.
 I'm still trying to figure out why getTicketNumber() is being called before
 the parameter was set. From debugging this it seems that it is being called
 when the Index page is being render. Bellow you can find a thread dump:

 [INFO] Started Jetty Server
 2009-03-02 13:09:48.951::INFO:  Started
 selectchannelconnec...@0.0.0.0:8080
 [DEBUG] components.ViewTicket [ENTER] beforeRenderTamplate()
 [DEBUG] components.ViewTicket [ EXIT] beforeRenderTamplate
 java.lang.Exception: Stack trace
    at java.lang.Thread.dumpStack(Thread.java:1224)
    at
 org.iana.ietf.ticketstatus.components.ViewTicket._$advised$getStatus(ViewTic
 ket.java:36)
 [DEBUG] components.ViewTicket [ENTER] getStatus()
     at
 org.iana.ietf.ticketstatus.components.ViewTicket$getStatus$invocation_11fc90
 9007b.invokeAdvisedMethod(ViewTicket$getStatus$invocation_11fc909007b.java)
    at
 org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.pro
 ceed(AbstractComponentMethodInvocation.java:71)
    at
 org.apache.tapestry5.ioc.internal.services.LoggingAdvice.advise(LoggingAdvic
 e.java:45)
    at

 org.apache.tapestry5.internal.transform.LogWorker$1.advise(LogWorker.java:54
 )
    at
 org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.pro
 ceed(AbstractComponentMethodInvocation.java:80)
    at
 org.iana.ietf.ticketstatus.components.ViewTicket.getStatus(ViewTicket.java)
    at $PropertyConduit_11fc9056327.get($PropertyConduit_11fc9056327.java)
    at
 org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:53)
    at
 org.apache.tapestry5.internal.structure.ExpansionPageElement.render(Expansio
 nPageElement.java:47)
    at
 org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.j
 ava:72)
    at
 org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRender
 QueueImpl.java:121)
    at
 $PageRenderQueue_11fc9056337.render($PageRenderQueue_11fc9056337.java)
    at
 $PageRenderQueue_11fc905632f.render($PageRenderQueue_11fc905632f.java)
    at
 org.apache.tapestry5.services.TapestryModule$19.renderMarkup(TapestryModule.
 java:1200)
    at
 org.apache.tapestry5.services.TapestryModule$29.renderMarkup(TapestryModule.
 java:1580)
    at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
  

Re: Component rendering and parameters binding

2009-03-02 Thread Simon Raveh
Hi,

Thanks for your help.
I'm still trying to figure out why getTicketNumber() is being called before the 
parameter was set. From debugging this it seems that it is being called when 
the Index page is being render. Bellow you can find a thread dump:

[INFO] Started Jetty Server
2009-03-02 13:09:48.951::INFO:  Started selectchannelconnec...@0.0.0.0:8080
[DEBUG] components.ViewTicket [ENTER] beforeRenderTamplate()
[DEBUG] components.ViewTicket [ EXIT] beforeRenderTamplate
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1224)
at 
org.iana.ietf.ticketstatus.components.ViewTicket._$advised$getStatus(ViewTicket.java:36)
[DEBUG] components.ViewTicket [ENTER] getStatus()
at 
org.iana.ietf.ticketstatus.components.ViewTicket$getStatus$invocation_11fc909007b.invokeAdvisedMethod(ViewTicket$getStatus$invocation_11fc909007b.java)
at 
org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.proceed(AbstractComponentMethodInvocation.java:71)
at 
org.apache.tapestry5.ioc.internal.services.LoggingAdvice.advise(LoggingAdvice.java:45)
at 
org.apache.tapestry5.internal.transform.LogWorker$1.advise(LogWorker.java:54)
at 
org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.proceed(AbstractComponentMethodInvocation.java:80)
at 
org.iana.ietf.ticketstatus.components.ViewTicket.getStatus(ViewTicket.java)
at $PropertyConduit_11fc9056327.get($PropertyConduit_11fc9056327.java)
at 
org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:53)
at 
org.apache.tapestry5.internal.structure.ExpansionPageElement.render(ExpansionPageElement.java:47)
at 
org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:72)
at 
org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:121)
at $PageRenderQueue_11fc9056337.render($PageRenderQueue_11fc9056337.java)
at $PageRenderQueue_11fc905632f.render($PageRenderQueue_11fc905632f.java)
at 
org.apache.tapestry5.services.TapestryModule$19.renderMarkup(TapestryModule.java:1200)
at 
org.apache.tapestry5.services.TapestryModule$29.renderMarkup(TapestryModule.java:1580)
at 
$MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at 
org.apache.tapestry5.services.TapestryModule$28.renderMarkup(TapestryModule.java:1561)
at 
$MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at 
org.apache.tapestry5.services.TapestryModule$27.renderMarkup(TapestryModule.java:1543)
at 
$MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at 
org.apache.tapestry5.services.TapestryModule$26.renderMarkup(TapestryModule.java:1525)
at 
$MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at 
org.apache.tapestry5.services.TapestryModule$25.renderMarkup(TapestryModule.java:1495)
at 
$MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at 
$MarkupRenderer_11fc9056335.renderMarkup($MarkupRenderer_11fc9056335.java)
at 
org.apache.tapestry5.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:64)
at 
$PageMarkupRenderer_11fc9056333.renderPageMarkup($PageMarkupRenderer_11fc9056333.java)
at 
org.apache.tapestry5.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:57)
at 
$PageResponseRenderer_11fc90562f0.renderPageResponse($PageResponseRenderer_11fc90562f0.java)
at 
org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:59)
at 
org.apache.tapestry5.services.TapestryModule$35.handle(TapestryModule.java:1779)
at 
$PageRenderRequestHandler_11fc90562f1.handle($PageRenderRequestHandler_11fc90562f1.java)
at 
$PageRenderRequestHandler_11fc90562e4.handle($PageRenderRequestHandler_11fc90562e4.java)
at 
org.apache.tapestry5.internal.services.PageRenderDispatcher.process(PageRenderDispatcher.java:92)
at 
org.apache.tapestry5.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:81)
at $Dispatcher_11fc90562ea.dispatch($Dispatcher_11fc90562ea.java)
at $Dispatcher_11fc90562dd.dispatch($Dispatcher_11fc90562dd.java)
at 
org.apache.tapestry5.services.TapestryModule$17.service(TapestryModule.java:1029)
at 
org.iana.ietf.ticketstatus.services.AppModule$1.service(AppModule.java:77)
at $RequestFilter_11fc90562dc.service($RequestFilter_11fc90562dc.java)
at $RequestHandler_11fc90562de.service($RequestHandler_11fc90562de.java)
at 
org.apache.tapestry5.internal.services.LocalizationFilter.service(LocalizationFilter.java:42)
at $RequestHandler_11fc90562de.service($RequestHandler_11fc90562de.java)
at 
org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)
at $RequestHandler_11fc90562de.service($RequestHandler_11fc90562de.java)
at 

Re: Component rendering and parameters binding

2009-03-02 Thread Alex Kotchnev
Simon,
   I still can't figure out your dilemma, but I notice something
interesting.. In the stacktrace that you provided, it looks like this time
getStatus() is being called before getTicket..

   Maybe some of the folks that are more familiar w/ the guts of T5 can look
at this. It doesn't look like this is due to anything you're doing, looks
like a race condition of some type.

   I think it would be helpful if you provide some more details on the
environment that you run your app in : e.g. JVM version, app server . Btw,
does this happen consistently if you run it on a different box (e.g. I've
had non-tapestry related stuff sometimes behave differently in terms of
threading on a single CPU vs dual core box) ? Maybe you can try different
JVMs as well, just to check that this is not JVM or version specific.

Cheers,

Alex kotchnev

On Mon, Mar 2, 2009 at 4:23 PM, Simon Raveh simon.ra...@icann.org wrote:

 Hi,

 Thanks for your help.
 I'm still trying to figure out why getTicketNumber() is being called before
 the parameter was set. From debugging this it seems that it is being called
 when the Index page is being render. Bellow you can find a thread dump:

 [INFO] Started Jetty Server
 2009-03-02 13:09:48.951::INFO:  Started
 selectchannelconnec...@0.0.0.0:8080
 [DEBUG] components.ViewTicket [ENTER] beforeRenderTamplate()
 [DEBUG] components.ViewTicket [ EXIT] beforeRenderTamplate
 java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1224)
at
 org.iana.ietf.ticketstatus.components.ViewTicket._$advised$getStatus(ViewTicket.java:36)
 [DEBUG] components.ViewTicket [ENTER] getStatus()
 at
 org.iana.ietf.ticketstatus.components.ViewTicket$getStatus$invocation_11fc909007b.invokeAdvisedMethod(ViewTicket$getStatus$invocation_11fc909007b.java)
at
 org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.proceed(AbstractComponentMethodInvocation.java:71)
at
 org.apache.tapestry5.ioc.internal.services.LoggingAdvice.advise(LoggingAdvice.java:45)
at
 org.apache.tapestry5.internal.transform.LogWorker$1.advise(LogWorker.java:54)
at
 org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.proceed(AbstractComponentMethodInvocation.java:80)
at
 org.iana.ietf.ticketstatus.components.ViewTicket.getStatus(ViewTicket.java)
at $PropertyConduit_11fc9056327.get($PropertyConduit_11fc9056327.java)
at
 org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:53)
at
 org.apache.tapestry5.internal.structure.ExpansionPageElement.render(ExpansionPageElement.java:47)
at
 org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:72)
at
 org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:121)
at
 $PageRenderQueue_11fc9056337.render($PageRenderQueue_11fc9056337.java)
at
 $PageRenderQueue_11fc905632f.render($PageRenderQueue_11fc905632f.java)
at
 org.apache.tapestry5.services.TapestryModule$19.renderMarkup(TapestryModule.java:1200)
at
 org.apache.tapestry5.services.TapestryModule$29.renderMarkup(TapestryModule.java:1580)
at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at
 org.apache.tapestry5.services.TapestryModule$28.renderMarkup(TapestryModule.java:1561)
at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at
 org.apache.tapestry5.services.TapestryModule$27.renderMarkup(TapestryModule.java:1543)
at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at
 org.apache.tapestry5.services.TapestryModule$26.renderMarkup(TapestryModule.java:1525)
at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at
 org.apache.tapestry5.services.TapestryModule$25.renderMarkup(TapestryModule.java:1495)
at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at
 $MarkupRenderer_11fc9056335.renderMarkup($MarkupRenderer_11fc9056335.java)
at
 org.apache.tapestry5.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:64)
at
 $PageMarkupRenderer_11fc9056333.renderPageMarkup($PageMarkupRenderer_11fc9056333.java)
at
 org.apache.tapestry5.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:57)
at
 $PageResponseRenderer_11fc90562f0.renderPageResponse($PageResponseRenderer_11fc90562f0.java)
at
 org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:59)
at
 org.apache.tapestry5.services.TapestryModule$35.handle(TapestryModule.java:1779)
at
 $PageRenderRequestHandler_11fc90562f1.handle($PageRenderRequestHandler_11fc90562f1.java)
at
 $PageRenderRequestHandler_11fc90562e4.handle($PageRenderRequestHandler_11fc90562e4.java)
at
 org.apache.tapestry5.internal.services.PageRenderDispatcher.process(PageRenderDispatcher.java:92)
at
 

Re: Component rendering and parameters binding

2009-03-02 Thread Howard Lewis Ship
I'm not sure what the confusion is:

td${ticketNumber}/td

That's your call to getTicketNumber().

On Mon, Mar 2, 2009 at 6:04 PM, Alex Kotchnev akoch...@gmail.com wrote:
 Simon,
   I still can't figure out your dilemma, but I notice something
 interesting.. In the stacktrace that you provided, it looks like this time
 getStatus() is being called before getTicket..

   Maybe some of the folks that are more familiar w/ the guts of T5 can look
 at this. It doesn't look like this is due to anything you're doing, looks
 like a race condition of some type.

   I think it would be helpful if you provide some more details on the
 environment that you run your app in : e.g. JVM version, app server . Btw,
 does this happen consistently if you run it on a different box (e.g. I've
 had non-tapestry related stuff sometimes behave differently in terms of
 threading on a single CPU vs dual core box) ? Maybe you can try different
 JVMs as well, just to check that this is not JVM or version specific.

 Cheers,

 Alex kotchnev

 On Mon, Mar 2, 2009 at 4:23 PM, Simon Raveh simon.ra...@icann.org wrote:

 Hi,

 Thanks for your help.
 I'm still trying to figure out why getTicketNumber() is being called before
 the parameter was set. From debugging this it seems that it is being called
 when the Index page is being render. Bellow you can find a thread dump:

 [INFO] Started Jetty Server
 2009-03-02 13:09:48.951::INFO:  Started
 selectchannelconnec...@0.0.0.0:8080
 [DEBUG] components.ViewTicket [ENTER] beforeRenderTamplate()
 [DEBUG] components.ViewTicket [ EXIT] beforeRenderTamplate
 java.lang.Exception: Stack trace
    at java.lang.Thread.dumpStack(Thread.java:1224)
    at
 org.iana.ietf.ticketstatus.components.ViewTicket._$advised$getStatus(ViewTicket.java:36)
 [DEBUG] components.ViewTicket [ENTER] getStatus()
     at
 org.iana.ietf.ticketstatus.components.ViewTicket$getStatus$invocation_11fc909007b.invokeAdvisedMethod(ViewTicket$getStatus$invocation_11fc909007b.java)
    at
 org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.proceed(AbstractComponentMethodInvocation.java:71)
    at
 org.apache.tapestry5.ioc.internal.services.LoggingAdvice.advise(LoggingAdvice.java:45)
    at
 org.apache.tapestry5.internal.transform.LogWorker$1.advise(LogWorker.java:54)
    at
 org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.proceed(AbstractComponentMethodInvocation.java:80)
    at
 org.iana.ietf.ticketstatus.components.ViewTicket.getStatus(ViewTicket.java)
    at $PropertyConduit_11fc9056327.get($PropertyConduit_11fc9056327.java)
    at
 org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:53)
    at
 org.apache.tapestry5.internal.structure.ExpansionPageElement.render(ExpansionPageElement.java:47)
    at
 org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:72)
    at
 org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:121)
    at
 $PageRenderQueue_11fc9056337.render($PageRenderQueue_11fc9056337.java)
    at
 $PageRenderQueue_11fc905632f.render($PageRenderQueue_11fc905632f.java)
    at
 org.apache.tapestry5.services.TapestryModule$19.renderMarkup(TapestryModule.java:1200)
    at
 org.apache.tapestry5.services.TapestryModule$29.renderMarkup(TapestryModule.java:1580)
    at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
    at
 org.apache.tapestry5.services.TapestryModule$28.renderMarkup(TapestryModule.java:1561)
    at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
    at
 org.apache.tapestry5.services.TapestryModule$27.renderMarkup(TapestryModule.java:1543)
    at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
    at
 org.apache.tapestry5.services.TapestryModule$26.renderMarkup(TapestryModule.java:1525)
    at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
    at
 org.apache.tapestry5.services.TapestryModule$25.renderMarkup(TapestryModule.java:1495)
    at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
    at
 $MarkupRenderer_11fc9056335.renderMarkup($MarkupRenderer_11fc9056335.java)
    at
 org.apache.tapestry5.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:64)
    at
 $PageMarkupRenderer_11fc9056333.renderPageMarkup($PageMarkupRenderer_11fc9056333.java)
    at
 org.apache.tapestry5.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:57)
    at
 $PageResponseRenderer_11fc90562f0.renderPageResponse($PageResponseRenderer_11fc90562f0.java)
    at
 org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:59)
    at
 org.apache.tapestry5.services.TapestryModule$35.handle(TapestryModule.java:1779)
    at
 $PageRenderRequestHandler_11fc90562f1.handle($PageRenderRequestHandler_11fc90562f1.java)
    at
 

Re: Component rendering and parameters binding

2009-03-02 Thread Simon Raveh
Yes but this is in the component template and it is being called before
tapestry is binding the parameter to the component. If you look at stack
trace you will see that the call to getTicketNumber() on the component is
coming before tapestry is calling getTicket()  on the page object to get the
parameter that need to be  pass to the component

[DEBUG] components.ViewTicket [ENTER] beforeRenderTamplate
[DEBUG] components.ViewTicket [ EXIT] beforeRenderTamplate
[DEBUG] components.ViewTicket [ENTER] getTicketNumber()
[DEBUG] pages.Index [ENTER] getTicket()
[DEBUG] pages.Index [ EXIT] getTicket

My dev environment is:

Mac book pro with Intellij IDEA 8.1 and Apache Tomcat Version 6.0.10 JDK
1.5_07. I'm running the project using maven 2.0.10

Thanks,
Simon


On 3/2/09 6:32 PM, Howard Lewis Ship hls...@gmail.com wrote:

 I'm not sure what the confusion is:

 td${ticketNumber}/td

 That's your call to getTicketNumber().

 On Mon, Mar 2, 2009 at 6:04 PM, Alex Kotchnev akoch...@gmail.com wrote:
 Simon,
   I still can't figure out your dilemma, but I notice something
 interesting.. In the stacktrace that you provided, it looks like this time
 getStatus() is being called before getTicket..

   Maybe some of the folks that are more familiar w/ the guts of T5 can look
 at this. It doesn't look like this is due to anything you're doing, looks
 like a race condition of some type.

   I think it would be helpful if you provide some more details on the
 environment that you run your app in : e.g. JVM version, app server . Btw,
 does this happen consistently if you run it on a different box (e.g. I've
 had non-tapestry related stuff sometimes behave differently in terms of
 threading on a single CPU vs dual core box) ? Maybe you can try different
 JVMs as well, just to check that this is not JVM or version specific.

 Cheers,

 Alex kotchnev

 On Mon, Mar 2, 2009 at 4:23 PM, Simon Raveh simon.ra...@icann.org wrote:

 Hi,

 Thanks for your help.
 I'm still trying to figure out why getTicketNumber() is being called before
 the parameter was set. From debugging this it seems that it is being called
 when the Index page is being render. Bellow you can find a thread dump:

 [INFO] Started Jetty Server
 2009-03-02 13:09:48.951::INFO:  Started
 selectchannelconnec...@0.0.0.0:8080
 [DEBUG] components.ViewTicket [ENTER] beforeRenderTamplate()
 [DEBUG] components.ViewTicket [ EXIT] beforeRenderTamplate
 java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1224)
at
 org.iana.ietf.ticketstatus.components.ViewTicket._$advised$getStatus(ViewTic
 ket.java:36)
 [DEBUG] components.ViewTicket [ENTER] getStatus()
 at
 org.iana.ietf.ticketstatus.components.ViewTicket$getStatus$invocation_11fc90
 9007b.invokeAdvisedMethod(ViewTicket$getStatus$invocation_11fc909007b.java)
at
 org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.pro
 ceed(AbstractComponentMethodInvocation.java:71)
at
 org.apache.tapestry5.ioc.internal.services.LoggingAdvice.advise(LoggingAdvic
 e.java:45)
at

org.apache.tapestry5.internal.transform.LogWorker$1.advise(LogWorker.java:54
)
at
 org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.pro
 ceed(AbstractComponentMethodInvocation.java:80)
at
 org.iana.ietf.ticketstatus.components.ViewTicket.getStatus(ViewTicket.java)
at $PropertyConduit_11fc9056327.get($PropertyConduit_11fc9056327.java)
at
 org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:53)
at
 org.apache.tapestry5.internal.structure.ExpansionPageElement.render(Expansio
 nPageElement.java:47)
at
 org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.j
 ava:72)
at
 org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRender
 QueueImpl.java:121)
at
 $PageRenderQueue_11fc9056337.render($PageRenderQueue_11fc9056337.java)
at
 $PageRenderQueue_11fc905632f.render($PageRenderQueue_11fc905632f.java)
at
 org.apache.tapestry5.services.TapestryModule$19.renderMarkup(TapestryModule.
 java:1200)
at
 org.apache.tapestry5.services.TapestryModule$29.renderMarkup(TapestryModule.
 java:1580)
at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at
 org.apache.tapestry5.services.TapestryModule$28.renderMarkup(TapestryModule.
 java:1561)
at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at
 org.apache.tapestry5.services.TapestryModule$27.renderMarkup(TapestryModule.
 java:1543)
at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at
 org.apache.tapestry5.services.TapestryModule$26.renderMarkup(TapestryModule.
 java:1525)
at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at
 org.apache.tapestry5.services.TapestryModule$25.renderMarkup(TapestryModule.
 java:1495)
at
 $MarkupRenderer_11fc905633b.renderMarkup($MarkupRenderer_11fc905633b.java)
at
 

Re: Component rendering and parameters binding

2009-03-01 Thread Alex Kotchnev
Simon,
   I'm not entirely sure why the getTicketNumber() gets called before the
ticket gets set, maybe you can put in a break point in the method and look
at the stack trace and see what's calling it. Just looking at it like this,
I have no explanation why it's being called.

   On your question of not rendering the component based on its state : it
seems that it depends on how you want to do it. If this 'don't render empty'
behavior is expected to be a part of the ViewTicket component, you can
always use a t:if to inspect the state of the ticket in the component
template render nothing if the ticket is in a state that shouldn't be
rendered. It seems that the best approach there would be to have 2 blocks :
one for empty ticket, one for displayable ticket, and then use a t:if to
select which block to render, e.g.

div id='content'
   t:delegate to='contentBlock' /
/div

t:block t:id=fullContent  /t:block
t:block t:id=emptyBlock .../t:block


... and then in the component class ...

@Component
Block fullContent
@Component
Block emptyBlock

public Block getContentBlock() {
if (this.ticket.foo='bar') {
  return emptyBlock;
}  else {
  fullContent;
}
}

Something like that.. I haven't tested the exact code above, but I have a
few similar examples. I think JumpStart (
http://jumpstart.doublenegative.com.au:8080/jumpstart/) has some examples to
illustrate this but I don't have the exact URL for that.

Cheers,

Alex Kotchnev

On Sun, Mar 1, 2009 at 12:09 AM, Simon Raveh simon.ra...@icann.org wrote:

 Hi,

 I'm switching from Tapestry 4 to to Tapestry 5 and I need help with a
 simple component.
 I have a component ViewTicket that display Ticket information. The tml file
 code:

 t:container xmlns:t=http://tapestry.apache.org/schema/tapestry_5_0_0.xsd
 
div style=display: block; id=output
div id=assessment_panel
div class=safe id=box_assessment
h2Ticket Information/h2
/div
/div
div id=results_panel
table id=ns_table
tbody
tr
thTicket ID/th
thStatus/th
thQueue/th
thCreated/th
/tr
tr
td${ticketNumber}/td
td${status}/td
td${queue}/td
td${created}/td
/tr
/tbody
/table
/div
/div
 /t:container

 And the java code

 public class ViewTicket implements TicketViewer {

@Inject
private Logger logger;

@Parameter(required = true)
private RTTicket ticket;

@Log
@BeforeRenderTemplate
void beforeRenderTamplate(){
}

@Log
public Long getTicketNumber() {
return ticket == null ? null : ticket.getId();
}

@Log
public String getQueue() {
return ticket == null ? null :ticket.getQueue();
}

@Log
public String getStatus() {
return ticket == null ? null :ticket.getStatus();
}

@Log
public Date getCreated() {
return ticket == null ? null : ticket.getCreated();
}

public void addTicket(RTTicket ticket) {
   this.ticket = ticket;
}

public void clearTicket() {
this.ticket = new RTTicketImpl();
}
 }
 And my page Index.tml

 !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN 
 http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd;
 html t:type=layout xmlns:t=
 http://tapestry.apache.org/schema/tapestry_5_0_0.xsd;
body
h1Request (Ticket) Information/h1
pTo check the status of your request, please enter the ticket
 number (numerical value only) below: /p
form t:type=form t:id=search_form  action=#
t:errors/
Ticket ID:
input t:type=TextField t:id=ticketId
 t:clientId=id_query validate=required/
input type=submit value=Submit Query
 id=form-submit-button/
 /form
span t:type=ViewTicket t:ticket=prop:ticket /
/body
 /html

 Index.java

 public class Index {

@Inject
private Logger logger;

@Property
private long ticketId;

void onValidateForm() {

}

void onSuccess() {
}

@Log
public RTTicket getTicket() {
return new RTTicketImpl();
}
 }

 My problem is that Tapestry is calling the method getTicketNumber before
 the Ticket parameter is bound.
 Here are the logging output:

 [DEBUG] components.ViewTicket [ENTER] beforeRenderTamplate()
 [DEBUG] components.ViewTicket [ EXIT] beforeRenderTamplate
 [DEBUG] components.ViewTicket [ENTER] getTicketNumber()
 [DEBUG] pages.Index [ENTER] getTicket()
 [DEBUG] pages.Index [ EXIT] getTicket
 [org.iana.ietf.ticketstatus.moodel.rtticketi...@3805fd37]
 [DEBUG] components.ViewTicket [ EXIT] getTicketNumber [null]
 [DEBUG] components.ViewTicket [ENTER] getStatus()
 [DEBUG] components.ViewTicket [