org.picocontainer.gems.containers
Class Log4jTracingContainerDecorator

java.lang.Object
  extended by org.picocontainer.gems.containers.Log4jTracingContainerDecorator
All Implemented Interfaces:
java.io.Serializable, org.picocontainer.Disposable, org.picocontainer.MutablePicoContainer, org.picocontainer.PicoContainer, org.picocontainer.Startable

public class Log4jTracingContainerDecorator
extends java.lang.Object
implements org.picocontainer.MutablePicoContainer, java.io.Serializable

Decorates a MutablePicoContainer to provide extensive tracing capabilities for all function calls into the Picocontainers.

By default, this class uses org.picocontainer.PicoContainer as its logging category, however, this may be changed by providing the logger in its alternate constructor.

Start and Stop events are logged under info priority, as are all conditions where querying for an object returns a null object (e.g., getComponentAdapter(Object) returns null). All other functions use debug priority.

If used in nanocontainer, you can add wrap your PicoContainer with the Log4jTracingContainerDecorator: (Groovy Example)

                pico = builder.container(parent: parent) {
                        //component(.....)
                        //And others.
                }
 
                //Wrap the underlying NanoContainer with a Decorated Pico.
                pico = new org.picocontainer.gems.containers.Log4jTracingContainerDecorator (pico.getPico())
 

Since:
Version 1.3
Author:
Michael Rimov
See Also:
Serialized Form

Field Summary
private  org.picocontainer.MutablePicoContainer delegate
          Wrapped container.
private  org.apache.log4j.Logger logger
          Logger instance used for writing events.
 
Constructor Summary
Log4jTracingContainerDecorator(org.picocontainer.MutablePicoContainer delegate)
          Default typical wrapper that wraps another MutablePicoContainer.
Log4jTracingContainerDecorator(org.picocontainer.MutablePicoContainer delegate, org.apache.log4j.Logger logger)
          Alternate constructor that allows specification of the Logger to use.
 
Method Summary
 void accept(org.picocontainer.PicoVisitor visitor)
          
 boolean addChildContainer(org.picocontainer.PicoContainer child)
          
 void dispose()
          
 org.picocontainer.ComponentAdapter getComponentAdapter(java.lang.Object componentKey)
          
 org.picocontainer.ComponentAdapter getComponentAdapterOfType(java.lang.Class componentType)
          
 java.util.Collection getComponentAdapters()
          
 java.util.List getComponentAdaptersOfType(java.lang.Class componentType)
          
 java.lang.Object getComponentInstance(java.lang.Object componentKey)
          
 java.lang.Object getComponentInstanceOfType(java.lang.Class componentType)
          
 java.util.List getComponentInstances()
          
 java.util.List getComponentInstancesOfType(java.lang.Class componentType)
          
 org.apache.log4j.Logger getLoggerUsed()
          Retrieves the logger instance used by this decorator.
 org.picocontainer.PicoContainer getParent()
          
 org.picocontainer.MutablePicoContainer makeChildContainer()
          
protected  void onKeyDoesntExistInContainer(java.lang.Object componentKey, org.apache.log4j.Logger target)
          Standard message handling for cases when a null object is returned for a given key.
private  void readObject(java.io.ObjectInputStream s)
           
 org.picocontainer.ComponentAdapter registerComponent(org.picocontainer.ComponentAdapter componentAdapter)
          
 org.picocontainer.ComponentAdapter registerComponentImplementation(java.lang.Class componentImplementation)
          
 org.picocontainer.ComponentAdapter registerComponentImplementation(java.lang.Object componentKey, java.lang.Class componentImplementation)
          
 org.picocontainer.ComponentAdapter registerComponentImplementation(java.lang.Object componentKey, java.lang.Class componentImplementation, org.picocontainer.Parameter[] parameters)
          
 org.picocontainer.ComponentAdapter registerComponentInstance(java.lang.Object componentInstance)
          
 org.picocontainer.ComponentAdapter registerComponentInstance(java.lang.Object componentKey, java.lang.Object componentInstance)
          
 boolean removeChildContainer(org.picocontainer.PicoContainer child)
          
 void start()
          
 void stop()
          
 org.picocontainer.ComponentAdapter unregisterComponent(java.lang.Object componentKey)
          
 org.picocontainer.ComponentAdapter unregisterComponentByInstance(java.lang.Object componentInstance)
          
 void verify()
          Deprecated.  
private  void writeObject(java.io.ObjectOutputStream s)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

delegate

private final org.picocontainer.MutablePicoContainer delegate
Wrapped container.


