Hi Marcel,

first of all, I notice a lot of people lately having more or less the same 
problem, including myself. I think it is way to hard in cocoon to call 
pipelines which were initiated from some background things. 

Anyway, think you should do something like:

Make your class Contextualizable (which you probably already did)


private org.apache.cocoon.environment.Context environmentContext;

public void contextualize(Context ctx) throws ContextException
    {
        this.environmentContext = (org.apache.cocoon.environment.Context) 
ctx.get(Constants.CONTEXT_ENVIRONMENT_CONTEXT);

    }

You will need 

import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.context.Contextualizable;

and 

import org.apache.cocoon.Constants;


Now, when you want the SourceResolver, do someting like:

              BackgroundEnvironment env = null;
            Processor processor = null;
            Object key = null;

            try
            {
                env = new BackgroundEnvironment(getLogger(), 
environmentContext);
                
                try {
                    processor = (Processor) manager.lookup(Processor.ROLE);
                } catch (ServiceException e) {
                    throw new CascadingRuntimeException("Couldn't look up the 
Processor",e);
                }

                env.startingProcessing();
                
                key = CocoonComponentManager.startProcessing(env);
                CocoonComponentManager.enterEnvironment(env, new 
WrapperComponentManager(manager), processor);
 
                SourceResolver resolver = null;
                try
                {
                     
                    resolver = (SourceResolver) 
manager.lookup(SourceResolver.ROLE);
  
                    Source inputSource = resolver.resolveURI("cocoon://foo");
                    InputStream sourceStream = inputSource.getInputStream();
                    try
                    {
                                // example what you could do with the 
inputStream 
                        DefaultHandler doHandler = new DefaultHandler();
                        SourceUtil.toSAX(inputSource, doHandler);
                                               
                    }
                    catch (ProcessingException e)
                    {
                        e.printStackTrace();
                    }
                    finally
                    {
                        sourceStream.close();
                    }
                }
                catch (ServiceException e2)
                {
                    // TODO Auto-generated catch block
                    e2.printStackTrace();
                }
                catch (MalformedURLException e1)
                {
                    e1.printStackTrace();
                }
                catch (IOException e1)
                {
                    e1.printStackTrace();
                }
                catch (SAXException e)
                {
                    e.printStackTrace();
                }
                finally
                {
                    if(resolver!=null)
                        manager.release(resolver);
                }
            

            }
            catch (MalformedURLException e)
            {

                e.printStackTrace();
            }
            finally
            {
                CocoonComponentManager.leaveEnvironment();
                CocoonComponentManager.endProcessing(env, key);
                if (processor != null) {
                    manager.release(processor);
                }
            }

Hope you can extract the parts you need,

AS



-----Original Message-----
From: Marcel Rouwenhorst [mailto:[EMAIL PROTECTED]
Posted At: zaterdag 24 december 2005 11:11
Posted To: Cocoon User List
Conversation: problems getting the BackgroundEnvironment working within a thread
Subject: problems getting the BackgroundEnvironment working within a thread


Hi,
 
I'm currently working on a mail daemon that sends mail from an oracle queue. (I 
don't want to use the cron block because it should be a continues thread in de 
background). I created a new daemon thread with the RunnableManager. This still 
works fine but when I want to call a pipeline with the SourceResolver from 
within the run method I get an exception that the cocoon protocol can't be 
used. 
 
I understood from some other mail in this mailing list that I should make a 
'fake' environment with the BackgroundEnvironment. I'm trying to create a new 
instance of this class but that fails because I need a context. If I implement 
Contextualizable I get a Context - an Avalon context - but this one is 
incompatible with context - a Cocoon environment context - that the 
BackgroundEnvironment needs. 
 
What am I doing wrong here? Any help is appreciated!
 
Thanks,
Marcel
 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]