You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by ni...@apache.org on 2015/07/06 15:05:41 UTC

[3/5] zest-qi4j git commit: Removed CXF Removed Struts Upgraded to Spring 4.1.7

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/EntityCompositeConverter.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/EntityCompositeConverter.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/EntityCompositeConverter.java
deleted file mode 100644
index 017489a..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/EntityCompositeConverter.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2;
-
-import com.opensymphony.xwork2.inject.Inject;
-import java.util.Map;
-import org.apache.struts2.util.StrutsTypeConverter;
-import org.qi4j.api.entity.EntityComposite;
-import org.qi4j.api.unitofwork.UnitOfWork;
-import org.qi4j.api.unitofwork.UnitOfWorkFactory;
-
-/**
- * <p>Converts Strings to entities and entities to strings.</p>
- *
- * <p>To convert from a string to an entity the value passed in is expected to be an identity.  The identity can
- * be either a fully qualified identity, e.g org.qi4j.example.Person:368e27f0-ea39-497a-9069-ffb5f41bf174-0, or it can
- * be just the uuid.</p>
- *
- * <p>Conversion to a String is done using the EntityComposites identity and and returning just the uuid portion.</p>
- */
-public class EntityCompositeConverter
-    extends StrutsTypeConverter
-{
-    private UnitOfWorkFactory uowf;
-
-    @Inject
-    public void setUnitOfWorkFactory( UnitOfWorkFactory uowf )
-    {
-        this.uowf = uowf;
-    }
-
-    @Override
-    public Object convertFromString( Map context, String[] values, Class toClass )
-    {
-        String identity = extractIdentity( values );
-        UnitOfWork uow = uowf.currentUnitOfWork();
-        return uow.get( toClass, identity );
-    }
-
-    @Override
-    public String convertToString( Map context, Object o )
-    {
-        return ( (EntityComposite) o ).identity().get();
-    }
-
-    private String extractIdentity( String[] values )
-    {
-        String identity = values[ 0 ];
-        int separatorIndex = identity.indexOf( ':' );
-        if( separatorIndex == -1 )
-        {
-            return identity;
-        }
-        return identity = identity.substring( separatorIndex + 1 );
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jApplicationBootstrapListener.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jApplicationBootstrapListener.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jApplicationBootstrapListener.java
deleted file mode 100644
index ee9cb9e..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jApplicationBootstrapListener.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*  Copyright 2008 Edward Yakop.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.qi4j.library.struts2;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-import org.qi4j.api.structure.Application;
-import org.qi4j.api.structure.Module;
-import org.qi4j.bootstrap.ApplicationAssembler;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.Energy4Java;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.qi4j.library.struts2.Constants.SERVLET_ATTRIBUTE;
-
-public abstract class Qi4jApplicationBootstrapListener
-    implements ServletContextListener
-{
-    private static final Logger LOG = LoggerFactory.getLogger( Qi4jApplicationBootstrapListener.class );
-
-    private Application application;
-
-    @Override
-    public final void contextInitialized( ServletContextEvent sce )
-    {
-        LOG.info( "Qi4j Plugin: Initializing" );
-
-        ServletContext context = sce.getServletContext();
-        application = createNewApplication( context );
-
-        if( application != null )
-        {
-            Module module = qi4jStrutsModule( application );
-            context.setAttribute( SERVLET_ATTRIBUTE, module );
-
-            try
-            {
-                application.activate();
-            }
-            catch( Exception e )
-            {
-                throw new IllegalStateException( e );
-            }
-        }
-        else
-        {
-            throw new IllegalStateException( "None of the assembly creation methods returned a non-null assembler" );
-        }
-        LOG.info( "... initialized qi4j-struts integration successfully" );
-    }
-
-    /**
-     * @param application Qi4j application.
-     *
-     * @return Qi4j struts module.
-     */
-    protected abstract Module qi4jStrutsModule( Application application );
-
-    private Application createNewApplication( ServletContext context )
-    {
-        Energy4Java qi4j = new Energy4Java();
-
-        // Try create assembler
-        final ApplicationAssembler assembler = createAssembler();
-        if( assembler != null )
-        {
-            try
-            {
-                return qi4j.newApplication( assembler );
-            }
-            catch( AssemblyException e )
-            {
-                throw new IllegalStateException( e );
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Override this method to create an application assembler.
-     *
-     * @return An application assembler.
-     */
-    protected ApplicationAssembler createAssembler()
-    {
-        return null;
-    }
-
-    @Override
-    public final void contextDestroyed( ServletContextEvent sce )
-    {
-        try
-        {
-            application.passivate();
-        }
-        catch( Exception e )
-        {
-            throw new IllegalStateException( e );
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jFilterDispatcher.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jFilterDispatcher.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jFilterDispatcher.java
deleted file mode 100644
index 72da0a1..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jFilterDispatcher.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2;
-
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.config.ConfigurationManager;
-import com.opensymphony.xwork2.config.ContainerProvider;
-import com.opensymphony.xwork2.inject.ContainerBuilder;
-import com.opensymphony.xwork2.inject.Context;
-import com.opensymphony.xwork2.inject.Factory;
-import com.opensymphony.xwork2.util.location.LocatableProperties;
-import javax.servlet.FilterConfig;
-import org.apache.struts2.config.BeanSelectionProvider;
-import org.apache.struts2.dispatcher.Dispatcher;
-import org.apache.struts2.dispatcher.FilterDispatcher;
-import org.qi4j.api.composite.TransientBuilderFactory;
-import org.qi4j.api.object.ObjectFactory;
-import org.qi4j.api.structure.Module;
-import org.qi4j.api.unitofwork.UnitOfWorkFactory;
-
-import static org.qi4j.library.struts2.Constants.SERVLET_ATTRIBUTE;
-
-public class Qi4jFilterDispatcher
-    extends FilterDispatcher
-{
-    @Override
-    protected Dispatcher createDispatcher( final FilterConfig filterConfig )
-    {
-        Dispatcher dispatcher = super.createDispatcher( filterConfig );
-        ConfigurationManager configurationManager = createConfigurationManager( filterConfig );
-        dispatcher.setConfigurationManager( configurationManager );
-        return dispatcher;
-    }
-
-    protected ConfigurationManager createConfigurationManager( FilterConfig filterConfig )
-    {
-        ConfigurationManager configurationManager = new ConfigurationManager( BeanSelectionProvider.DEFAULT_BEAN_NAME );
-        configurationManager.addContainerProvider( new Qi4jContainerProvider( module( filterConfig ) ) );
-        return configurationManager;
-    }
-
-    private Module module( FilterConfig filterConfig )
-    {
-        return (Module) filterConfig.getServletContext().getAttribute( SERVLET_ATTRIBUTE );
-    }
-
-    class Qi4jContainerProvider
-        implements ContainerProvider
-    {
-        private final Module module;
-        private boolean registered = false;
-
-        Qi4jContainerProvider( Module aModule )
-        {
-            module = aModule;
-        }
-
-        @Override
-        public void register( ContainerBuilder builder, LocatableProperties props )
-            throws ConfigurationException
-        {
-            factory( builder, UnitOfWorkFactory.class, module );
-            factory( builder, ObjectFactory.class, module );
-            factory( builder, TransientBuilderFactory.class, module );
-            factory( builder, ActionConfiguration.class, actionConfiguration() );
-            registered = true;
-        }
-
-        @Override
-        public boolean needsReload()
-        {
-            return !registered;
-        }
-
-        @Override
-        public void init( Configuration configuration )
-            throws ConfigurationException
-        {
-        }
-
-        @Override
-        public void destroy()
-        {
-        }
-
-        private <T> void factory( ContainerBuilder builder, Class<T> type, final T value )
-        {
-            builder.factory( type, new Factory<T>()
-            {
-                @Override
-                public T create( Context context )
-                {
-                    return value;
-                }
-            } );
-        }
-
-        private ActionConfiguration actionConfiguration()
-        {
-            return module.findService( ActionService.class ).metaInfo( ActionConfiguration.class );
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jObjectFactory.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jObjectFactory.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jObjectFactory.java
deleted file mode 100644
index 42fd19b..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jObjectFactory.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*  Copyright 2008 Edward Yakop.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.qi4j.library.struts2;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.inject.Inject;
-import java.util.HashMap;
-import java.util.Map;
-import org.apache.struts2.util.ObjectFactoryDestroyable;
-import org.qi4j.api.common.ConstructionException;
-import org.qi4j.api.composite.NoSuchTransientException;
-import org.qi4j.api.composite.TransientBuilderFactory;
-import org.qi4j.api.object.NoSuchObjectException;
-import org.qi4j.api.object.ObjectFactory;
-
-import static org.qi4j.library.struts2.Qi4jObjectFactory.ClassType.*;
-
-/**
- * Qi4j implementation of struts object factory.
- */
-public class Qi4jObjectFactory
-    extends com.opensymphony.xwork2.ObjectFactory
-    implements ObjectFactoryDestroyable
-{
-    private static final long serialVersionUID = 1L;
-
-    static enum ClassType
-    {
-        qi4jComposite,
-        qi4jObject,
-        object
-    }
-
-    private final Map<Class, ClassType> types;
-
-    private ObjectFactory objectFactory;
-    private TransientBuilderFactory compositeBuilderFactory;
-
-    public Qi4jObjectFactory()
-    {
-        types = new HashMap<Class, ClassType>();
-    }
-
-    @Inject
-    public void setObjectFactory( ObjectFactory objectFactory )
-    {
-        this.objectFactory = objectFactory;
-    }
-
-    @Inject
-    public void setCompositeBuilderFactory( TransientBuilderFactory compositeBuilderFactory )
-    {
-        this.compositeBuilderFactory = compositeBuilderFactory;
-    }
-
-    /**
-     * Build a generic Java object of the given type.
-     *
-     * @param classType    Type of Object to build
-     * @param extraContext A map of extra context which uses the same keys as the {@link ActionContext}
-     */
-    @Override
-    @SuppressWarnings( "unchecked" )
-    public Object buildBean( Class classType, Map extraContext )
-        throws Exception
-    {
-        // TODO: What to do with extraContext
-
-        ClassType type = types.get( classType );
-        if( type != null )
-        {
-            switch( type )
-            {
-            case object:
-                return createStandardObject( classType, false );
-            case qi4jComposite:
-                return createQi4jComposite( classType, false );
-            case qi4jObject:
-                return createQi4jObject( classType, false );
-            }
-        }
-
-        // Figure out what kind of object is this.
-        Object object = createQi4jComposite( classType, true );
-        if( object == null )
-        {
-            object = createQi4jObject( classType, true );
-
-            if( object == null )
-            {
-                object = createStandardObject( classType, true );
-            }
-        }
-
-        return object;
-    }
-
-    private Object createStandardObject( Class aClass, boolean isAddToTypes )
-        throws Exception
-    {
-        Object obj = null;
-        Exception exception = null;
-        try
-        {
-            obj = aClass.newInstance();
-        }
-        catch( InstantiationException e )
-        {
-            exception = e;
-        }
-        catch( IllegalAccessException e )
-        {
-            exception = e;
-        }
-
-        if( isAddToTypes )
-        {
-            addToType( aClass, object );
-        }
-
-        if( exception != null )
-        {
-            throw exception;
-        }
-
-        return obj;
-    }
-
-    @SuppressWarnings( "unchecked" )
-    private Object createQi4jObject( Class aClass, boolean isAddToTypes )
-    {
-        if( objectFactory == null )
-        {
-            return null;
-        }
-
-        ConstructionException exception = null;
-        Object obj = null;
-
-        try
-        {
-            obj = objectFactory.newObject( aClass );
-        }
-        catch( NoSuchObjectException e )
-        {
-            return null;
-        }
-        catch( ConstructionException e )
-        {
-            exception = e;
-        }
-
-        if( isAddToTypes )
-        {
-            addToType( aClass, qi4jObject );
-        }
-
-        if( exception != null )
-        {
-            throw exception;
-        }
-
-        return obj;
-    }
-
-    @SuppressWarnings( "unchecked" )
-    private Object createQi4jComposite( Class aClass, boolean isAddToTypes )
-    {
-        if( compositeBuilderFactory == null )
-        {
-            return null;
-        }
-
-        Object obj = null;
-        ConstructionException exception = null;
-
-        try
-        {
-            obj = compositeBuilderFactory.newTransient( aClass );
-        }
-        catch( NoSuchTransientException e )
-        {
-            return null;
-        }
-        catch( ConstructionException e )
-        {
-            exception = e;
-        }
-
-        if( isAddToTypes )
-        {
-            addToType( aClass, qi4jComposite );
-        }
-
-        if( exception != null )
-        {
-            throw exception;
-        }
-
-        return obj;
-    }
-
-    private void addToType( Class aClass, ClassType aClassType )
-    {
-        synchronized( types )
-        {
-            types.put( aClass, aClassType );
-        }
-    }
-
-    /**
-     * Allows for ObjectFactory implementations that support Actions without no-arg constructors.
-     *
-     * @return {@code false}.
-     */
-    @Override
-    public boolean isNoArgConstructorRequired()
-    {
-        return false;
-    }
-
-    @Override
-    public final void destroy()
-    {
-        types.clear();
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jPropertyAccessor.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jPropertyAccessor.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jPropertyAccessor.java
deleted file mode 100644
index 9cee45c..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jPropertyAccessor.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import ognl.MethodFailedException;
-import ognl.ObjectMethodAccessor;
-import ognl.ObjectPropertyAccessor;
-import ognl.OgnlContext;
-import ognl.OgnlException;
-import ognl.OgnlRuntime;
-import org.qi4j.api.Qi4j;
-import org.qi4j.api.association.Association;
-import org.qi4j.api.association.ManyAssociation;
-import org.qi4j.api.association.NamedAssociation;
-import org.qi4j.api.constraint.ConstraintViolation;
-import org.qi4j.api.constraint.ConstraintViolationException;
-import org.qi4j.api.injection.scope.Structure;
-import org.qi4j.api.property.Property;
-import org.qi4j.library.struts2.ConstraintViolationInterceptor.FieldConstraintViolations;
-
-import static com.opensymphony.xwork2.conversion.impl.XWorkConverter.CONVERSION_PROPERTY_FULLNAME;
-import static ognl.OgnlRuntime.getConvertedType;
-import static ognl.OgnlRuntime.getFieldValue;
-import static org.qi4j.library.struts2.ConstraintViolationInterceptor.CONTEXT_CONSTRAINT_VIOLATIONS;
-
-/**
- * <p>An implementation of the ObjectPropertyAccessor that provides conversion for Qi4j properties.  The typical way that
- * OGNL gets/sets object attributes is by finding the corresponding JavaBean getter/setter methods.  This
- * ObjectPropertyAccessor checks if there is a Qi4j property on the Composite and if there is uses the properties
- * get/set methods.</p>
- *
- * <p>When setting Property values, if a ConstraintViolationException is thrown it is added to the context so that
- * it can be processed and by the ConstraintViolationInterceptor, similar to how conversion exceptions are handled by
- * the ConversionErrorInterceptor</p>
- *
- * <p>When setting Association values, we attempt to convert the value to the association type using the normal XWork
- * converter mechanisms.  If the type is an EntityComposite, we already have a converter registered
- * {@link EntityCompositeConverter} to handle conversion from a string identity to an object.  If the type is not an
- * EntityComposite, but the actual values are EntityComposites, you can register the {@link EntityCompositeConverter}
- * for your type in your xwork-conversion.properties file.</p>
- *
- * <p>NOTE: We can't do this as a regular converter because Qi4j composites doesn't (nor should it be) following the
- * JavaBean standard.  We might be able to only override the getProperty() method here and have regular converters for
- * Property, Association and SetAssociation but I haven't tried that yet so it may not work as expected.</p>
- *
- * <p>TODO: Doesn't yet handle ManyAssociations, but these shouldn't be too hard to add</p>
- */
-public class Qi4jPropertyAccessor
-    extends ObjectPropertyAccessor
-{
-    private static final Object[] BLANK_ARGUMENTS = new Object[0];
-
-    private final ObjectMethodAccessor methodAccessor = new ObjectMethodAccessor();
-
-    @Structure
-    Qi4j api;
-
-    @Override
-    public final Object getProperty( Map aContext, Object aTarget, Object aPropertyName )
-        throws OgnlException
-    {
-        String fieldName = aPropertyName.toString();
-        Object qi4jField = getQi4jField( aContext, aTarget, fieldName );
-        if( qi4jField != null )
-        {
-            Class<?> memberClass = qi4jField.getClass();
-            if( Property.class.isAssignableFrom( memberClass ) )
-            {
-                Property<?> property = (Property) qi4jField;
-                return property.get();
-            }
-            else if( Association.class.isAssignableFrom( memberClass ) )
-            {
-                Association<?> association = (Association) qi4jField;
-                return association.get();
-            }
-            else if( ManyAssociation.class.isAssignableFrom( memberClass ) )
-            {
-                return qi4jField;
-            }
-            else if( NamedAssociation.class.isAssignableFrom( memberClass ) )
-            {
-                return qi4jField;
-            }
-        }
-
-        return super.getProperty( aContext, aTarget, fieldName );
-    }
-
-    @SuppressWarnings( "unchecked" )
-    private Object getQi4jField( Map aContext, Object aTarget, String aFieldName )
-        throws OgnlException
-    {
-        if( aTarget != null )
-        {
-            // Is target#name a method? e.g. cat.name()
-            try
-            {
-                return methodAccessor.callMethod( aContext, aTarget, aFieldName, BLANK_ARGUMENTS );
-            }
-            catch( MethodFailedException e )
-            {
-                // Means not a property/association
-            }
-
-            // Is target#name a field? e.g. action.field1, where field1 is extracted from a composite
-            OgnlContext ognlContext = (OgnlContext) aContext;
-            try
-            {
-                return getFieldValue( ognlContext, aTarget, aFieldName, true );
-            }
-            catch( NoSuchFieldException e )
-            {
-                // Means not a field
-            }
-        }
-
-        return null;
-    }
-
-    @Override
-    @SuppressWarnings( "unchecked" )
-    public final void setProperty( Map aContext, Object aTarget, Object aPropertyName, Object aPropertyValue )
-        throws OgnlException
-    {
-        String fieldName = aPropertyName.toString();
-        Object qi4jField = getQi4jField( aContext, aTarget, fieldName );
-
-        if( qi4jField != null )
-        {
-            Class<?> memberClass = qi4jField.getClass();
-
-            if( Property.class.isAssignableFrom( memberClass ) )
-            {
-                Property property = (Property) qi4jField;
-
-                OgnlContext ognlContext = (OgnlContext) aContext;
-                Class<?> propertyType = (Class) api.propertyDescriptorFor( property ).type();
-                Object convertedValue = getConvertedType(
-                    ognlContext, aTarget, null, fieldName, aPropertyValue, propertyType );
-                try
-                {
-                    property.set( convertedValue );
-                }
-                catch( ConstraintViolationException e )
-                {
-                    Collection<ConstraintViolation> violations = e.constraintViolations();
-                    handleConstraintViolation( aContext, aTarget, fieldName, convertedValue, violations );
-                }
-
-                return;
-            }
-            else if( Association.class.isAssignableFrom( memberClass ) )
-            {
-                Association association = (Association) qi4jField;
-                OgnlContext ognlContext = (OgnlContext) aContext;
-                Class<?> associationType = (Class) api.associationDescriptorFor( association ).type();
-                Object convertedValue = getConvertedType(
-                    ognlContext, aTarget, null, fieldName, aPropertyValue, associationType );
-                if( convertedValue == OgnlRuntime.NoConversionPossible )
-                {
-                    throw new OgnlException( "Could not convert value to association type" );
-                }
-                try
-                {
-                    association.set( convertedValue );
-                }
-                catch( ConstraintViolationException e )
-                {
-                    Collection<ConstraintViolation> violations = e.constraintViolations();
-                    handleConstraintViolation( aContext, aTarget, fieldName, aPropertyValue, violations );
-                }
-
-                return;
-            }
-            else if( ManyAssociation.class.isAssignableFrom( memberClass ) )
-            {
-                throw new OgnlException( "Setting many association [" + fieldName + "] is impossible." );
-            }
-            else if( NamedAssociation.class.isAssignableFrom( memberClass ) )
-            {
-                throw new OgnlException( "Setting named association [" + fieldName + "] is impossible." );
-            }
-        }
-
-        super.setProperty( aContext, aTarget, aPropertyName, aPropertyValue );
-    }
-
-    @SuppressWarnings( "unchecked" )
-    protected final void handleConstraintViolation(
-        Map aContext, Object aTarget, String aPropertyName, Object aPropertyValue,
-        Collection<ConstraintViolation> violations
-    )
-    {
-        Map<String, FieldConstraintViolations> allPropertyConstraintViolations
-                                               = (Map<String, FieldConstraintViolations>) aContext.get( CONTEXT_CONSTRAINT_VIOLATIONS );
-        if( allPropertyConstraintViolations == null )
-        {
-            allPropertyConstraintViolations = new HashMap<>();
-            aContext.put( CONTEXT_CONSTRAINT_VIOLATIONS, allPropertyConstraintViolations );
-        }
-
-        String realFieldName = aPropertyName;
-        String fieldFullName = (String) aContext.get( CONVERSION_PROPERTY_FULLNAME );
-        if( fieldFullName != null )
-        {
-            realFieldName = fieldFullName;
-        }
-        // Add another violation
-        allPropertyConstraintViolations.put(
-            realFieldName, new FieldConstraintViolations( aTarget, aPropertyName, aPropertyValue, violations ) );
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/UnitOfWorkInterceptor.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/UnitOfWorkInterceptor.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/UnitOfWorkInterceptor.java
deleted file mode 100644
index 567c85f..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/UnitOfWorkInterceptor.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
-import org.qi4j.api.injection.scope.Structure;
-import org.qi4j.api.unitofwork.UnitOfWork;
-import org.qi4j.api.unitofwork.UnitOfWorkFactory;
-
-/**
- * <p>An interceptor to be used to start a UnitOfWork if one has not yet been started.  If this interceptor creates a
- * new UnitOfWork it will also add a PreResultListener to make sure the unit of work is completed or discarded before
- * the result is executed.  This is important so that the rendering of the result does not make any changes to the
- * entities it is dealing with (we can maybe make this an option, to keep the UnitOfWork open until the invocation stack
- * returns to this interceptor or if it should use the PreResultListener, but for now I like the PreResultListener
- * better as it is safer).</p>
- *
- * <p>When a new UnitOfWork is created by this interceptor a decision must be made when closing it whether to discard
- * the UnitOfWork or complete it.  For now, if the resultCode is "success", we complete the UnitOfWork, otherwise we
- * discard it.  There are many things we can do here to make it more flexible, e.g. allow the user to specify result
- * codes to complete or, conversely, codes that should result in the UnitOfWork being discarded.  Since we have access
- * to the action invocation we could also do something with annotations on the method to be executed to allow user to
- * specify more specifically for that method what results should result in discards or completions.</p>
- */
-public class UnitOfWorkInterceptor
-    extends AbstractInterceptor
-{
-
-    private static final long serialVersionUID = 1L;
-
-    @Structure
-    private UnitOfWorkFactory uowf;
-
-    @Override
-    public String intercept( ActionInvocation invocation )
-        throws Exception
-    {
-        boolean createdUnitOfWork = false;
-        UnitOfWork uow;
-        if (!uowf.isUnitOfWorkActive())
-        {
-            uow = uowf.newUnitOfWork();
-            createdUnitOfWork = true;
-        } else
-        {
-            uow = uowf.currentUnitOfWork();
-        }
-
-        String resultCode = null;
-        try
-        {
-            resultCode = invocation.invoke();
-        }
-        finally
-        {
-            if( createdUnitOfWork && uow.isOpen() )
-            {
-                if( shouldComplete( invocation, resultCode ) )
-                {
-                    uow.complete();
-                }
-                else
-                {
-                    uow.discard();
-                }
-            }
-        }
-        return resultCode;
-    }
-
-    protected boolean shouldComplete( ActionInvocation invocation, String resultCode )
-    {
-        return Action.SUCCESS.equals( resultCode );
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/bootstrap/Struts2PluginAssembler.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/bootstrap/Struts2PluginAssembler.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/bootstrap/Struts2PluginAssembler.java
deleted file mode 100644
index 76d97eb..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/bootstrap/Struts2PluginAssembler.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*  Copyright 2008 Edward Yakop.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.qi4j.library.struts2.bootstrap;
-
-import org.qi4j.api.common.Visibility;
-import org.qi4j.bootstrap.Assembler;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.library.struts2.ActionConfiguration;
-import org.qi4j.library.struts2.ActionService;
-import org.qi4j.library.struts2.UnitOfWorkInterceptor;
-
-public class Struts2PluginAssembler
-    implements Assembler
-{
-    private final ActionConfiguration actionConfiguration;
-
-    public Struts2PluginAssembler( ActionConfiguration actionConfiguration )
-    {
-        this.actionConfiguration = actionConfiguration;
-    }
-
-    @Override
-    public void assemble( ModuleAssembly module )
-        throws AssemblyException
-    {
-        module.objects( UnitOfWorkInterceptor.class ).visibleIn( Visibility.module );
-        module.services( ActionService.class )
-            .setMetaInfo( actionConfiguration )
-            .visibleIn( Visibility.module );
-        actionConfiguration.assemble( module );
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/package.html
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/package.html b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/package.html
deleted file mode 100644
index 1938ef3..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/package.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements.  See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License.  You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-<html>
-    <body>
-        <h2>Struts 2 Integration.</h2>
-    </body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/HasInput.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/HasInput.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/HasInput.java
deleted file mode 100644
index d570925..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/HasInput.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.support;
-
-public interface HasInput
-{
-
-    String input()
-        throws Exception;
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/ProvidesEntityOf.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/ProvidesEntityOf.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/ProvidesEntityOf.java
deleted file mode 100644
index 6723b7e..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/ProvidesEntityOf.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.support;
-
-public interface ProvidesEntityOf<T>
-{
-    String getId();
-
-    void setId( String id );
-
-    T getEntity();
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/ProvidesEntityOfMixin.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/ProvidesEntityOfMixin.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/ProvidesEntityOfMixin.java
deleted file mode 100644
index 4a86ea0..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/ProvidesEntityOfMixin.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.support;
-
-import org.qi4j.api.injection.scope.Structure;
-import org.qi4j.api.injection.scope.This;
-import org.qi4j.api.unitofwork.NoSuchEntityException;
-import org.qi4j.api.unitofwork.UnitOfWork;
-import org.qi4j.api.unitofwork.UnitOfWorkFactory;
-
-import static org.qi4j.library.struts2.util.ParameterizedTypes.findTypeVariables;
-
-public abstract class ProvidesEntityOfMixin<T>
-    implements ProvidesEntityOf<T>, StrutsAction
-{
-
-    @This
-    private ProvidesEntityOf<T> entityProvider;
-
-    @Structure
-    private UnitOfWorkFactory uowf;
-
-    private String id;
-    private T entity;
-
-    @Override
-    public String getId()
-    {
-        return id;
-    }
-
-    @Override
-    public void setId( String id )
-    {
-        this.id = id;
-    }
-
-    @Override
-    public T getEntity()
-    {
-        return entity;
-    }
-
-    protected void loadEntity()
-    {
-        UnitOfWork uow = uowf.currentUnitOfWork();
-        try
-        {
-            entity = uow.get( typeToLoad(), entityProvider.getId() );
-        }
-        catch( NoSuchEntityException e )
-        {
-            addActionError( getText( "entity.not.found" ) );
-        }
-    }
-
-    protected Class<T> typeToLoad()
-    {
-        return (Class<T>) findTypeVariables( entityProvider.getClass(), ProvidesEntityOf.class )[ 0 ];
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/StrutsAction.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/StrutsAction.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/StrutsAction.java
deleted file mode 100644
index 29d7e3a..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/StrutsAction.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.support;
-
-import com.opensymphony.xwork2.*;
-
-public interface StrutsAction
-    extends Action, Validateable, ValidationAware, TextProvider, LocaleProvider
-{
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/add/ProvidesAddingOf.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/add/ProvidesAddingOf.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/add/ProvidesAddingOf.java
deleted file mode 100644
index 02bce67..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/add/ProvidesAddingOf.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.support.add;
-
-import com.opensymphony.xwork2.Preparable;
-import org.qi4j.library.struts2.support.HasInput;
-import org.qi4j.library.struts2.support.StrutsAction;
-
-public interface ProvidesAddingOf<T>
-    extends Preparable, HasInput, StrutsAction
-{
-    T getState();
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/add/ProvidesAddingOfMixin.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/add/ProvidesAddingOfMixin.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/add/ProvidesAddingOfMixin.java
deleted file mode 100644
index 1315d51..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/add/ProvidesAddingOfMixin.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.support.add;
-
-import com.opensymphony.xwork2.ActionSupport;
-import org.qi4j.api.entity.EntityBuilder;
-import org.qi4j.api.injection.scope.Structure;
-import org.qi4j.api.injection.scope.This;
-import org.qi4j.api.unitofwork.UnitOfWork;
-import org.qi4j.api.unitofwork.UnitOfWorkFactory;
-
-import static org.qi4j.library.struts2.util.ClassNames.classNameInDotNotation;
-import static org.qi4j.library.struts2.util.ParameterizedTypes.findTypeVariables;
-
-public abstract class ProvidesAddingOfMixin<T>
-    extends ActionSupport
-    implements ProvidesAddingOf<T>
-{
-
-    @This
-    private ProvidesAddingOf<T> action;
-
-    @Structure
-    private UnitOfWorkFactory uowf;
-
-    private EntityBuilder<T> builder;
-
-    @Override
-    public T getState()
-    {
-        return builder.instance();
-    }
-
-    @Override
-    public void prepare()
-        throws Exception
-    {
-        prepareEntityBuilder();
-    }
-
-    @Override
-    public String input()
-    {
-        return INPUT;
-    }
-
-    @Override
-    public String execute()
-        throws Exception
-    {
-        addSuccessMessage();
-        return SUCCESS;
-    }
-
-    @SuppressWarnings( "unchecked" )
-    protected Class<T> typeToAdd()
-    {
-        return (Class<T>) findTypeVariables( action.getClass(), ProvidesAddingOf.class )[ 0 ];
-    }
-
-    protected void addSuccessMessage()
-    {
-        addActionMessage( getText( classNameInDotNotation( typeToAdd() ) + ".successfully.added" ) );
-    }
-
-    protected void prepareEntityBuilder()
-        throws Exception
-    {
-        UnitOfWork uow = uowf.currentUnitOfWork();
-        builder = uow.newEntityBuilder( typeToAdd() );
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/edit/ProvidesEditingOf.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/edit/ProvidesEditingOf.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/edit/ProvidesEditingOf.java
deleted file mode 100644
index 3f8419f..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/edit/ProvidesEditingOf.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.support.edit;
-
-import com.opensymphony.xwork2.Preparable;
-import org.qi4j.library.struts2.support.HasInput;
-import org.qi4j.library.struts2.support.ProvidesEntityOf;
-import org.qi4j.library.struts2.support.StrutsAction;
-
-public interface ProvidesEditingOf<T>
-    extends ProvidesEntityOf<T>, Preparable, HasInput, StrutsAction
-{
-    void prepareInput()
-        throws Exception;
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/edit/ProvidesEditingOfMixin.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/edit/ProvidesEditingOfMixin.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/edit/ProvidesEditingOfMixin.java
deleted file mode 100644
index b4f1bd0..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/edit/ProvidesEditingOfMixin.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.support.edit;
-
-import org.qi4j.api.injection.scope.This;
-import org.qi4j.library.struts2.support.ProvidesEntityOfMixin;
-
-import static org.qi4j.library.struts2.util.ParameterizedTypes.findTypeVariables;
-
-public abstract class ProvidesEditingOfMixin<T>
-    extends ProvidesEntityOfMixin<T>
-    implements ProvidesEditingOf<T>
-{
-
-    @This
-    private ProvidesEditingOf<T> action;
-
-    @Override
-    public void prepare()
-        throws Exception
-    {
-        loadEntity();
-    }
-
-    @Override
-    public void prepareInput()
-        throws Exception
-    {
-
-    }
-
-    @Override
-    public String input()
-    {
-        if( getEntity() == null )
-        {
-            return "entity-not-found";
-        }
-        return INPUT;
-    }
-
-    @Override
-    protected Class<T> typeToLoad()
-    {
-        return (Class<T>) findTypeVariables( action.getClass(), ProvidesEditingOf.class )[ 0 ];
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/list/ProvidesListOf.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/list/ProvidesListOf.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/list/ProvidesListOf.java
deleted file mode 100644
index 06b2a95..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/list/ProvidesListOf.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.support.list;
-
-import com.opensymphony.xwork2.Preparable;
-import org.qi4j.library.struts2.support.StrutsAction;
-
-public interface ProvidesListOf<T>
-    extends Preparable, StrutsAction
-{
-    Iterable<T> list();
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/list/ProvidesListOfMixin.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/list/ProvidesListOfMixin.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/list/ProvidesListOfMixin.java
deleted file mode 100644
index 57388f8..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/list/ProvidesListOfMixin.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.support.list;
-
-import com.opensymphony.xwork2.ActionSupport;
-import org.qi4j.api.injection.scope.Structure;
-import org.qi4j.api.injection.scope.This;
-import org.qi4j.api.query.QueryBuilder;
-import org.qi4j.api.query.QueryBuilderFactory;
-import org.qi4j.api.unitofwork.UnitOfWork;
-import org.qi4j.api.unitofwork.UnitOfWorkFactory;
-
-import static org.qi4j.library.struts2.util.ParameterizedTypes.findTypeVariables;
-
-public abstract class ProvidesListOfMixin<T>
-    extends ActionSupport
-    implements ProvidesListOf<T>
-{
-
-    @This
-    private ProvidesListOf<T> action;
-
-    @Structure
-    private UnitOfWorkFactory uowf;
-
-    @Structure
-    private QueryBuilderFactory qbf;
-
-    private Iterable<T> results;
-
-    @Override
-    public Iterable<T> list()
-    {
-        return results;
-    }
-
-    /**
-     * This is where we'll load the list of entities.  Not because it is any better than the execute() method, I
-     * would actually prefer doing it in the execute method.  But since these list actions can be the target
-     * of redirects after errors, actionErrors may not be empty which would mean execute() would never get called.
-     * One way around this would be to have a different interceptor stack just for these list actions that doesn't
-     * do validation, but for now we'll just use the prepare() method.  We can change it easily enough later if this
-     * becomes an issue for some reason.
-     */
-    @Override
-    public void prepare()
-        throws Exception
-    {
-        UnitOfWork uow = uowf.currentUnitOfWork();
-        QueryBuilder<T> qb = qbf.newQueryBuilder( typeToList() );
-        results = uow.newQuery( qb );
-    }
-
-    private Class<T> typeToList()
-    {
-        return (Class<T>) findTypeVariables( action.getClass(), ProvidesListOf.class )[ 0 ];
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/view/ProvidesViewOf.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/view/ProvidesViewOf.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/view/ProvidesViewOf.java
deleted file mode 100644
index 17e4de9..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/view/ProvidesViewOf.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.support.view;
-
-import org.qi4j.library.struts2.support.ProvidesEntityOf;
-import org.qi4j.library.struts2.support.StrutsAction;
-
-public interface ProvidesViewOf<T>
-    extends ProvidesEntityOf<T>, StrutsAction
-{
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/view/ProvidesViewOfMixin.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/view/ProvidesViewOfMixin.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/view/ProvidesViewOfMixin.java
deleted file mode 100644
index b36d100..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/view/ProvidesViewOfMixin.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.support.view;
-
-import org.qi4j.api.injection.scope.This;
-import org.qi4j.library.struts2.support.ProvidesEntityOfMixin;
-
-import static org.qi4j.library.struts2.util.ParameterizedTypes.findTypeVariables;
-
-public abstract class ProvidesViewOfMixin<T>
-    extends ProvidesEntityOfMixin<T>
-    implements ProvidesViewOf<T>
-{
-    @This
-    private ProvidesViewOf<T> action;
-
-    @Override
-    public String execute()
-    {
-        loadEntity();
-        return SUCCESS;
-    }
-
-    @Override
-    protected Class<T> typeToLoad()
-    {
-        return (Class<T>) findTypeVariables( action.getClass(), ProvidesViewOf.class )[ 0 ];
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNameFilters.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNameFilters.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNameFilters.java
deleted file mode 100644
index a49b50e..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNameFilters.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.util;
-
-public final class ClassNameFilters
-{
-    private ClassNameFilters()
-    {
-    }
-
-    public static ClassNameMapper passThruMapper = new ClassNameMapper()
-    {
-        @Override
-        public String map( Class<?> type )
-        {
-            return type.getName();
-        }
-    };
-
-    public static ClassNameMapper removeSuffixes( final String... suffixes )
-    {
-        return new ClassNameMapper()
-        {
-            @Override
-            public String map( Class<?> type )
-            {
-                String className = type.getName();
-                for( String suffix : suffixes )
-                {
-                    if( className.endsWith( suffix ) )
-                    {
-                        return className.substring( 0, className.length() - suffix.length() );
-                    }
-                }
-                return className;
-            }
-        };
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNameMapper.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNameMapper.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNameMapper.java
deleted file mode 100644
index 3c0ad2d..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNameMapper.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.util;
-
-import org.qi4j.functional.Function;
-
-public interface ClassNameMapper extends Function<Class<?>,String>
-{
-    @Override
-    String map( Class<?> type );
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNames.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNames.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNames.java
deleted file mode 100644
index a853c11..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNames.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.util;
-
-import java.util.Arrays;
-import org.qi4j.functional.Function;
-import org.qi4j.functional.Iterables;
-
-import static java.lang.Character.isLowerCase;
-import static java.lang.Character.toLowerCase;
-
-public final class ClassNames
-{
-    private ClassNames()
-    {
-    }
-
-    public static String classNameInDotNotation( Class<?> type )
-    {
-        Function<Class<?>, String> mapper = ClassNameFilters.passThruMapper;
-        Iterable<String> map = Iterables.map( mapper, Arrays.asList( type ) );
-        return ClassNames.camelCaseToDotNotation( map );
-    }
-
-    public static String classNameInDotNotation( Iterable<Class<?>> type, ClassNameMapper mapper )
-    {
-        Iterable<String> map = Iterables.map( mapper, type );
-        return ClassNames.camelCaseToDotNotation( map );
-    }
-
-    public static String camelCaseToDotNotation( Iterable<String> names )
-    {
-        StringBuilder sb = new StringBuilder();
-        int count = 0;
-        for( String name : names )
-        {
-            if( count++ > 0 )
-            {
-                sb.append( "," );
-            }
-            sb.append( camelCaseToDotNotation( name ) );
-        }
-        if( count == 1 )
-        {
-            return sb.toString();
-        }
-        sb.append( "]" );
-        return "[" + sb.toString();
-    }
-
-    private static String camelCaseToDotNotation( String name )
-    {
-        StringBuilder sb = new StringBuilder( name.length() );
-        sb.append( toLowerCase( name.charAt( 0 ) ) );
-        for( int i = 1; i < name.length(); i++ )
-        {
-            char c = name.charAt( i );
-            if( isLowerCase( c ) )
-            {
-                sb.append( c );
-            }
-            else
-            {
-                sb.append( '.' );
-                sb.append( toLowerCase( c ) );
-            }
-        }
-        return sb.toString();
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ParameterizedTypes.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ParameterizedTypes.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ParameterizedTypes.java
deleted file mode 100644
index 9bdc79c..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ParameterizedTypes.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.util;
-
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-
-public final class ParameterizedTypes
-{
-    private ParameterizedTypes()
-    {
-    }
-
-    public static <S, T extends S> Type[] findTypeVariables( Class<T> type, Class<S> searchType )
-    {
-        return ParameterizedTypes.findParameterizedType( type, searchType ).getActualTypeArguments();
-    }
-
-    public static <S, T extends S> ParameterizedType findParameterizedType( Class<T> type, Class<S> searchType )
-    {
-        return ParameterizedTypes.findParameterizedType( (Type) type, searchType );
-    }
-
-    static ParameterizedType findParameterizedType( Type type, Type searchType )
-    {
-        if( type instanceof ParameterizedType && ( (ParameterizedType) type ).getRawType().equals( searchType ) )
-        {
-            return (ParameterizedType) type;
-        }
-        Type[] parents = ( (Class<?>) type ).getGenericInterfaces();
-        for( Type parent : parents )
-        {
-            ParameterizedType foundType = findParameterizedType( parent, searchType );
-            if( foundType != null )
-            {
-                return foundType;
-            }
-        }
-        return null;
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/resources/struts-plugin.xml
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/resources/struts-plugin.xml b/libraries/struts2-plugin/src/main/resources/struts-plugin.xml
deleted file mode 100644
index 5eaf6f9..0000000
--- a/libraries/struts2-plugin/src/main/resources/struts-plugin.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-/*
- * $Id: pom.xml 559206 2007-07-24 21:01:18Z apetrelli $
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
--->
-
-<!DOCTYPE struts PUBLIC
-  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-  "http://struts.apache.org/dtds/struts-2.0.dtd">
-
-<struts>
-  <bean type="com.opensymphony.xwork2.ObjectFactory" name="qi4j" class="org.qi4j.library.struts2.Qi4jObjectFactory"/>
-  <constant name="struts.objectFactory" value="qi4j"/>
-
-  <bean type="ognl.PropertyAccessor" name="org.qi4j.composite.Composite"
-        class="org.qi4j.library.struts2.Qi4jPropertyAccessor"/>
-</struts>

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/main/resources/xwork-conversion.properties
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/main/resources/xwork-conversion.properties b/libraries/struts2-plugin/src/main/resources/xwork-conversion.properties
deleted file mode 100644
index 54f24fd..0000000
--- a/libraries/struts2-plugin/src/main/resources/xwork-conversion.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# 
-# http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-org.qi4j.api.entity.EntityComposite=org.qi4j.library.struts2.EntityCompositeConverter
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/libraries/struts2-plugin/src/test/java/org/qi4j/library/struts2/util/ParameterizedTypesTest.java
----------------------------------------------------------------------
diff --git a/libraries/struts2-plugin/src/test/java/org/qi4j/library/struts2/util/ParameterizedTypesTest.java b/libraries/struts2-plugin/src/test/java/org/qi4j/library/struts2/util/ParameterizedTypesTest.java
deleted file mode 100644
index 93a022d..0000000
--- a/libraries/struts2-plugin/src/test/java/org/qi4j/library/struts2/util/ParameterizedTypesTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.util;
-
-import org.junit.Test;
-
-import java.lang.reflect.ParameterizedType;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-
-public class ParameterizedTypesTest
-{
-    @Test
-    public void findParameterizedType()
-    {
-        assertEquals(
-            GarbageMan.class.getGenericInterfaces()[ 0 ],
-            ParameterizedTypes.findParameterizedType( GarbageMan.class, HandlerOf.class )
-        );
-    }
-
-    @Test
-    public void findTypeVariables()
-    {
-        assertArrayEquals(
-                ((ParameterizedType) GarbageMan.class.getGenericInterfaces()[0]).getActualTypeArguments(),
-                ParameterizedTypes.findTypeVariables( GarbageMan.class, HandlerOf.class )
-        );
-    }
-
-    static interface HandlerOf<T>
-    {
-    }
-
-    static interface Trash
-    {
-    }
-
-    static final class GarbageMan implements HandlerOf<Trash>
-    {
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/manual/src/docs/userguide/libraries.txt
----------------------------------------------------------------------
diff --git a/manual/src/docs/userguide/libraries.txt b/manual/src/docs/userguide/libraries.txt
index ce7b579..1efdcde 100644
--- a/manual/src/docs/userguide/libraries.txt
+++ b/manual/src/docs/userguide/libraries.txt
@@ -144,18 +144,6 @@ include::../../../../libraries/sql/src/docs/sql.txt[]
 
 :leveloffset: 2
 
-include::../../../../libraries/struts2-codebehind/src/docs/struts-codebehind.txt[]
-
-:leveloffset: 2
-
-include::../../../../libraries/struts2-convention/src/docs/struts-convention.txt[]
-
-:leveloffset: 2
-
-include::../../../../libraries/struts2-plugin/src/docs/struts-plugin.txt[]
-
-:leveloffset: 2
-
 include::../../../../libraries/uid/src/docs/uid.txt[]
 
 :leveloffset: 2

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/manual/src/docs/website/samples.txt
----------------------------------------------------------------------
diff --git a/manual/src/docs/website/samples.txt b/manual/src/docs/website/samples.txt
index 93a3f1c..94737a4 100644
--- a/manual/src/docs/website/samples.txt
+++ b/manual/src/docs/website/samples.txt
@@ -101,13 +101,6 @@ user@host $
 
 A gradle task `runSample` is defined in this module as a shortcut to run the example. See <<build-system>>.
 
-[[sample-struts2,Struts2 Sample]]
-== Struts2 Sample ==
-
-Sample of how to use the Struts2 integration.
-
-https://github.com/Qi4j/qi4j-sdk/tree/develop/samples/struts2Hello[Browse Source]
-
 [[sample-swing,Swing Bindings Sample]]
 == Swing Bindings Sample ==
 

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/samples/struts2Hello/build.gradle
----------------------------------------------------------------------
diff --git a/samples/struts2Hello/build.gradle b/samples/struts2Hello/build.gradle
deleted file mode 100644
index e7da3c3..0000000
--- a/samples/struts2Hello/build.gradle
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-description = "Sample of how to use the Struts2 integration."
-
-jar { manifest { name = "Qi4j Sample - Struts2" }}
-
-dependencies {
-  compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.struts2-plugin"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.struts2-codebehind"))
-  compile(project(":org.qi4j.extensions:org.qi4j.extension.indexing-rdf"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.constraints"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.rdf"))
-  compile(libraries.jetty_webapp)
-
-  testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-
-  testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
-  testRuntime(libraries.logback)
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/Item.java
----------------------------------------------------------------------
diff --git a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/Item.java b/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/Item.java
deleted file mode 100644
index 1a86e0f..0000000
--- a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/Item.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.example;
-
-import org.qi4j.api.entity.EntityComposite;
-
-public interface Item
-    extends Nameable, EntityComposite
-{
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/JettyLauncher.java
----------------------------------------------------------------------
diff --git a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/JettyLauncher.java b/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/JettyLauncher.java
deleted file mode 100644
index ea5a838..0000000
--- a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/JettyLauncher.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.example;
-
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.webapp.WebAppContext;
-
-public class JettyLauncher
-{
-
-    public static void main( String[] args )
-    {
-        Server server = new Server();
-
-        ServerConnector connector = new ServerConnector( server );
-        connector.setPort( 8080 );
-        server.addConnector( connector );
-
-        WebAppContext web = new WebAppContext( server, "struts2.example", "/example" );
-        web.setWar( "libraries/struts2/example/src/main/webapp/" );
-
-        try
-        {
-            server.start();
-            server.join();
-        }
-        catch( Exception e )
-        {
-            e.printStackTrace();
-            System.exit( 100 );
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/122a51b6/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/Nameable.java
----------------------------------------------------------------------
diff --git a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/Nameable.java b/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/Nameable.java
deleted file mode 100644
index ccced4a..0000000
--- a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/Nameable.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.qi4j.library.struts2.example;
-
-import org.qi4j.api.property.Property;
-
-public interface Nameable
-{
-
-    Property<String> name();
-}