logger

private transient org.apache.log4j.Logger logger
Logger instance used for writing events.

Constructor Detail

Log4jTracingContainerDecorator

public Log4jTracingContainerDecorator(org.picocontainer.MutablePicoContainer delegate)
Default typical wrapper that wraps another MutablePicoContainer.

Parameters:
delegate - Container to be decorated.
Throws:
java.lang.NullPointerException - if delegate is null.

Log4jTracingContainerDecorator

public Log4jTracingContainerDecorator(org.picocontainer.MutablePicoContainer delegate,
                                      org.apache.log4j.Logger logger)
Alternate constructor that allows specification of the Logger to use.

Parameters:
delegate - Container to be decorated.
logger - specific Log4j Logger to use.
Throws:
java.lang.NullPointerException - if delegate or logger is null.
Method Detail

onKeyDoesntExistInContainer

protected void onKeyDoesntExistInContainer(java.lang.Object componentKey,
                                           org.apache.log4j.Logger target)
Standard message handling for cases when a null object is returned for a given key.

Parameters:
componentKey -
target -

accept

public void accept(org.picocontainer.PicoVisitor visitor)

Specified by:
accept in interface org.picocontainer.PicoContainer
Parameters:
visitor -
See Also:
PicoContainer.accept(org.picocontainer.PicoVisitor)

addChildContainer

public boolean addChildContainer(org.picocontainer.PicoContainer child)

Specified by:
addChildContainer in interface org.picocontainer.MutablePicoContainer
Parameters:
child -
Returns:
See Also:
MutablePicoContainer.addChildContainer(org.picocontainer.PicoContainer)

dispose

public void dispose()

Specified by:
dispose in interface org.picocontainer.Disposable
See Also:
Disposable.dispose()

getComponentAdapter

public org.picocontainer.ComponentAdapter getComponentAdapter(java.lang.Object componentKey)

Specified by:
getComponentAdapter in interface org.picocontainer.PicoContainer
Parameters:
componentKey -
Returns:
See Also:
PicoContainer.getComponentAdapter(java.lang.Object)

getComponentAdapterOfType

public org.picocontainer.ComponentAdapter getComponentAdapterOfType(java.lang.Class componentType)

Specified by:
getComponentAdapterOfType in interface org.picocontainer.PicoContainer
Parameters:
componentType -
Returns:
ComponentAdapter or null.
See Also:
PicoContainer.getComponentAdapterOfType(java.lang.Class)

getComponentAdapters

public java.util.Collection getComponentAdapters()

Specified by:
getComponentAdapters in interface org.picocontainer.PicoContainer
Returns:
Collection or null.
See Also:
PicoContainer.getComponentAdapters()

getComponentAdaptersOfType

public java.util.List getComponentAdaptersOfType(java.lang.Class componentType)

Specified by:
getComponentAdaptersOfType in interface org.picocontainer.PicoContainer
Parameters:
componentType -
Returns:
List of ComponentAdapters
See Also:
PicoContainer.getComponentAdaptersOfType(java.lang.Class)

getComponentInstance

public java.lang.Object getComponentInstance(java.lang.Object componentKey)

Specified by:
getComponentInstance in interface org.picocontainer.PicoContainer
Parameters:
componentKey -
Returns:
See Also:
PicoContainer.getComponentInstance(java.lang.Object)

getComponentInstanceOfType

public java.lang.Object getComponentInstanceOfType(java.lang.Class componentType)

Specified by:
getComponentInstanceOfType in interface org.picocontainer.PicoContainer
Parameters:
componentType -
Returns:
See Also:
PicoContainer.getComponentInstanceOfType(java.lang.Class)

getComponentInstances

public java.util.List getComponentInstances()

Specified by:
getComponentInstances in interface org.picocontainer.PicoContainer
Returns:
See Also:
PicoContainer.getComponentInstances()

getComponentInstancesOfType

public java.util.List getComponentInstancesOfType(java.lang.Class componentType)

Specified by:
getComponentInstancesOfType in interface org.picocontainer.PicoContainer
Parameters:
componentType -
Returns:
See Also:
PicoContainer.getComponentInstancesOfType(java.lang.Class)

getParent

public org.picocontainer.PicoContainer getParent()

Specified by:
getParent in interface org.picocontainer.PicoContainer
Returns:
See Also:
PicoContainer.getParent()

makeChildContainer

public org.picocontainer.MutablePicoContainer makeChildContainer()

