You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Martin Grotzke <ma...@javakaffee.de> on 2007/07/11 09:37:27 UTC

RE: T5: NPE in Base64InputStream and locked/waitingCheckForUpdatesFilter

Ben, thanx a lot for this info!

We were running our app under jdk 6u1 and tapestry 5.0.5, so it's
matching perfectly.

I just installed jdk 6u2 on our test-system and started our app
with this - so we'll see if it happens again.

I'll give a feedback after say 5 days when our app is fine, or of course
if this problem occurs again.

Btw: it's very amazing communicating on this list, as there's so much
useful and fast feedback - really great!!

Thanx for now,
cheers,
Martin



On Tue, 2007-07-10 at 19:52 -1000, Ben Sommerville wrote:
> If you are running under jdk 6u1 and tapestry 5.0.5 (or greater) then
> there is
> a jvm bug that can cause a deadlock.
> 
> The bug report is at
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6571733.  
> It is supposed to be fixed in jdk 6u2 (which was release recently) but I 
> haven't had a chance to test it yet.
> 
> cheers
> Ben
> 
> > -----Original Message-----
> > From: Martin Grotzke [mailto:martin.grotzke@javakaffee.de] 
> > Sent: Wednesday, 11 July 2007 9:06 AM
> > To: Tapestry users
> > Subject: Re: T5: NPE in Base64InputStream and 
> > locked/waitingCheckForUpdatesFilter
> > 
> > The NPE seems to be caused by a missing t:formdata request parameter.
> > 
> > I just "reproduced" this (weird) situation by removing the hidden form
> > field "t:formdata" with firebug, so that I could produce the NPE.
> > 
> > Although, following request went through well, and the number 
> > of request
> > processing threads did not increase.
> > 
> > So there seems to be no (direct) interrelationship between the NPE
> > and the locked threads.
> > 
> > Cheers,
> > Martin
> > 
> > 
> > 
> > On Tue, 2007-07-10 at 23:43 +0200, Martin Grotzke wrote:
> > > Hi,
> > > 
> > > we had an issue with our deployed application that did not respond
> > > anymore. This happened two or three times in the last 4 days, but
> > > I was not able to reproduce it until now.
> > > 
> > > The analysis of the logs showed, that there was a NPE in
> > > Base64InputStream, and afterwards the application did not respond
> > > anymore.
> > > 
> > > When I triggered a thread dump, all 200 tomcat threads were 
> > in status
> > > WAITING, like this one:
> > > 
> > > "http-9090-1" daemon prio=10 tid=0x00002aaaf7e1fc00 
> > nid=0x3f05 waiting on condition 
> > [0x000000004459e000..0x000000004459fbc0]
> > >    java.lang.Thread.State: WAITING (parking)
> > >         at sun.misc.Unsafe.park(Native Method)
> > >         - parking to wait for  <0x00002aaab8228360> (a 
> > java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync)
> > >         at 
> > java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
> > >         at 
> > java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndC
> > heckInterrupt(AbstractQueuedSynchronizer.java:712)
> > >         at 
> > java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquir
> > eShared(AbstractQueuedSynchronizer.java:842)
> > >         at 
> > java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireS
> > hared(AbstractQueuedSynchronizer.java:1162)
> > >         at 
> > java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.loc
> k(ReentrantReadWriteLock.java:594)
> > >         at 
> > org.apache.tapestry.ioc.internal.util.ConcurrentBarrier.withRe
> > ad(ConcurrentBarrier.java:70)
> > >         at 
> > org.apache.tapestry.internal.services.CheckForUpdatesFilter.se
> > rvice(CheckForUpdatesFilter.java:110)
> > >         at 
> > $RequestHandler_1139c29ae4a.service($RequestHandler_1139c29ae4a.java)
> > >         at 
> > $RequestHandler_1139c29ae41.service($RequestHandler_1139c29ae41.java)
> > >         at 
> > org.apache.tapestry.services.TapestryModule$11.service(Tapestr
> yModule.java:1044)
> > >         at 
> > $HttpServletRequestHandler_1139c29ae40.service($HttpServletReq
> uestHandler_1139c29ae40.java)
> > >         at 
> > org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:135)
> > >         at 
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilt
> > er(ApplicationFilterChain.java:235)
> > >         at 
> > org.apache.catalina.core.ApplicationFilterChain.doFilter(Appli
> > cationFilterChain.java:206)
> > >         at 
> > org.apache.catalina.core.StandardWrapperValve.invoke(StandardW
> > rapperValve.java:230)
> > >         at 
> > org.apache.catalina.core.StandardContextValve.invoke(StandardC
> > ontextValve.java:175)
> > >         at 
> > org.apache.catalina.core.StandardHostValve.invoke(StandardHost
> > Valve.java:128)
> > >         at 
> > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReport
> > Valve.java:104)
> > >         at 
> > org.apache.catalina.core.StandardEngineValve.invoke(StandardEn
> > gineValve.java:109)
> > >         at 
> > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdap
> > ter.java:261)
> > >         at 
> > org.apache.coyote.http11.Http11Processor.process(Http11Process
> > or.java:844)
> > >         at 
> > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandle
> r.process(Http11Protocol.java:581)
> > >         at 
> > org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.
> java:447)
> > >         at java.lang.Thread.run(Thread.java:619)
> > > 
> > > I'm not sure if the NPE that happened before is the reason 
> > for this, as I don't
> > > see the relationship between both issues (apart from the 
> > correlation of events/time).
> > > 
> > > Hopefully someone closer to the code can have a look at 
> > this and tell what's the
> > > problem here? Then I'd like to submit a bug report / help 
> > fixing(?)...
> > > 
> > > More output of the logs you find at the end of this email.
> > > 
> > > Thanx a lot in advance,
> > > cheers,
> > > Martin
> > > 
> > > 
> > > 
> > > [INFO ] 2007-07-09 11:56:35,513 TP-Processor1 
> > org.comp.proj.search.presentation.pages.Search.onActivate:
> > > Got invoked args hose, cat:Herrenbekleidung, n, 100
> > > 
> > > [INFO ] 2007-07-09 11:56:35,518 TP-Processor1 
> > org.comp.proj.search.presentation.pages.Search.setupRender:
> > > Starting search...
> > > 
> > > [DEBUG] 2007-07-09 11:56:35,520 TP-Processor1 
> > org.comp.proj.search.business.SearchServiceSolrImpl.search:
> > > Starting query:
> > > 
> > q=hose;score+desc&fq=cat:Herrenbekleidung&start=0&rows=100&fac
> et=true&facet.field=cat&facet.field=brand&facet.field=type&facet>
> .field=color&facet
> > > 
> > .field=price&facet.limit=5&facet.zeros=false&facet.missing=fal
> se&version=2.2
> > > 
> > > [DEBUG] 2007-07-09 11:56:35,610 TP-Processor1 
> > org.comp.proj.search.business.SearchServiceSolrImpl.logResponse:
> > > Got response: numFound: 207, queryTime: 43
> > > 
> > > [INFO ] 2007-07-09 11:56:35,803 TP-Processor1 
> > org.comp.proj.search.presentation.services.AppModule.TimingFil
> > ter.service:
> > > Request time: 292 ms
> > > 
> > > [INFO ] 2007-07-09 11:57:05,982 TP-Processor5 
> > org.comp.proj.search.presentation.pages.Search.onActivate:
> > > Got invoked args hose, n, 100
> > > 
> > > [INFO ] 2007-07-09 11:57:05,988 TP-Processor5 
> > org.comp.proj.search.presentation.pages.Search.setupRender:
> > > Starting search...
> > > 
> > > [DEBUG] 2007-07-09 11:57:05,989 TP-Processor5 
> > org.comp.proj.search.business.SearchServiceSolrImpl.search:
> > > Starting query:
> > > 
> > q=hose;score+desc&start=0&rows=100&facet=true&facet.field=cat&
> facet.field=brand&facet.field=type&facet.field=color&facet.field>
> =price&facet.limit
> > > =5&facet.zeros=false&facet.missing=false&version=2.2
> > > 
> > > [DEBUG] 2007-07-09 11:57:06,078 TP-Processor5 
> > org.comp.proj.search.business.SearchServiceSolrImpl.logResponse:
> > > Got response: numFound: 2001, queryTime: 44
> > > 
> > > [INFO ] 2007-07-09 11:57:06,276 TP-Processor5 
> > org.comp.proj.search.presentation.services.AppModule.TimingFil
> > ter.service:
> > > Request time: 296 ms
> > > 
> > > [INFO ] 2007-07-09 12:07:22,379 TP-Processor5 
> > org.comp.proj.search.presentation.pages.Search.onActivate:
> > > Got invoked args
> > > 
> > > [INFO ] 2007-07-09 12:07:22,382 TP-Processor5 
> > org.comp.proj.search.presentation.services.AppModule.TimingFil
> > ter.service:
> > > Request time: 605041 ms
> > > ^^^^^^^^^^^^^^^^^^^^^^^ --> 10 minutes?!
> > > 
> > > [ERROR] 2007-07-09 12:07:22,382 TP-Processor5 
> > org.apache.tapestry.internal.services.InternalModule.RequestEx
> > ceptionHandler.handleRequestExceptio
> > > n:
> > > Processing of request failed with uncaught exception: 
> > org.apache.tapestry.ioc.internal.util.TapestryException
> > > 
> > > org.apache.tapestry.ioc.internal.util.TapestryException
> > >         at 
> > org.apache.tapestry.corelib.components.Form.onAction(Form.java:375)
> > >         at 
> > org.apache.tapestry.corelib.components.Form.handleComponentEve
> > nt(Form.java)
> > >         at 
> > org.apache.tapestry.internal.structure.ComponentPageElementImp
> > l.handleEvent(ComponentPageElementImpl.java:893)
> > >         at 
> > org.apache.tapestry.internal.structure.ComponentPageElementImp
> > l.triggerEvent(ComponentPageElementImpl.java:998)
> > >         at 
> > org.apache.tapestry.internal.services.ComponentActionRequestHa
> > ndlerImpl.handle(ComponentActionRequestHandlerImpl.java:81)
> > >         at 
> > org.apache.tapestry.internal.services.InternalModule$11.handle
> (InternalModule.java:541)
> > >         at 
> > $ComponentActionRequestHandler_1139c29ae5a.handle($ComponentAc
> tionRequestHandler_1139c29ae5a.java)
> > >         at 
> > $ComponentActionRequestHandler_1139c29ae55.handle($ComponentAc
> tionRequestHandler_1139c29ae55.java)
> > >         at 
> > org.apache.tapestry.internal.services.ComponentActionDispatche
> > r.dispatch(ComponentActionDispatcher.java:116)
> > >         at 
> > $Dispatcher_1139c29ae57.dispatch($Dispatcher_1139c29ae57.java)
> > >         at 
> > $Dispatcher_1139c29ae49.dispatch($Dispatcher_1139c29ae49.java)
> > >         at 
> > org.apache.tapestry.services.TapestryModule$12.service(Tapestr
> yModule.java:1066)
> > >         at 
> > org.comp.proj.search.presentation.services.AppModule$2.service
> (AppModule.java:117)
> > >         at 
> > $RequestFilter_1139c29ae48.service($RequestFilter_1139c29ae48.java)
> > >         at 
> > $RequestHandler_1139c29ae4a.service($RequestHandler_1139c29ae4a.java)
> > >         at 
> > org.comp.proj.search.presentation.services.AppModule$1.service
> (AppModule.java:76)
> > >         at 
> > $RequestFilter_1139c29ae47.service($RequestFilter_1139c29ae47.java)
> > >         at 
> > $RequestHandler_1139c29ae4a.service($RequestHandler_1139c29ae4a.java)
> > >         at 
> > org.apache.tapestry.internal.services.LocalizationFilter.servi
> > ce(LocalizationFilter.java:43)
> > >         at 
> > $RequestHandler_1139c29ae4a.service($RequestHandler_1139c29ae4a.java)
> > >         at 
> > org.apache.tapestry.services.TapestryModule$2.service(Tapestry
> Module.java:657)
> > >         at 
> > $RequestHandler_1139c29ae4a.service($RequestHandler_1139c29ae4a.java)
> > >         at 
> > org.apache.tapestry.internal.services.StaticFilesFilter.servic
> > e(StaticFilesFilter.java:63)
> > >         at 
> > $RequestHandler_1139c29ae4a.service($RequestHandler_1139c29ae4a.java)
> > >         at 
> > org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.
> invoke(CheckForUpdatesFilter.java:97)
> > >         at 
> > org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.
> invoke(CheckForUpdatesFilter.java:88)
> > >         at 
> > org.apache.tapestry.ioc.internal.util.ConcurrentBarrier.withRe
> > ad(ConcurrentBarrier.java:77)
> > >         at 
> > org.apache.tapestry.internal.services.CheckForUpdatesFilter.se
> > rvice(CheckForUpdatesFilter.java:110)
> > >         at 
> > $RequestHandler_1139c29ae4a.service($RequestHandler_1139c29ae4a.java)
> > >         at 
> > $RequestHandler_1139c29ae41.service($RequestHandler_1139c29ae41.java)
> > >         at 
> > org.apache.tapestry.services.TapestryModule$11.service(Tapestr
> yModule.java:1044)
> > >         at 
> > $HttpServletRequestHandler_1139c29ae40.service($HttpServletReq
> uestHandler_1139c29ae40.java)
> > >         at 
> > org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:135)
> > >         at 
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilt
> > er(ApplicationFilterChain.java:235)
> > >         at 
> > org.apache.catalina.core.ApplicationFilterChain.doFilter(Appli
> > cationFilterChain.java:206)
> > >         at 
> > org.apache.catalina.core.StandardWrapperValve.invoke(StandardW
> > rapperValve.java:230)
> > >         at 
> > org.apache.catalina.core.StandardContextValve.invoke(StandardC
> > ontextValve.java:175)
> > >         at 
> > org.apache.catalina.core.StandardHostValve.invoke(StandardHost
> > Valve.java:128)
> > >         at 
> > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReport
> > Valve.java:104)
> > >         at 
> > org.apache.catalina.core.StandardEngineValve.invoke(StandardEn
> > gineValve.java:109)
> > >         at 
> > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdap
> > ter.java:261)
> > >         at 
> > org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
> > >         at 
> > org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
> > >         at 
> > org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
> > >         at 
> > org.apache.jk.common.ChannelSocket.processConnection(ChannelSo
> > cket.java:697)
> > >         at 
> > org.apache.jk.common.ChannelSocket$SocketConnection.runIt(Chan
> nelSocket.java:889)
> > >         at 
> > org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(
> ThreadPool.java:686)
> > >         at java.lang.Thread.run(Thread.java:619)
> > > Caused by: java.lang.NullPointerException
> > >         at 
> > org.apache.tapestry.internal.util.Base64InputStream.decode(Bas
> > e64InputStream.java:34)
> > >         at 
> > org.apache.tapestry.internal.util.Base64InputStream.<init>(Bas
> > e64InputStream.java:29)
> > >         at 
> > org.apache.tapestry.internal.util.Base64ObjectInputStream.<ini
> > t>(Base64ObjectInputStream.java:30)
> > >         at 
> > org.apache.tapestry.corelib.components.Form.onAction(Form.java:355)
> > >         ... 47 more
> > > Jul 9, 2007 2:27:57 PM 
> > org.apache.tomcat.util.threads.ThreadPool logFull
> > > SEVERE: All threads (200) are currently busy, waiting. 
> > Increase maxThreads (200) or check the servlet status
> > > 2007-07-09 17:13:35
> > > Full thread dump Java HotSpot(TM) 64-Bit Server VM 
> > (1.6.0_01-b06 mixed mode):
> > > 
> > > "http-9090-1" daemon prio=10 tid=0x00002aaaf7e1fc00 
> > nid=0x3f05 waiting on condition 
> > [0x000000004459e000..0x000000004459fbc0]
> > >    java.lang.Thread.State: WAITING (parking)
> > >         at sun.misc.Unsafe.park(Native Method)
> > >         - parking to wait for  <0x00002aaab8228360> (a 
> > java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync)
> > >         at 
> > java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
> > >         at 
> > java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndC
> > heckInterrupt(AbstractQueuedSynchronizer.java:712)
> > >         at 
> > java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquir
> > eShared(AbstractQueuedSynchronizer.java:842)
> > >         at 
> > java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireS
> > hared(AbstractQueuedSynchronizer.java:1162)
> > >         at 
> > java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.loc
> k(ReentrantReadWriteLock.java:594)
> > >         at 
> > org.apache.tapestry.ioc.internal.util.ConcurrentBarrier.withRe
> > ad(ConcurrentBarrier.java:70)
> > >         at 
> > org.apache.tapestry.internal.services.CheckForUpdatesFilter.se
> > rvice(CheckForUpdatesFilter.java:110)
> > >         at 
> > $RequestHandler_1139c29ae4a.service($RequestHandler_1139c29ae4a.java)
> > >         at 
> > $RequestHandler_1139c29ae41.service($RequestHandler_1139c29ae41.java)
> > >         at 
> > org.apache.tapestry.services.TapestryModule$11.service(Tapestr
> yModule.java:1044)
> > >         at 
> > $HttpServletRequestHandler_1139c29ae40.service($HttpServletReq
> uestHandler_1139c29ae40.java)
> > >         at 
> > org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:135)
> > >         at 
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilt
> > er(ApplicationFilterChain.java:235)
> > >         at 
> > org.apache.catalina.core.ApplicationFilterChain.doFilter(Appli
> > cationFilterChain.java:206)
> > >         at 
> > org.apache.catalina.core.StandardWrapperValve.invoke(StandardW
> > rapperValve.java:230)
> > >         at 
> > org.apache.catalina.core.StandardContextValve.invoke(StandardC
> > ontextValve.java:175)
> > >         at 
> > org.apache.catalina.core.StandardHostValve.invoke(StandardHost
> > Valve.java:128)
> > >         at 
> > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReport
> > Valve.java:104)
> > >         at 
> > org.apache.catalina.core.StandardEngineValve.invoke(StandardEn
> > gineValve.java:109)
> > >         at 
> > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdap
> > ter.java:261)
> > >         at 
> > org.apache.coyote.http11.Http11Processor.process(Http11Process
> > or.java:844)
> > >         at 
> > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandle
> r.process(Http11Protocol.java:581)
> > >         at 
> > org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.
> java:447)
> > >         at java.lang.Thread.run(Thread.java:619)
> > > 
> > > "TP-Processor200" daemon prio=10 tid=0x00002aaaf8896400 
> > nid=0x3ce9 waiting on condition 
> > [0x000000004455d000..0x000000004455ec40]
> > >    java.lang.Thread.State: WAITING (parking)
> > >         at sun.misc.Unsafe.park(Native Method)
> > >         - parking to wait for  <0x00002aaab8228360> (a 
> > java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync)
> > >         at 
> > java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
> > >         at 
> > java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndC
> > heckInterrupt(AbstractQueuedSynchronizer.java:712)
> > >         at 
> > java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquir
> > eShared(AbstractQueuedSynchronizer.java:842)
> > >         at 
> > java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireS
> > hared(AbstractQueuedSynchronizer.java:1162)
> > >         at 
> > java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.loc
> k(ReentrantReadWriteLock.java:594)
> > >         at 
> > org.apache.tapestry.ioc.internal.util.ConcurrentBarrier.withRe
> > ad(ConcurrentBarrier.java:70)
> > >         at 
> > org.apache.tapestry.internal.services.CheckForUpdatesFilter.se
> > rvice(CheckForUpdatesFilter.java:110)
> > >         at 
> > $RequestHandler_1139c29ae4a.service($RequestHandler_1139c29ae4a.java)
> > >         at 
> > $RequestHandler_1139c29ae41.service($RequestHandler_1139c29ae41.java)
> > >         at 
> > org.apache.tapestry.services.TapestryModule$11.service(Tapestr
> yModule.java:1044)
> > >         at 
> > $HttpServletRequestHandler_1139c29ae40.service($HttpServletReq
> uestHandler_1139c29ae40.java)
> > >         at 
> > org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:135)
> > >         at 
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilt
> > er(ApplicationFilterChain.java:235)
> > >         at 
> > org.apache.catalina.core.ApplicationFilterChain.doFilter(Appli
> > cationFilterChain.java:206)
> > >         at 
> > org.apache.catalina.core.StandardWrapperValve.invoke(StandardW
> > rapperValve.java:230)
> > >         at 
> > org.apache.catalina.core.StandardContextValve.invoke(StandardC
> > ontextValve.java:175)
> > >         at 
> > org.apache.catalina.core.StandardHostValve.invoke(StandardHost
> > Valve.java:128)
> > >         at 
> > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReport
> > Valve.java:104)
> > >         at 
> > org.apache.catalina.core.StandardEngineValve.invoke(StandardEn
> > gineValve.java:109)
> > >         at 
> > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdap
> > ter.java:261)
> > >         at 
> > org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
> > >         at 
> > org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
> > >         at 
> > org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
> > >         at 
> > org.apache.jk.common.ChannelSocket.processConnection(ChannelSo
> > cket.java:697)
> > >         at 
> > org.apache.jk.common.ChannelSocket$SocketConnection.runIt(Chan
> nelSocket.java:889)
> > >         at 
> > org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(
> ThreadPool.java:686)
> > >         at java.lang.Thread.run(Thread.java:619)
> > > 
> > > ... and 199 more of them
> > > 
> > > 
> > -- 
> > Martin Grotzke
> > http://www.javakaffee.de/blog/
> > 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
> 
-- 
Martin Grotzke
http://www.javakaffee.de/blog/