Re: AW: variable dependencies on Components

"Raffael Herzog" <[email protected]>
Newsgroups gmane.comp.jakarta.avalon.user
Organization Organised? Me?
Message-ID <[email protected]>
Am Tue, 24 Aug 2004 13:29:01 +0200 schrieb Steinkamp Andre  
<[email protected]>:

> MyComponent now can get the dep1 and dep2 from the ServiceManager, but  
> what if i want a user to edit the block.xml and not the source code and  
> the .xinfo files? so he can add a new Component from MyService and  
> declare a new dependency with key="dep3". but in the service method from  
> MyComponent this dependency will never be fulfilled. so there is no  
> chance to style it variable!?

Ah, OK, now I see what you want to do. You can't use Serviceable anymore  
in that case. Look at the dynamics tutorial or simply at the following  
code, where I dynamically resolve a renderer that renders an e-mail body.  
Some notes: rendererPaths is taken from the configuration, container is  
taken from the context (key: urn:composition:containment.model type:  
org.apache.avalon.composition.model.ContainmentModel). My mail client will  
unfortunately break the formatting of the code for those using clients  
that don't support format=flowed.

rendererPath = rendererPaths[i].trim();
if ( log.isDebugEnabled() ) {
     log.debug("resolving renderer: "+rendererPath);
}
ReferenceDescriptor rdesc = new  
ReferenceDescriptor(BodyRenderer.class.getName(),
                                                     new Version(1, 0, 0));
DeploymentModel model = container.getModel(rendererPath);
if ( model == null ) {
     throw new MailerException("Configuration error: No component found at  
path "+rendererPath);
}
if ( ! model.isaCandidate(rdesc) ) {
     throw new MailerException("Configuration error: Component at path  
"+rendererPath+" doesn't match "+rdesc);
}
BodyRenderer renderer = null;
try {
     try {
         renderer = (BodyRenderer)model.resolve();
         if ( log.isDebugEnabled() ) {
             log.debug("Renderer "+rendererPath+" resolved to "+renderer);
         }
     }
     catch ( Exception exc ) {
         throw new MailerException("Unable to resolve component at path  
"+rendererPath, exc);
     }
     // body rendering, mail sending, etc.
}
finally {
     if ( renderer != null ) {
         if ( log.isDebugEnabled() ) {
             log.debug("Releasing renderer: "+rendererPath+"  
("+renderer+")");
         }
         model.release(renderer);
     }
}


cu & HTH,
    Raffi

-- 
The difference between theory and practice is that in theory, there is no  
difference, but in practice, there is.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.