cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ard Schrijvers" <a.schrijv...@hippo.nl>
Subject RE: [SOLVED] RE: JMS Listener invokes Cocoon pipeline (RE: How do I create a context from a background task in cocoon?)
Date Wed, 28 Dec 2005 12:37:08 GMT

> Turns out the memory problem was caused by a special transformer
> component we were using, not anything to do with 
> BackgroundEnvironment.
> 
> However, it's still worth noting that the api for background Cocoon
> processing isn't very pretty, imho.

I totally agree on this one! 

 I've currently actually 
> got the JMS
> listener making an http request to localhost, rather than use
> BackgroundEnvironment.

An http request certainly makes things easier. For me, another hard problem is that we use
our main sitemap in a target dir, which has a matcher

<map:match type="site">
     <map:mount src="{src}" uri-prefix="{uri-prefix}"/>
</map:match>

which matches on hostname, to mount to our "working" sitemap. But, from a BackgroundEnvironment,
I don't have a hostname when I just call a pipeline using for example SourceResolver with
the cocoon:// protocol. So I have to patch in another matcher in my main sitemap in the target
and mount this one. For some strange reason, I cannot have an uri-prefix in this one, and
mounting in the mounted sitemap, is again with respect to the main sitemap in the target dir,
so problems problems problems, for such basic stuff!

