From: Adrian B. <adr...@jb...> - 2005-05-31 18:29:19
|
User: adrian Date: 05/05/31 14:28:51 Modified: src/main/org/jboss/kernel/plugins/deployment/xml BeanSchemaBinding.java Log: Complete the refactoring of the Bean ControllerContext such that the metadata processing is "internal" to the bean model. There is still the issue of "custom registries", i.e. which registry(ies) does install update. i.e. the supply/demand installation needs moving to the bean model. Also implemented custom lifecycle methods so you can now do <bean> <create method="notCreate"> <parameter><inject bean="whatever"/></bean> etc. Plus some other tidyup, including a fix where the MethodJoinpoint processing in the configurator wasn't setting the parameter values and better debugging when arguments to methods are wrong. Revision Changes Path 1.25 +99 -1 microkernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanSchemaBinding.java (In the diff below, changes in quantity of whitespace are not shown.) Index: BeanSchemaBinding.java =================================================================== RCS file: /cvsroot/jboss/microkernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanSchemaBinding.java,v retrieving revision 1.24 retrieving revision 1.25 diff -u -b -r1.24 -r1.25 --- BeanSchemaBinding.java 28 May 2005 17:11:40 -0000 1.24 +++ BeanSchemaBinding.java 31 May 2005 18:28:51 -0000 1.25 @@ -23,6 +23,7 @@ import org.jboss.beans.metadata.plugins.AbstractDemandMetaData; import org.jboss.beans.metadata.plugins.AbstractDependencyMetaData; import org.jboss.beans.metadata.plugins.AbstractDependencyValueMetaData; +import org.jboss.beans.metadata.plugins.AbstractLifecycleMetaData; import org.jboss.beans.metadata.plugins.AbstractListMetaData; import org.jboss.beans.metadata.plugins.AbstractMapMetaData; import org.jboss.beans.metadata.plugins.AbstractParameterMetaData; @@ -51,7 +52,7 @@ * * @author <a href="mailto:al...@jb...">Alexey Loubyansky</a> * @author <a href="mailto:ad...@jb...">Adrian Brock</a> - * @version $Revision: 1.24 $ + * @version $Revision: 1.25 $ */ public class BeanSchemaBinding { @@ -91,6 +92,21 @@ /** The parameter element name */ private static final QName parameterQName = new QName(BEAN_DEPLOYER_NS, "parameter"); + /** The lifecycle binding */ + private static final QName lifecycleTypeQName = new QName(BEAN_DEPLOYER_NS, "lifecycleType"); + + /** The create element name */ + private static final QName createQName = new QName(BEAN_DEPLOYER_NS, "create"); + + /** The start element name */ + private static final QName startQName = new QName(BEAN_DEPLOYER_NS, "start"); + + /** The stop element name */ + private static final QName stopQName = new QName(BEAN_DEPLOYER_NS, "stop"); + + /** The destroy element name */ + private static final QName destroyQName = new QName(BEAN_DEPLOYER_NS, "destroy"); + /** The property binding */ private static final QName propertyTypeQName = new QName(BEAN_DEPLOYER_NS, "propertyType"); @@ -403,6 +419,88 @@ } }); + // bean has a create + beanType.pushInterceptor(createQName, new DefaultElementInterceptor() + { + public void add(Object parent, Object child, QName name) + { + AbstractBeanMetaData bean = (AbstractBeanMetaData) parent; + AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) child; + bean.setCreate(lifecycle); + } + }); + + // bean has a start + beanType.pushInterceptor(startQName, new DefaultElementInterceptor() + { + public void add(Object parent, Object child, QName name) + { + AbstractBeanMetaData bean = (AbstractBeanMetaData) parent; + AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) child; + bean.setStart(lifecycle); + } + }); + + // bean has a stop + beanType.pushInterceptor(stopQName, new DefaultElementInterceptor() + { + public void add(Object parent, Object child, QName name) + { + AbstractBeanMetaData bean = (AbstractBeanMetaData) parent; + AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) child; + bean.setStop(lifecycle); + } + }); + + // bean has a destroy + beanType.pushInterceptor(destroyQName, new DefaultElementInterceptor() + { + public void add(Object parent, Object child, QName name) + { + AbstractBeanMetaData bean = (AbstractBeanMetaData) parent; + AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) child; + bean.setDestroy(lifecycle); + } + }); + + // lifecycle binding + TypeBinding lifecycleType = schemaBinding.getType(lifecycleTypeQName); + lifecycleType.setHandler(new DefaultElementHandler() + { + public Object startElement(Object parent, QName name, ElementBinding element) + { + return new AbstractLifecycleMetaData(); + } + + public void attributes(Object o, QName elementName, ElementBinding element, Attributes attrs, NamespaceContext nsCtx) + { + AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) o; + for (int i = 0; i < attrs.getLength(); ++i) + { + String localName = attrs.getLocalName(i); + if ("method".equals(localName)) + lifecycle.setMethodName(attrs.getValue(i)); + } + } + }); + + // lifecycle has a list parameters + lifecycleType.pushInterceptor(parameterQName, new DefaultElementInterceptor() + { + public void add(Object parent, Object child, QName name) + { + AbstractLifecycleMetaData lifecycle = (AbstractLifecycleMetaData) parent; + AbstractParameterMetaData parameter = (AbstractParameterMetaData) child; + List parameters = lifecycle.getParameters(); + if (parameters == null) + { + parameters = new ArrayList(); + lifecycle.setParameters(parameters); + } + parameters.add(parameter); + } + }); + // bean has a set of properties beanType.pushInterceptor(propertyQName, new DefaultElementInterceptor() { |