public Object lookup()

in src/java/org/apache/fulcrum/yaafi/framework/container/ServiceContainerImpl.java [652:725]


    public Object lookup(String name) throws ServiceException
    {
        Validate.notEmpty( name, "name" );

        Object result = null;
        ServiceComponent serviceManagerComponent;

        if (this.isAlreadyDisposed())
        {
            String msg = "The container is disposed an no services are available";
            this.getLogger().error( msg );
            throw new ServiceException( name, msg );
        }

        serviceLock.lock();
        try
        {
            // 1) check our local services
            serviceManagerComponent = this.getLocalServiceComponent( name );

            if (serviceManagerComponent != null)
            {
                result = serviceManagerComponent.getInstance();

                if (result != null && this.getLogger().isDebugEnabled())
                {
                    String msg = "Located the service '" + name + "' in the local container";
                    this.getLogger().debug( msg );
                }
            }

            // 2) look at fallback service managers
            if (result == null)
            {
                result = this.getFallbackService( name );
            }
        } catch (ServiceException e)
        {
            String msg = "Failed to lookup a service " + name;
            this.getLogger().error( msg, e );
            throw e;
        } catch (Throwable t)
        {
            String msg = "Failed to lookup a service " + name;
            this.getLogger().error( msg, t );
            throw new ServiceException( name, msg, t );
        } finally
        {
            serviceLock.unlock();
        }

        // 3) if we haven't found anything ask the parent ServiceManager
        if (result == null && this.hasParentServiceManager())
        {
            result = this.getParentServiceManager().lookup( name );

            if (result != null && this.getLogger().isDebugEnabled())
            {
                String msg = "Located the service '" + name + "' using the parent service manager";
                this.getLogger().debug( msg );
            }
        }

        // if we still haven't found anything then complain

        if (result == null)
        {
            String msg = "The following component does not exist : " + name;
            this.getLogger().error( msg );
            throw new ServiceException( AvalonYaafiConstants.AVALON_CONTAINER_YAAFI, name );
        }

        return result;
    }