> It's a bit of a strange way to go about it
> though, I know. But I'd rather not try and manage my on Cocoon
> environment to this detail.
> 
> Cheers all, merry Christmas,
> Ollie
> 
> 
> -----Original Message-----
> From: Ard Schrijvers [mailto:a.schrijvers@hippo.nl]
> 
> Sent: Tuesday, 20 December 2005 4:17 a.m.
> To: users@cocoon.apache.org
> Subject: RE: JMS Listener invokes Cocoon pipeline (RE: How do 
> I create a
> context from a background task in cocoon?)
> 
> Hi, I eventually also got it running with a BackgroundEnvironment. I
> have not yet experienced the java.lang.OutOfMemory but this may merely
> be a result that it is not yet in production. At least I know 
> to test it
> now :-)
> 
> The way it now works for me, is to create a 
> BackgroundEnvironment, then
> lookup a SourceResolver, and use resolveUri.
> 
> 
> Probably, at the end, your also nicely releasing your evironment??
> 
> CocoonComponentManager.leaveEnvironment();
> CocoonComponentManager.endProcessing(env, key); if (processor 
> != null) {
>       manager.release(processor);
>   }
> 
> 
> And indeed, I don't want to use cron job this either (think I even
> needen the quartz block). It seems to me it is way to hard to do
> something with for example a class that acts on a JMS message 
> and wants
> to process a pipeline.
> 
> AS
> 
> 
> 
> >
> 
> >
> 
> > Hi, we've got a similar need to invoke Cocoon in the background:
> >
> 
> >
> 
> > We have a JMS Listener component configured to startup when Cocoon
> 
> > starts up (in cocoon.xconf). When its asynch onMessage() method is
> 
> > called, we want the method to then invoke a Cocoon 
> pipeline. We expect
> 
> > the JMS topic to be pushing a steady, reasonably constant supply of
> 
> > messages every few seconds or less, sometimes there will be spikes.
> 
> > What is the best way to implement this?
> >
> 
> > Our current implementation uses the BackgroundEnvironment class from
> 
> > the cron block that Sylvain Wallez mentions below. Unfortunately
> 
> > however, under our soak test the server collapses after 24 
> hours with
> 
> > a java.lang.OutOfMemory error.
> >
> 
> >
> 
> > One thing I can see I've probably done wrong is I fully 
> establish the
> 
> > Cocoon environment entirely within the onMessage() method, 
> every time.
> > That's a lot of work to do for EVERY message we get. So should I
> 
> > instead establish the BackgroundEnvironment (and lookup the
> 
> > SourceResolver) on initialisation of the Listener 
> component? Then the
> 
> > only work performed within onMessage is to call
> 
> > SourceResolver.resolveURI()?
> >
> 
> > If so, exactly how much setup should I do in initialise()? 
> Is it ok if
> 
> > it goes as far as:
> >
> 
> > ...
> > CocoonComponentManager.enterEnvironment(env, new
> 
> > WrapperComponentManager(this.manager), processor); this.resolver =
> 
> > (SourceResolver) this.manager.lookup(SourceResolver.ROLE);
> >
> 
> > Then in onMessage() I can simply call: src =
> 
> > this.resolver.resolveURI(uri);
> >
> 
> > At what point should I close down and clean up the
> 
> > BackgroudEnvironment?
> > In dispose()?
> >
> 
> > I'm a bit nervous using BackgroundEnvironment and
> 
> > CocoonComponentManager in this way - especially when the
> 
> > CocoonComponentManager javadoc says
> > 'WARNING: This is a "private" Cocoon core class - do NOT use this
> 
> > class directly'! I'm tempted to instead have the onMessage() method
> 
> > simply make an http request to the "proper" Cocoon environment on
> 
> > localhost:8080. It feels like it would be the safer way to 
> go. Then I
> 
> > can let the normal CocoonServlet look after the environment.
> > (Also note,
> > I'd rather not use the cron block).
> >
> 
> > Any advice? Thanks in advance,
> > Oliver Powell
> >
> 
> > -----Original Message-----
> > From: Sylvain Wallez [mailto:sylvain@apache.org]
> >
> 
> > Sent: Wednesday, 7 December 2005 10:26 a.m.
> > To: users@cocoon.apache.org
> > Subject: Re: How do I create a context from a background task in
> 
> > cocoon?
> >
> 
> > Ard Schrijvers wrote:
> > > Does anybody have experience with calling a pipeline from a
> > background
> > task resulting from an eventHandler?
> > >
> > > So, on an event, a java class is executed which implements
> > Contextualizable.
> > >
> > > I am trying something like
> > >
> > > import org.apache.avalon.framework.context.Contextualizable;
> > > import org.apache.avalon.framework.context.Context;
> > > import org.apache.avalon.framework.context.ContextException;
> > >
> > >     implements Contextualizable, ...
> > >
> > >     private Context context;
> > >
> > >     public void contextualize(Context context) throws
> > ContextException
> > {
> > >         this.context = context;
> > >
> > >     }
> > > PipelineUtil pipeUtil = new PipelineUtil(); try {
> > >     pipeUtil.contextualize(context);
> > >     pipeUtil.service(serviceManager);
> > >     pipeUtil.processToSAX(uri, null, somehandler); } catch
> > (Exception
> >
> 
> > > e) {
> > >     throw new CascadingRuntimeException("Cannot process
> > pipeline from
> >
> 
> > > '" + uri + "'", e); } finally {
> > >     pipeUtil.dispose();
> > > }
> > >
> > > Now, this does not work, because it does not have a
> > context, since the
> > class is not called from a sitemap but from an external event.
> > >
> > > So, I tried instead of with the context, the SourceResolver, like
> > >
> > > SourceResolver resolver = (SourceResolver)
> >
> 
> > > manager.lookup(SourceResolver.ROLE);
> > >
> > > and then something like
> > > Source inputSource =
> >
> 
> > >
> 
> > 
> resolver.resolveURI("cocoon://dasl/references/content/test/Passage.xml
> > > ");
> > >
> > > But, nothing happens, I suppose because the cocoon:// is only
> >
> 
> > > available when the call is initiated from a sitemap (or flow of
> >
> 
> > > course)
> > >
> > > So, does anybody know how to solve this/solved this before?
> > > 
> 
> >
> 
> >
> 
> > Yes. Running a Cocoon pipeline in a background task 
> requires to setup
> 
> > a "fake" environment so that the SourceResolver can do its job. You
> 
> > can achieve that either by using the scheduler (cron block) 
> to fire a
> 
> > job immediately, or directly use the BackgroundEnvironment 
> class that
> 
> > it uses under the hoods.
> >
> 
> > Sylvain
> >
> 
> > --
> >
> 
> > Sylvain Wallez                        Anyware Technologies
> > http://bluxte.net                     http://www.anyware-tech.com
> > Apache Software Foundation Member     Research & Technology Director
> >
> 
> >
> 
> > 
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
> > For additional commands, e-mail: users-help@cocoon.apache.org
> >
> 
> > 
> =====================================================================
> > CAUTION: This e-mail and any attachment(s) contains information that
> >
> 
> > is intended to be read only by the named recipient(s). It 
> may contain
> >
> 
> > information that is confidential, proprietary or the 
> subject of legal
> >
> 
> > privilege. This information is not to be used by any other person
> >
> 
> > and/or organisation. If you are not the intended recipient, please
> >
> 
> > advise us immediately and delete this e-mail from your 
> system. Do not
> >
> 
> > use any information contained in it.
> >
> 
> >
> 
> > ================================================================
> > For more information on the Television New Zealand Group, visit us
> >
> 
> > online at http://www.tvnz.co.nz
> >
> 
> > ================================================================
> >
> 
> > 
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
> > For additional commands, e-mail: users-help@cocoon.apache.org
> >
> 
> >
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
> For additional commands, e-mail: users-help@cocoon.apache.org
> 
> =====================================================================
> CAUTION: This e-mail and any attachment(s) contains information that
> 
> is intended to be read only by the named recipient(s). It may contain
> 
> information that is confidential, proprietary or the subject of legal
> 
> privilege. This information is not to be used by any other person
> 
> and/or organisation. If you are not the intended recipient, please
> 
> advise us immediately and delete this e-mail from your system. Do not
> 
> use any information contained in it.
> 
> 
> ================================================================
> For more information on the Television New Zealand Group, visit us
> 
> online at http://www.tvnz.co.nz
> 
> ================================================================
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
> For additional commands, e-mail: users-help@cocoon.apache.org
> 
> 

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


Mime
View raw message