Well, Tapestry will automatically clean up the services for you, but if you are using them inside a servlet filter (which kicks in before the Tapestry stuff), then you will have to do the cleanup yourself (or use a tapestry WebRequestServicerFilter or a ServletRequestServicerFilter and avoid the cleanup).
-----Original Message----- From: news [mailto:[EMAIL PROTECTED] On Behalf Of hv @ Fashion Content Sent: Monday, July 10, 2006 9:16 PM To: users@tapestry.apache.org Subject: Re: Using Discardable threaded services correctly? Oh ok. Well I don't know the first thing about how to use HiveMind filters, so I haven't changed any setup there. I need this functionality in my Tapestry pages and in a couple of custome servlets, so I implemented it as a ServletFilter. Rather than having 4 different ServletFilters, I combined them. As I understand it from the HiveMind docs it is my responsibility to clean up threaded services. Is that not still the case? Henrik "James Carman" <[EMAIL PROTECTED]> skrev i en meddelelse news:[EMAIL PROTECTED] >I was thinking of a Tapestry WebRequestServicerFilter or > ServletRequestServicerFilter. That basically takes the place of a servlet > filter. For the tapestry-acegi module, I actually implemented support for > regular servlet filters in the ServletRequestServicerFilter chain. I did > that because all of the Acegi stuff is implemented using various servlet > filters. > > -----Original Message----- > From: news [mailto:[EMAIL PROTECTED] On Behalf Of hv @ Fashion Content > Sent: Monday, July 10, 2006 9:02 PM > To: users@tapestry.apache.org > Subject: Re: Using Discardable threaded services correctly? > > context.getAttribute("org.apache.tapestry.Registry:portalapp"); > PersonalIdentity ident = (PersonalIdentity) > firstRegistry.getService(PersonalIdentity.class); > > I wrote the filter and tried to incorporate all the standard functionality > needed by Tapestry, Spring & HiveMind. > > The filter essentially replaces HTTP Session management so I can't really > use the Tapestry filter. The relevant part of the code is below(and in the > original mail). > > The Tapestry filter you refer to is the redirect filter right? I don't see > any code in it relating to service cleanup. Or are you thinking of > HiveMind > filter? > > Henrik > > "James Carman" <[EMAIL PROTECTED]> skrev i en meddelelse > news:[EMAIL PROTECTED] >> How are you accessing the service in your servlet filter? Did you write >> the >> servlet filter? Why can't you use the tapestry filter mechanism? >> >> -----Original Message----- >> From: news [mailto:[EMAIL PROTECTED] On Behalf Of hv @ Fashion Content >> Sent: Monday, July 10, 2006 8:39 PM >> To: users@tapestry.apache.org >> Subject: Re: Using Discardable threaded services correctly? >> >> Since I use the service in every page of my app I have no doubt it will >> be >> instantiated. Also it's accessed in the first part of the filter. >> I think there might be something spooky going on with logging, althought >> that would be the first time I have experienced logging >> statements/internal >> errors just being eaten. >> When I removed the comment the service.threadDidDiscardService threw a >> nullpointer exception in the logging statement, indicating that the >> static >> logger variable was null..... Very odd. >> >> Henrik >> "James Carman" <[EMAIL PROTECTED]> skrev i en meddelelse >> news:[EMAIL PROTECTED] >>> HiveMind will not instantiate your service unless it is needed (which >>> would >>> explain why you saw the expected behavior after you called a method). >>> If >>> it >>> instantiates it, then it'll clean it up. >>> >>> -----Original Message----- >>> From: news [mailto:[EMAIL PROTECTED] On Behalf Of hv @ Fashion Content >>> Sent: Monday, July 10, 2006 7:55 PM >>> To: users@tapestry.apache.org >>> Subject: Using Discardable threaded services correctly? >>> >>> I have a ServletFilter which sets up an identity object for each >>> request. >>> Previously it was stored with setAttribute, but now I use a threaded >>> HiveMind service. So far it has worked just fine, but I can't seem to >>> get >>> the _Discardable_ functionality to work properly. >>> >>> PersonalIdentity extends Discardable. The first step I tried was to >>> insert >> >>> a >>> >>> logging statement in void threadDidDiscardService(). >>> >>> Nothing happened! >>> >>> Eventually I tried to just call a function on PersonalIdentity, which >>> seemed >>> >>> to work, and moreover it now threadDidDiscardService got called. >>> >>> Does Tapestry do some threaded housecleaning in ApplicationServlet? >>> >>> I suppose that I am missing something obvious, or just making a basic >>> blunder. But which one? >>> >>> Thanks, >>> Henrik >>> >>> The filter looks something like this: >>> >>> try { >>> if (firstRegistry == null) { >>> firstRegistry = (Registry) >>> context.getAttribute("org.apache.tapestry.Registry:portalapp"); >>> } >>> if (firstRegistry != null) { >>> logger.debug("Pushed PersonalIdentity to registry >>> "+firstRegistry.hashCode()); >>> PersonalIdentity ident = (PersonalIdentity) >>> firstRegistry.getService(PersonalIdentity.class); >>> ... >>> } >>> >>> chain.doFilter(req,res); >>> } >>> finally { >>> if (firstRegistry != null) { >>> // PersonalIdentity ident = (PersonalIdentity) >>> firstRegistry.getService(PersonalIdentity.class); >>> // ident.saveChanges(); >>> // ident = null; >>> firstRegistry.cleanupThread(); >>> } >>> long processingTime = System.currentTimeMillis() - startTime; >>> webApp.publishEvent(new RequestHandledEvent( >>> this,req.getRequestURI(),processingTime,req.getRemoteAddr(), >>> req.getMethod(),null >>> )); >>> } >>> >>> The registration for ident is: >>> >>> <service-point id="Identity" >>> interface="com.bluprinted.personal.market.PersonalIdentity"> >>> >>> <invoke-factory model="threaded"> >>> >>> <construct >>> class="com.bluprinted.personal.market.PersonalIdentityImpl"></construct> >>> >>> </invoke-factory> >>> >>> </service-point> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>> For additional commands, e-mail: [EMAIL PROTECTED] >>> >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>> For additional commands, e-mail: [EMAIL PROTECTED] >>> >>> >> >> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]