Date: 2004-10-19T04:51:50
   Editor: KurtHoehn <[EMAIL PROTECTED]>
   Wiki: Jakarta HiveMind Wiki
   Page: PluggingIntoStruts
   URL: http://wiki.apache.org/jakarta-hivemind/PluggingIntoStruts

   no comment

New Page:

= Plugging into Struts =
!HiveMind does offer a servlet filter for initializing the registry but if your 
servlet engine does not support filters or you want to control the registry 
from Struts then a plugin is the way to go.  This is not an example of how to 
configure !HiveMind but how to configure a plugin to use !HiveMind.  It's a 
quick and easy way to get !HiveMind into your Struts application.

= The Interface (StrutsHive.java) =

{{{
public interface StrutsHive
{
    public static final String STRUTSHIVE_REGISTRY = 
"org.apache.struts.hivemind.STRUTSHIVE_REGISTRY";

    Object lookup( String name, Class type );
    Object lookup( Class type );

    List getConfiguration( String configuration );
    void cleanupThread();
}
}}}

= The PlugIn (StrutsHivePlugIn.java) =
{{{
public class StrutsHivePlugIn implements StrutsHive, PlugIn
{
    private static final Log _log = LogFactory.getLog( StrutsHivePlugIn.class );

    private Registry _registry;
    private String _errorHandler;
    private String _classResolver;

    private String _language;
    private String _country = "";
    private String _variant = "";

    public void setLanguage(String language)
    {
        this._language = language;
    }

    public void setCountry(String country)
    {
        this._country = country;
    }

    public void setVariant(String variant)
    {
        this._variant = variant;
    }

    public void setErrorHandler( String errorHandler )
    {
        _errorHandler = errorHandler;
    }

    public void setClassResolver( String classResolver )
    {
        _classResolver = classResolver;
    }

    public void init(ActionServlet actionServlet, ModuleConfig moduleConfig) 
throws ServletException
    {
        ClassResolver resolver;
        RegistryBuilder builder;

        if( _log.isDebugEnabled() )
        {
            _log.debug("Initializing StrutsHivePlugIn.");
        }

        if( _classResolver == null )
        {
            if( _log.isDebugEnabled() )
            {
                _log.debug( "No class resolver was defined using HiveMinds 
default class resolver." );
            }

            resolver = new DefaultClassResolver();
        }
        else
        {
            try
            {
                resolver = initializeClassResolver();
            }
            catch( Exception e )
            {
                throw new ServletException( e.getMessage() );
            }
        }

        if( _errorHandler == null  )
        {
            builder = new RegistryBuilder();
        }
        else
        {
            try
            {
                ErrorHandler errorHandler = initializeErrorHandler();
                builder = new RegistryBuilder( errorHandler );
            }
            catch( Exception e )
            {
                throw new ServletException( e.getMessage() );
            }
        }

        builder.processModules( resolver );
        _registry = builder.constructRegistry( getLocale() );
        actionServlet.getServletContext().setAttribute( STRUTSHIVE_REGISTRY, 
this );

        if( _log.isDebugEnabled() )
        {
            _log.debug("StrutsHivePlugIn initialized.");
        }
    }

    public Object lookup( String name, Class type )
    {
        if( _registry.containsService( name, type ) )
        {
            return _registry.getService( name, type );
        }

        throw new IllegalArgumentException( type.getName() + " service was not 
found in the registry");
    }

    public Object lookup( Class type )
    {
        if( _registry.containsService( type ) )
        {
            return _registry.getService( type );
        }

        throw new IllegalArgumentException( type.getName() + " service was not 
found in the registry");
    }

    public List getConfiguration( String configuration )
    {
        if( _registry.containsConfiguration( configuration ) )
        {
            return _registry.getConfiguration( configuration );
        }

        throw new IllegalArgumentException( configuration + " configuration was 
not found in the registry");
    }

    public void cleanupThread()
    {
        _registry.cleanupThread();
    }

    public void destroy()
    {
        if( _log.isDebugEnabled() )
        {
            _log.debug("Shutting down StrutsHivePlugIn");
        }

        _registry.shutdown();
    }

    protected Locale getLocale()
    {
        if( _language != null )
        {
            return new Locale( _language, _country, _variant );
        }
        else
        {
            return Locale.getDefault();
        }
    }

    protected ErrorHandler initializeErrorHandler() throws Exception
    {
        Thread thread = Thread.currentThread();
        ClassLoader loader = thread.getContextClassLoader();
        Class clazz =  loader.loadClass( _errorHandler);
        return (ErrorHandler) clazz.newInstance();
    }

    protected ClassResolver initializeClassResolver() throws Exception
    {
        Thread thread = Thread.currentThread();
        ClassLoader loader = thread.getContextClassLoader();
        Class clazz =  loader.loadClass( _classResolver);
        return (ClassResolver) clazz.newInstance();
    }
}
}}}

= Configuration (struts-config.xml) =
The plugin has multiple set-properties but all are optional

|| Property || Optional || Description ||
|| language ||<:> Y || define a locale different from the default ||
|| country ||<:> Y ||  used in conjunction with the language property but not 
mandatory ||
|| variant ||<:> Y || used in conjunction with the country property but not 
mandatory ||
|| errorHandler ||<:> Y || include your own !HiveMind error handler ||
|| classResolver ||<:> Y || include your own !HiveMind class resolver ||

{{{
    <plug-in className="<your package name goes here>.StrutsHivePlugIn">
        <set-property property="language" value="en"/>
    </plug-in>
}}}

= Using it in your application =
{{{

public MyAction extends Action
{
    ...

    public Object getService( String service, Class type )
    {
        StrutsHive hive = (StrutsHive) 
getServlet().getServletContext().getAttribute( StrutsHive.STRUTSHIVE_REGISTRY );
        return hive.lookup( service, type );
    }

    ...
}
}}}

= Conclusion =
Not much to talk about here but if you want to use it, go nuts! If you have 
improvements let me know or add to the Wiki.

Contributed by KurtHoehn

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

Reply via email to