Specified by:
makeChildContainer in interface org.picocontainer.MutablePicoContainer
Returns:
See Also:
MutablePicoContainer.makeChildContainer()

registerComponent

public org.picocontainer.ComponentAdapter registerComponent(org.picocontainer.ComponentAdapter componentAdapter)

Specified by:
registerComponent in interface org.picocontainer.MutablePicoContainer
Parameters:
componentAdapter -
Returns:
See Also:
MutablePicoContainer.registerComponent(org.picocontainer.ComponentAdapter)

registerComponentImplementation

public org.picocontainer.ComponentAdapter registerComponentImplementation(java.lang.Class componentImplementation)

Specified by:
registerComponentImplementation in interface org.picocontainer.MutablePicoContainer
Parameters:
componentImplementation -
Returns:
See Also:
MutablePicoContainer.registerComponentImplementation(java.lang.Class)

registerComponentImplementation

public org.picocontainer.ComponentAdapter registerComponentImplementation(java.lang.Object componentKey,
                                                                          java.lang.Class componentImplementation,
                                                                          org.picocontainer.Parameter[] parameters)

Specified by:
registerComponentImplementation in interface org.picocontainer.MutablePicoContainer
Parameters:
componentKey -
componentImplementation -
parameters -
Returns:
See Also:
MutablePicoContainer.registerComponentImplementation(java.lang.Object, java.lang.Class, org.picocontainer.Parameter[])

registerComponentImplementation

public org.picocontainer.ComponentAdapter registerComponentImplementation(java.lang.Object componentKey,
                                                                          java.lang.Class componentImplementation)

Specified by:
registerComponentImplementation in interface org.picocontainer.MutablePicoContainer
Parameters:
componentKey -
componentImplementation -
Returns:
See Also:
MutablePicoContainer.registerComponentImplementation(java.lang.Object, java.lang.Class)

registerComponentInstance

public org.picocontainer.ComponentAdapter registerComponentInstance(java.lang.Object componentKey,
                                                                    java.lang.Object componentInstance)

Specified by:
registerComponentInstance in interface org.picocontainer.MutablePicoContainer
Parameters:
componentKey -
componentInstance -
Returns:
See Also:
MutablePicoContainer.registerComponentInstance(java.lang.Object, java.lang.Object)

registerComponentInstance

public org.picocontainer.ComponentAdapter registerComponentInstance(java.lang.Object componentInstance)

Specified by:
registerComponentInstance in interface org.picocontainer.MutablePicoContainer
Parameters:
componentInstance -
Returns:
See Also:
MutablePicoContainer.registerComponentInstance(java.lang.Object)

removeChildContainer

public boolean removeChildContainer(org.picocontainer.PicoContainer child)

Specified by:
removeChildContainer in interface org.picocontainer.MutablePicoContainer
Parameters:
child -
Returns:
See Also:
MutablePicoContainer.removeChildContainer(org.picocontainer.PicoContainer)

start

public void start()

Specified by:
start in interface org.picocontainer.Startable
See Also:
Startable.start()

stop

public void stop()

Specified by:
stop in interface org.picocontainer.Startable
See Also:
Startable.stop()

unregisterComponent

public org.picocontainer.ComponentAdapter unregisterComponent(java.lang.Object componentKey)

Specified by:
unregisterComponent in interface org.picocontainer.MutablePicoContainer
Parameters:
componentKey -
Returns:
See Also:
MutablePicoContainer.unregisterComponent(java.lang.Object)

unregisterComponentByInstance

public org.picocontainer.ComponentAdapter unregisterComponentByInstance(java.lang.Object componentInstance)

Specified by:
unregisterComponentByInstance in interface org.picocontainer.MutablePicoContainer
Parameters:
componentInstance -
Returns:
See Also:
MutablePicoContainer.unregisterComponentByInstance(java.lang.Object)

verify

public void verify()
            throws org.picocontainer.PicoVerificationException
Deprecated. 

Specified by:
verify in interface org.picocontainer.PicoContainer
Throws:
org.picocontainer.PicoVerificationException
See Also:
PicoContainer.verify()

getLoggerUsed

public org.apache.log4j.Logger getLoggerUsed()
Retrieves the logger instance used by this decorator.

Returns:
Logger instance.

readObject

private void readObject(java.io.ObjectInputStream s)
                 throws java.io.IOException,
                        java.lang.ClassNotFoundException
Throws:
java.io.IOException
java.lang.ClassNotFoundException

writeObject

private void writeObject(java.io.ObjectOutputStream s)
                  throws java.io.IOException
Throws:
java.io.IOException