[jboss-cvs] JBossAS SVN: r84514 - in projects/microcontainer/branches/Branch_2_0: aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/metadata and 21 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Feb 20 07:40:46 EST 2009
Author: alesj
Date: 2009-02-20 07:40:45 -0500 (Fri, 20 Feb 2009)
New Revision: 84514
Added:
projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/LazySearchInfo.java
projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/ScopeKeyLookupStrategy.java
projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/SearchDependencyItem.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/SearchInfoValueAdapter.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/spi/factory/PropertyMap.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchClassContextDependencyItem.java
projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/config/support/SimpleAnnotationImpl.java
projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/support/FirstBean2.java
projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/test/BeanFactoryContextualInjectionTestCase.java
projects/microcontainer/branches/Branch_2_0/kernel/src/test/resources/org/jboss/test/kernel/deployment/test/BeanFactoryContextualInjectionTestCase.xml
projects/microcontainer/branches/Branch_2_0/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/DemandWithTargetState.xml
projects/microcontainer/branches/Branch_2_0/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/InjectionWithSearch.xml
Modified:
projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/aspects/jndi/JndiIntroduction.java
projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/metadata/AspectBeanMetaDataFactory.java
projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/metadata/package-info.java
projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyItem.java
projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/ScopeKeySearchInfo.java
projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/Search.java
projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/spi/graph/SearchInfo.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Inject.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Search.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractConstructorMetaData.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDemandMetaData.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractLifecycleMetaData.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractSearchValueMetaData.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/policy/package-info.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/spi/DemandMetaData.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/spi/factory/GenericBeanFactoryMetaData.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/annotations/ValueUtil.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/deployment/AbstractKernelDeployer.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/deployment/package-info.java
projects/microcontainer/branches/Branch_2_0/kernel/src/main/resources/schema/jboss-beans-common_2_0.xsd
projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/config/test/BeanMetaDataBuilderTestCase.java
projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/test/DeploymentTestSuite.java
projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/DemandJaxbTestCase.java
projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/DemandTestCase.java
projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionJaxbTestCase.java
projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionTestCase.java
Log:
Merge changes.
Modified: projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/aspects/jndi/JndiIntroduction.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/aspects/jndi/JndiIntroduction.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/aspects/jndi/JndiIntroduction.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -21,8 +21,8 @@
*/
package org.jboss.aop.microcontainer.aspects.jndi;
+import java.io.Serializable;
import java.util.Properties;
-
import javax.naming.InitialContext;
import org.jboss.aop.advice.Interceptor;
@@ -42,8 +42,10 @@
* @version $Revision: 46386 $
* @deprecated Should use JndiLifecycleCallback instead
*/
-public class JndiIntroduction implements Interceptor
+public class JndiIntroduction implements Interceptor, Serializable
{
+ private static final long serialVersionUID = 1;
+
private static final Logger log = Logger.getLogger(JndiIntroduction.class);
private Properties env;
Modified: projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/metadata/AspectBeanMetaDataFactory.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/metadata/AspectBeanMetaDataFactory.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/metadata/AspectBeanMetaDataFactory.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -214,6 +214,11 @@
private void getDependencies(ArrayList<ValueMetaData> dependencies, MetaDataVisitorNode node)
{
+ if (node instanceof AbstractDependencyValueMetaData)
+ {
+ dependencies.add((AbstractDependencyValueMetaData)node);
+ }
+
Iterator<? extends MetaDataVisitorNode> children = node.getChildren();
if (children != null)
@@ -221,10 +226,6 @@
while (children.hasNext())
{
MetaDataVisitorNode child = children.next();
- if (child instanceof AbstractDependencyValueMetaData)
- {
- dependencies.add((AbstractDependencyValueMetaData)child);
- }
getDependencies(dependencies, child);
}
}
Modified: projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/metadata/package-info.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/metadata/package-info.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/metadata/package-info.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -22,14 +22,17 @@
@JBossXmlAdaptedTypes
({
@JBossXmlAdaptedType(type=Cardinality.class, valueAdapter=CardinalityValueAdapter.class),
- @JBossXmlAdaptedType(type=ControllerState.class, valueAdapter=ControllerStateValueAdapter.class)
+ @JBossXmlAdaptedType(type=ControllerState.class, valueAdapter=ControllerStateValueAdapter.class),
+ @JBossXmlAdaptedType(type=SearchInfo.class, valueAdapter=SearchInfoValueAdapter.class)
})
package org.jboss.aop.microcontainer.beans.metadata;
import org.jboss.beans.metadata.plugins.CardinalityValueAdapter;
import org.jboss.beans.metadata.plugins.ControllerStateValueAdapter;
+import org.jboss.beans.metadata.plugins.SearchInfoValueAdapter;
import org.jboss.dependency.spi.Cardinality;
import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.graph.SearchInfo;
import org.jboss.xb.annotations.JBossXmlAdaptedType;
import org.jboss.xb.annotations.JBossXmlAdaptedTypes;
Modified: projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyItem.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyItem.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyItem.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -35,12 +35,13 @@
* A DependencyItem.
*
* @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
* @version $Revision$
*/
public class AbstractDependencyItem extends JBossObject implements DependencyItem
{
/** The log */
- private static final Logger log = Logger.getLogger(AbstractDependencyItem.class);
+ protected static final Logger log = Logger.getLogger(AbstractDependencyItem.class);
/** What I depend on */
private Object iDependOn;
Copied: projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/LazySearchInfo.java (from rev 84513, projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/LazySearchInfo.java)
===================================================================
--- projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/LazySearchInfo.java (rev 0)
+++ projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/LazySearchInfo.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -0,0 +1,90 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.dependency.plugins.graph;
+
+import java.util.Collections;
+import java.util.Map;
+import java.io.Serializable;
+
+import org.jboss.dependency.spi.graph.LookupStrategy;
+import org.jboss.dependency.spi.graph.SearchInfo;
+import org.jboss.reflect.plugins.introspection.ReflectionUtils;
+
+/**
+ * Lazy search info.
+ * The type is the class.
+ *
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class LazySearchInfo implements SearchInfo, Serializable
+{
+ private static final long serialVersionUID = 1L;
+
+ private String className;
+ private transient LookupStrategy strategy;
+
+ public LazySearchInfo(String className)
+ {
+ if (className == null)
+ throw new IllegalArgumentException("Null class name");
+
+ this.className = className;
+ }
+
+ public String getType()
+ {
+ return className;
+ }
+
+ public Map<String, ?> getInfo()
+ {
+ return Collections.emptyMap();
+ }
+
+ public LookupStrategy getStrategy()
+ {
+ if (strategy == null)
+ {
+ Object result;
+ try
+ {
+ result = ReflectionUtils.newInstance(className);
+ }
+ catch (Throwable t)
+ {
+ throw new RuntimeException(t);
+ }
+
+ if (LookupStrategy.class.isInstance(result) == false)
+ throw new IllegalArgumentException("Result is not LookupStrategy instance: " + result);
+
+ strategy = LookupStrategy.class.cast(result);
+ }
+ return strategy;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "LazySearchInfo: " + className;
+ }
+}
Copied: projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/ScopeKeyLookupStrategy.java (from rev 84513, projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/ScopeKeyLookupStrategy.java)
===================================================================
--- projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/ScopeKeyLookupStrategy.java (rev 0)
+++ projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/ScopeKeyLookupStrategy.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -0,0 +1,118 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.dependency.plugins.graph;
+
+import java.util.Set;
+
+import org.jboss.dependency.plugins.AbstractController;
+import org.jboss.dependency.plugins.ScopedController;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.metadata.spi.scope.ScopeKey;
+
+/**
+ * ScopeKey lookup strategy.
+ * It only matches exact scope key level.
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class ScopeKeyLookupStrategy extends HierarchyLookupStrategy
+{
+ private ScopeKey scopeKey;
+
+ public ScopeKeyLookupStrategy(ScopeKey scopeKey)
+ {
+ if (scopeKey == null)
+ throw new IllegalArgumentException("Null scope key");
+
+ this.scopeKey = scopeKey;
+ }
+
+ protected ControllerContext getContextInternal(AbstractController controller, Object name, ControllerState state)
+ {
+ // go all the way to the top
+ AbstractController parent = controller.getParentController();
+ while (parent != null)
+ {
+ controller = parent;
+ parent = controller.getParentController();
+ }
+
+ AbstractController match = findMatchingScopedController(controller);
+ if (match != null)
+ return getLocalContext(match, name, state);
+
+ return null;
+ }
+
+ /**
+ * Find scope key matching scoped controller.
+ *
+ * @param current the current controller
+ * @return match or null if no match
+ */
+ private AbstractController findMatchingScopedController(AbstractController current)
+ {
+ boolean related = true; // by default it's related
+
+ if (current instanceof ScopedController)
+ {
+ ScopedController scopedController = (ScopedController)current;
+ ScopeKey key = scopedController.getScopeKey();
+ // see if this is even related, so that we don't go fwd for nothing
+ if (key != null)
+ {
+ // exact match
+ if (scopeKey.equals(key))
+ return current;
+
+ related = false; // we have key, should prove that it's related
+ ScopeKey ck = scopeKey;
+ int keySize = key.getScopes().size();
+ int ckSize = ck.getScopes().size();
+ while (ck != null && keySize < ckSize)
+ {
+ if (key.isParent(ck))
+ {
+ related = true;
+ break;
+ }
+ ck = ck.getParent();
+ ckSize--;
+ }
+ }
+ }
+
+ if (related)
+ {
+ Set<AbstractController> children = current.getControllers();
+ for (AbstractController child : children)
+ {
+ AbstractController found = findMatchingScopedController(child);
+ if (found != null)
+ return found;
+ }
+ }
+
+ return null;
+ }
+}
Modified: projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/ScopeKeySearchInfo.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/ScopeKeySearchInfo.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/ScopeKeySearchInfo.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -21,14 +21,10 @@
*/
package org.jboss.dependency.plugins.graph;
+import java.io.Serializable;
import java.util.Collections;
import java.util.Map;
-import java.util.Set;
-import org.jboss.dependency.plugins.AbstractController;
-import org.jboss.dependency.plugins.ScopedController;
-import org.jboss.dependency.spi.ControllerContext;
-import org.jboss.dependency.spi.ControllerState;
import org.jboss.dependency.spi.graph.LookupStrategy;
import org.jboss.dependency.spi.graph.SearchInfo;
import org.jboss.metadata.spi.scope.ScopeKey;
@@ -38,11 +34,14 @@
*
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
*/
-public class ScopeKeySearchInfo implements SearchInfo
+public class ScopeKeySearchInfo implements SearchInfo, Serializable
{
+ private static final long serialVersionUID = 1L;
+
public static final String SCOPE_KEY = "ScopeKey";
private ScopeKey scopeKey;
private Map<String, ?> info;
+ private transient LookupStrategy strategy;
public ScopeKeySearchInfo(ScopeKey scopeKey)
{
@@ -66,78 +65,9 @@
public LookupStrategy getStrategy()
{
- return new ScopeKeyLookupStrategy();
- }
+ if (strategy == null)
+ strategy = new ScopeKeyLookupStrategy(scopeKey);
- private class ScopeKeyLookupStrategy extends HierarchyLookupStrategy
- {
- protected ControllerContext getContextInternal(AbstractController controller, Object name, ControllerState state)
- {
- // go all the way to the top
- AbstractController parent = controller.getParentController();
- while (parent != null)
- {
- controller = parent;
- parent = controller.getParentController();
- }
-
- AbstractController match = findMatchingScopedController(controller);
- if (match != null)
- return getLocalContext(match, name, state);
-
- return null;
- }
-
- /**
- * Find scope key matching scoped controller.
- *
- * @param current the current controller
- * @return match or null if no match
- */
- private AbstractController findMatchingScopedController(AbstractController current)
- {
- boolean related = true; // by default it's related
-
- if (current instanceof ScopedController)
- {
- ScopedController scopedController = (ScopedController)current;
- ScopeKey key = scopedController.getScopeKey();
- // see if this is even related, so that we don't go fwd for nothing
- if (key != null)
- {
- // exact match
- if (scopeKey.equals(key))
- return current;
-
- related = false; // we have key, should prove that it's related
- ScopeKey ck = scopeKey;
- int keySize = key.getScopes().size();
- int ckSize = ck.getScopes().size();
- while(ck != null && keySize < ckSize)
- {
- if (key.isParent(ck))
- {
- related = true;
- break;
- }
- ck = ck.getParent();
- ckSize--;
- }
- }
- }
-
- if (related)
- {
- Set<AbstractController> children = current.getControllers();
- for (AbstractController child : children)
- {
- AbstractController found = findMatchingScopedController(child);
- if (found != null)
- return found;
- }
- }
-
- return null;
- }
+ return strategy;
}
}
\ No newline at end of file
Modified: projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/Search.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/Search.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/Search.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -54,6 +54,28 @@
this.delegate = delegate;
}
+ /**
+ * Get SearchInfo instance.
+ *
+ * @param typeString the type string
+ * @return matching instance, lazy if none found
+ */
+ public static SearchInfo getInstance(String typeString)
+ {
+ if (typeString == null || typeString.length() == 0)
+ {
+ return DEFAULT;
+ }
+
+ for(Search search : values())
+ {
+ if (search.getType().equalsIgnoreCase(typeString) || search.name().equalsIgnoreCase(typeString))
+ return search;
+ }
+
+ return new LazySearchInfo(typeString);
+ }
+
public String getType()
{
return delegate.getType();
Copied: projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/SearchDependencyItem.java (from rev 84513, projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/SearchDependencyItem.java)
===================================================================
--- projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/SearchDependencyItem.java (rev 0)
+++ projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/plugins/graph/SearchDependencyItem.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -0,0 +1,122 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.dependency.plugins.graph;
+
+import org.jboss.dependency.plugins.AbstractDependencyItem;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerMode;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.graph.GraphController;
+import org.jboss.dependency.spi.graph.LookupStrategy;
+import org.jboss.dependency.spi.graph.SearchInfo;
+
+/**
+ * Search dependency item.
+ *
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class SearchDependencyItem extends AbstractDependencyItem
+{
+ private SearchInfo search;
+
+ public SearchDependencyItem(Object name, Object iDependOn, ControllerState whenRequired, ControllerState dependentState, SearchInfo search)
+ {
+ super(name, iDependOn, whenRequired, dependentState);
+ this.search = search;
+ }
+
+ /**
+ * Get controller context.
+ *
+ * @param controller the controller
+ * @param name the name
+ * @param state the state
+ * @return the controller context
+ */
+ protected ControllerContext getControllerContext(Controller controller, Object name, ControllerState state)
+ {
+ LookupStrategy strategy = search.getStrategy();
+ return strategy.getContext(controller, name, state);
+ }
+
+ public boolean resolve(Controller controller)
+ {
+ if (controller instanceof GraphController)
+ {
+ boolean previous = isResolved();
+ ControllerContext context;
+
+ if (getDependentState() == null)
+ {
+ context = getControllerContext(controller, getIDependOn(), ControllerState.INSTALLED);
+ }
+ else
+ {
+ context = getControllerContext(controller, getIDependOn(), getDependentState());
+ }
+
+ if (context == null)
+ {
+ setResolved(false);
+ ControllerContext unresolvedContext = getControllerContext(controller, getIDependOn(), null);
+ if (unresolvedContext != null && ControllerMode.ON_DEMAND.equals(unresolvedContext.getMode()))
+ {
+ try
+ {
+ controller.enableOnDemand(unresolvedContext);
+ }
+ catch (Throwable ignored)
+ {
+ if (log.isTraceEnabled())
+ log.trace("Unexpected error", ignored);
+ }
+ }
+ }
+ else
+ {
+ addDependsOnMe(controller, context);
+ setResolved(true);
+ }
+
+ if (previous != isResolved())
+ {
+ flushJBossObjectCache();
+ if (log.isTraceEnabled())
+ {
+ if (isResolved())
+ log.trace("Resolved " + this);
+ else
+ log.trace("Unresolved " + this);
+ }
+ }
+ return isResolved();
+ }
+ return super.resolve(controller);
+ }
+
+ protected void toHumanReadableString(StringBuilder builder)
+ {
+ super.toHumanReadableString(builder);
+ builder.append("search=").append(search);
+ }
+}
Modified: projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/spi/graph/SearchInfo.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/spi/graph/SearchInfo.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/dependency/src/main/java/org/jboss/dependency/spi/graph/SearchInfo.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -22,6 +22,7 @@
package org.jboss.dependency.spi.graph;
import java.util.Map;
+import javax.xml.bind.annotation.XmlTransient;
/**
* Search info.
@@ -41,6 +42,7 @@
*
* @return the type
*/
+ @XmlTransient
String getType();
/**
@@ -49,6 +51,7 @@
*
* @return the additional info
*/
+ @XmlTransient
Map<String, ?> getInfo();
/**
@@ -60,5 +63,6 @@
*
* @return the strategy or null depending on GraphContorller
*/
+ @XmlTransient
LookupStrategy getStrategy();
}
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Inject.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Inject.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Inject.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -73,6 +73,13 @@
String dependentState() default "";
/**
+ * Get search type.
+ *
+ * @return the search type
+ */
+ String search() default "";
+
+ /**
* Get autowire type.
* Default is by class.
*
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Search.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Search.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Search.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -33,6 +33,7 @@
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
+ at Deprecated
public @interface Search
{
/**
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractConstructorMetaData.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractConstructorMetaData.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractConstructorMetaData.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -265,6 +265,9 @@
classInfo = configurator.getClassInfo(factoryClassName, cl);
}
// should be parameter
+ if (previous instanceof ParameterMetaData == false)
+ throw new IllegalArgumentException("Previous node is not ParameterMetaData as expected: " + previous);
+
ParameterMetaData parameter = (ParameterMetaData) previous;
String[] parameterTypes = Configurator.getParameterTypes(false, parameters);
MethodInfo methodInfo = Configurator.findMethodInfo(classInfo, factoryMethod, parameterTypes, factoryClassName != null, true);
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDemandMetaData.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDemandMetaData.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDemandMetaData.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -47,8 +47,8 @@
/**
* A demand.
*
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
* @author <a href="ales.justin at jboss.com">Ales Justin</a>
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
* @version $Revision$
*/
@XmlType(name="demandsType")
@@ -63,6 +63,9 @@
/** When the dependency is required */
protected ControllerState whenRequired = ControllerState.DESCRIBED;
+ /** The target/dependency state */
+ protected ControllerState targetState;
+
/** The transformer */
protected String transformer;
@@ -107,6 +110,17 @@
flushJBossObjectCache();
}
+ /**
+ * Set the target/dependency state.
+ *
+ * @param targetState the target state
+ */
+ @XmlAttribute(name="targetState")
+ public void setTargetState(ControllerState targetState)
+ {
+ this.targetState = targetState;
+ }
+
public Object getDemand()
{
return demand;
@@ -117,6 +131,11 @@
return whenRequired;
}
+ public ControllerState getTargetState()
+ {
+ return targetState;
+ }
+
/**
* Get the transformer class name.
*
@@ -166,6 +185,8 @@
buffer.append("demand=").append(demand);
if (whenRequired != null)
buffer.append(" whenRequired=").append(whenRequired.getStateString());
+ if (targetState != null)
+ buffer.append(" targetState=").append(targetState.getStateString());
}
public void toShortString(JBossStringBuilder buffer)
@@ -233,7 +254,13 @@
public boolean resolve(Controller controller)
{
Object name = getDemandObject();
- ControllerContext context = controller.getInstalledContext(name);
+
+ ControllerContext context;
+ if (targetState == null)
+ context = controller.getInstalledContext(name);
+ else
+ context = controller.getContext(name, targetState);
+
if (context != null)
{
setIDependOn(context.getName());
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -21,29 +21,34 @@
*/
package org.jboss.beans.metadata.plugins;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlAnyElement;
import org.jboss.beans.metadata.spi.MetaDataVisitor;
import org.jboss.beans.metadata.spi.ValueMetaData;
import org.jboss.dependency.plugins.AbstractDependencyItem;
+import org.jboss.dependency.plugins.graph.Search;
+import org.jboss.dependency.plugins.graph.SearchDependencyItem;
import org.jboss.dependency.spi.Controller;
import org.jboss.dependency.spi.ControllerContext;
import org.jboss.dependency.spi.ControllerState;
import org.jboss.dependency.spi.DependencyItem;
import org.jboss.dependency.spi.dispatch.AttributeDispatchContext;
+import org.jboss.dependency.spi.graph.LookupStrategy;
+import org.jboss.dependency.spi.graph.SearchInfo;
import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.managed.api.annotation.ManagementProperty;
import org.jboss.reflect.spi.TypeInfo;
import org.jboss.util.JBossStringBuilder;
import org.jboss.xb.annotations.JBossXmlAttribute;
-import org.jboss.managed.api.annotation.ManagementProperty;
/**
* Dependency value.
*
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
* @author <a href="ales.justin at jboss.com">Ales Justin</a>
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author Radim Marek (obrien)
* @version $Revision$
*/
@XmlType(name="injectionType")
@@ -77,6 +82,12 @@
protected ControllerState dependentState;
/**
+ * The search type
+ */
+ protected SearchInfo search = Search.DEFAULT;
+
+
+ /**
* Create a new dependency value
*/
public AbstractDependencyValueMetaData()
@@ -138,6 +149,11 @@
flushJBossObjectCache();
}
+ /**
+ * Get when required state.
+ *
+ * @return the when required state
+ */
public ControllerState getWhenRequiredState()
{
return whenRequiredState;
@@ -155,6 +171,11 @@
flushJBossObjectCache();
}
+ /**
+ * Get the required state of dependency.
+ *
+ * @return the required dependency state
+ */
public ControllerState getDependentState()
{
return dependentState;
@@ -179,6 +200,37 @@
setValue(new AbstractValueMetaData(value));
}
+ /**
+ * Set search type.
+ *
+ * @param search the search type
+ */
+ @XmlAttribute(name = "search")
+ public void setSearch(SearchInfo search)
+ {
+ this.search = search;
+ }
+
+ /**
+ * Get search type.
+ *
+ * @return the search type
+ */
+ public SearchInfo getSearch()
+ {
+ return search;
+ }
+
+ /**
+ * Is search applied.
+ *
+ * @return true if search is applied
+ */
+ protected boolean isSearchApplied()
+ {
+ return (search != Search.DEFAULT);
+ }
+
protected boolean isLookupValid(ControllerContext lookup)
{
return (lookup != null);
@@ -189,6 +241,12 @@
return false;
}
+ /**
+ * Add optional dependency.
+ *
+ * @param controller the controller
+ * @param lookup the lookup context
+ */
protected void addOptionalDependency(Controller controller, ControllerContext lookup)
{
OptionalDependencyItem dependency = new OptionalDependencyItem(context.getName(), lookup.getName(), lookup.getState());
@@ -196,6 +254,20 @@
lookup.getDependencyInfo().addDependsOnMe(dependency);
}
+ /**
+ * Get controller context.
+ *
+ * @param name the name
+ * @param state the state
+ * @return the controller context
+ */
+ protected ControllerContext getControllerContext(Object name, ControllerState state)
+ {
+ Controller controller = context.getController();
+ LookupStrategy strategy = search.getStrategy();
+ return strategy.getContext(controller, name, state);
+ }
+
public Object getValue(TypeInfo info, ClassLoader cl) throws Throwable
{
ControllerState state = dependentState;
@@ -203,16 +275,21 @@
state = ControllerState.INSTALLED;
if (context == null)
throw new IllegalStateException("No context for " + this);
- Controller controller = context.getController();
- ControllerContext lookup = controller.getContext(getUnderlyingValue(), state);
+ ControllerContext lookup = getControllerContext(getUnderlyingValue(), state);
+
if (isLookupValid(lookup) == false)
throw new Error("Should not be here - dependency failed - " + this);
if (lookup == null)
+ {
return null;
+ }
else if (isOptional())
+ {
+ Controller controller = context.getController();
addOptionalDependency(controller, lookup);
+ }
Object result;
if (property != null && property.length() > 0)
@@ -242,6 +319,9 @@
public void initialVisit(MetaDataVisitor visitor)
{
+ if (search == null)
+ throw new IllegalArgumentException("Null search");
+
context = visitor.getControllerContext();
ControllerState whenRequired = whenRequiredState;
@@ -259,7 +339,15 @@
Object name = context.getName();
Object iDependOn = getUnderlyingValue();
- DependencyItem item = new AbstractDependencyItem(name, iDependOn, whenRequired, dependentState);
+ DependencyItem item;
+ if (isSearchApplied())
+ {
+ item = new SearchDependencyItem(name, iDependOn, whenRequired, dependentState, search);
+ }
+ else
+ {
+ item = new AbstractDependencyItem(name, iDependOn, whenRequired, dependentState);
+ }
visitor.addDependency(item);
}
super.initialVisit(visitor);
@@ -274,6 +362,8 @@
buffer.append(" whenRequiredState=").append(whenRequiredState.getStateString());
if (dependentState != null)
buffer.append(" dependentState=").append(dependentState.getStateString());
+ if (isSearchApplied())
+ buffer.append(" search=").append(search);
}
public AbstractDependencyValueMetaData clone()
@@ -284,11 +374,11 @@
/**
* Optional depedency item.
*/
- protected class OptionalDependencyItem extends AbstractDependencyItem
+ protected class OptionalDependencyItem extends SearchDependencyItem
{
public OptionalDependencyItem(Object name, Object iDependOn, ControllerState dependentState)
{
- super(name, iDependOn, optionalWhenRequired, dependentState);
+ super(name, iDependOn, optionalWhenRequired, dependentState, search);
setResolved(true);
}
}
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -31,11 +31,10 @@
import org.jboss.beans.metadata.spi.MetaDataVisitor;
import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
import org.jboss.dependency.plugins.AttributeCallbackItem;
-import org.jboss.dependency.spi.Controller;
import org.jboss.dependency.spi.ControllerContext;
import org.jboss.dependency.spi.ControllerState;
import org.jboss.dependency.spi.DependencyItem;
-import org.jboss.kernel.plugins.dependency.ClassContextDependencyItem;
+import org.jboss.kernel.plugins.dependency.SearchClassContextDependencyItem;
import org.jboss.reflect.spi.TypeInfo;
import org.jboss.util.JBossStringBuilder;
@@ -132,6 +131,11 @@
this.propertyMetaData = propertyMetaData;
}
+ /**
+ * Add install/callback item.
+ *
+ * @param name the callback name
+ */
protected void addInstallItem(Object name)
{
if (propertyMetaData == null)
@@ -165,18 +169,18 @@
ControllerState state = dependentState;
if (state == null)
state = ControllerState.INSTANTIATED;
- Controller controller = context.getController();
- ControllerContext lookup = controller.getContext(getUnderlyingValue(), state);
+
+ ControllerContext lookup = getControllerContext(getUnderlyingValue(), state);
if (lookup == null)
throw new Error("Should not be here - dependency failed - " + this);
+
return fromContext.executeLookup(lookup);
}
// by class type
if (getUnderlyingValue() == null)
{
- Controller controller = context.getController();
- ControllerContext lookup = controller.getInstalledContext(info.getType());
+ ControllerContext lookup = getControllerContext(info.getType(), ControllerState.INSTALLED);
if (lookup == null)
{
if (InjectOption.STRICT.equals(injectionOption))
@@ -216,7 +220,9 @@
{
// check if dependent is not set when used on itself
if (super.getUnderlyingValue() == null && dependentState == null)
- dependentState = fromContext.getWhenValid();
+ {
+ dependentState = fromContext.getWhenValid();
+ }
super.initialVisit(visitor);
return;
@@ -284,11 +290,12 @@
{
whenRequired = visitor.getContextState();
}
- DependencyItem item = new ClassContextDependencyItem(
+ DependencyItem item = new SearchClassContextDependencyItem(
context.getName(),
injectionClass,
whenRequired,
- dependentState);
+ dependentState,
+ search);
visitor.addDependency(item);
}
else
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractLifecycleMetaData.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractLifecycleMetaData.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractLifecycleMetaData.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -181,6 +181,9 @@
public TypeInfo getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
{
+ if (previous instanceof ParameterMetaData == false)
+ throw new IllegalArgumentException("Previous node is not ParameterMetaData as expected: " + previous);
+
ParameterMetaData parameter = (ParameterMetaData) previous;
KernelControllerContext context = visitor.getControllerContext();
String method = (methodName != null ? methodName : type);
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractSearchValueMetaData.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractSearchValueMetaData.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractSearchValueMetaData.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -21,30 +21,33 @@
*/
package org.jboss.beans.metadata.plugins;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlType;
import org.jboss.beans.metadata.spi.MetaDataVisitor;
import org.jboss.beans.metadata.spi.ValueMetaData;
-import org.jboss.dependency.plugins.AbstractDependencyItem;
import org.jboss.dependency.plugins.graph.Search;
+import org.jboss.dependency.plugins.graph.SearchDependencyItem;
import org.jboss.dependency.spi.Controller;
import org.jboss.dependency.spi.ControllerContext;
import org.jboss.dependency.spi.ControllerState;
import org.jboss.dependency.spi.DependencyItem;
import org.jboss.dependency.spi.dispatch.AttributeDispatchContext;
import org.jboss.dependency.spi.graph.GraphController;
+import org.jboss.dependency.spi.graph.SearchInfo;
+import org.jboss.managed.api.annotation.ManagementProperty;
import org.jboss.reflect.spi.TypeInfo;
import org.jboss.util.JBossStringBuilder;
import org.jboss.xb.annotations.JBossXmlAttribute;
-import org.jboss.managed.api.annotation.ManagementProperty;
/**
- * Search value metadata - TODO - still experimental
+ * Search value metadata.
*
+ * @deprecated use <inject search="search-type"/>
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
*/
+ at Deprecated
@XmlType(name="searchType")
public class AbstractSearchValueMetaData extends AbstractValueMetaData
{
@@ -52,7 +55,7 @@
private static final long serialVersionUID = 1L;
private ControllerState state;
- private org.jboss.dependency.plugins.graph.Search search;
+ private SearchInfo search;
private String property;
private ControllerContext context;
@@ -62,7 +65,7 @@
{
}
- public AbstractSearchValueMetaData(Object value, ControllerState state, Search search, String property)
+ public AbstractSearchValueMetaData(Object value, ControllerState state, SearchInfo search, String property)
{
super(value);
if (search == null)
@@ -122,7 +125,7 @@
if (dependentState == null)
dependentState = ControllerState.INSTALLED;
- DependencyItem item = new SearchDependencyItem(name, iDependOn, whenRequired, dependentState);
+ DependencyItem item = new SearchDependencyItem(name, iDependOn, whenRequired, dependentState, search);
visitor.addDependency(item);
super.describeVisit(visitor);
@@ -176,39 +179,4 @@
super.toShortString(buffer);
buffer.append("search=").append(search);
}
-
- private class SearchDependencyItem extends AbstractDependencyItem
- {
- private SearchDependencyItem(Object name, Object iDependOn, ControllerState whenRequired, ControllerState dependentState)
- {
- super(name, iDependOn, whenRequired, dependentState);
- }
-
- public boolean resolve(Controller controller)
- {
- if (controller instanceof GraphController)
- {
- GraphController gc = (GraphController)controller;
- ControllerContext context = gc.getContext(getIDependOn(), getDependentState(), search);
- if (context != null)
- {
- setIDependOn(context.getName());
- addDependsOnMe(controller, context);
- setResolved(true);
- }
- else
- {
- setResolved(false);
- }
- return isResolved();
- }
- return false;
- }
-
- protected void toHumanReadableString(StringBuilder builder)
- {
- super.toHumanReadableString(builder);
- builder.append("search=").append(search);
- }
- }
}
Copied: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/SearchInfoValueAdapter.java (from rev 84513, projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/SearchInfoValueAdapter.java)
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/SearchInfoValueAdapter.java (rev 0)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/SearchInfoValueAdapter.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -0,0 +1,39 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.beans.metadata.plugins;
+
+import org.jboss.dependency.plugins.graph.Search;
+import org.jboss.xb.binding.sunday.unmarshalling.ValueAdapter;
+
+/**
+ * SearchInfoValueAdapter.
+ *
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ */
+public class SearchInfoValueAdapter implements ValueAdapter
+{
+ @SuppressWarnings("unchecked")
+ public Object cast(Object o, Class c)
+ {
+ return Search.getInstance((String)o);
+ }
+}
\ No newline at end of file
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -43,6 +43,8 @@
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.AbstractFeatureMetaData;
+import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
import org.jboss.beans.metadata.plugins.AbstractInstallMetaData;
import org.jboss.beans.metadata.plugins.AbstractListMetaData;
import org.jboss.beans.metadata.plugins.AbstractMapMetaData;
@@ -54,7 +56,6 @@
import org.jboss.beans.metadata.plugins.DirectAnnotationMetaData;
import org.jboss.beans.metadata.plugins.StringValueMetaData;
import org.jboss.beans.metadata.plugins.ThisValueMetaData;
-import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
import org.jboss.beans.metadata.spi.AnnotationMetaData;
import org.jboss.beans.metadata.spi.BeanMetaData;
import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
@@ -71,6 +72,7 @@
import org.jboss.dependency.spi.ControllerMode;
import org.jboss.dependency.spi.ControllerState;
import org.jboss.dependency.spi.ErrorHandlingMode;
+import org.jboss.dependency.spi.graph.SearchInfo;
/**
* Helper class.
@@ -649,7 +651,49 @@
return this;
}
+ public BeanMetaDataBuilder addPropertyAnnotation(String name, String annotation)
+ {
+ AnnotationMetaData amd = createAnnotationMetaData(annotation);
+ return addPropertyAnnotation(name, amd);
+ }
+
+ public BeanMetaDataBuilder addPropertyAnnotation(String name, String annotation, boolean replace)
+ {
+ AnnotationMetaData amd = createAnnotationMetaData(annotation, replace);
+ return addPropertyAnnotation(name, amd);
+ }
+
+ public BeanMetaDataBuilder addPropertyAnnotation(String name, Annotation annotation)
+ {
+ AnnotationMetaData amd = createAnnotationMetaData(annotation);
+ return addPropertyAnnotation(name, amd);
+ }
+
/**
+ * Add property annotation metadata.
+ *
+ * @param name the property name
+ * @param amd the annotation metadata
+ * @return this builder
+ */
+ protected BeanMetaDataBuilder addPropertyAnnotation(String name, AnnotationMetaData amd)
+ {
+ PropertyMetaData pmd = beanMetaData.getProperty(name);
+ Set<AnnotationMetaData> annotations = pmd.getAnnotations();
+ if (annotations == null)
+ {
+ if (pmd instanceof AbstractFeatureMetaData == false)
+ throw new IllegalArgumentException("PropertyMetaData is not AbstractFeatureMetaData instance: " + pmd);
+
+ annotations = new HashSet<AnnotationMetaData>();
+ AbstractFeatureMetaData afmd = AbstractFeatureMetaData.class.cast(pmd);
+ afmd.setAnnotations(annotations);
+ }
+ annotations.add(amd);
+ return this;
+ }
+
+ /**
* Remove previous matching property.
*
* @param properties the properties
@@ -837,20 +881,23 @@
*
* @param demand the demand
* @param whenRequired the when required
+ * @param targetState the target state
* @param transformer the transformer
* @return the demand metadata
*/
- protected DemandMetaData createDemandMetaData(Object demand, ControllerState whenRequired, String transformer)
+ protected DemandMetaData createDemandMetaData(Object demand, ControllerState whenRequired, ControllerState targetState, String transformer)
{
AbstractDemandMetaData admd = new AbstractDemandMetaData(demand);
if (whenRequired != null)
admd.setWhenRequired(whenRequired);
+ if (targetState != null)
+ admd.setTargetState(targetState);
if (transformer != null)
admd.setTransformer(transformer);
return admd;
}
- public BeanMetaDataBuilder addDemand(Object demand, ControllerState whenRequired, String transformer)
+ public BeanMetaDataBuilder addDemand(Object demand, ControllerState whenRequired, ControllerState targetState, String transformer)
{
Set<DemandMetaData> demands = beanMetaData.getDemands();
if (demands == null)
@@ -858,7 +905,7 @@
demands = new HashSet<DemandMetaData>();
beanMetaData.setDemands(demands);
}
- demands.add(createDemandMetaData(demand, whenRequired, transformer));
+ demands.add(createDemandMetaData(demand, whenRequired, targetState, transformer));
return this;
}
@@ -994,13 +1041,15 @@
return new AbstractDependencyValueMetaData(bean, property);
}
- public ValueMetaData createInject(Object bean, String property, ControllerState whenRequired, ControllerState dependentState)
+ public ValueMetaData createInject(Object bean, String property, ControllerState whenRequired, ControllerState dependentState, SearchInfo search)
{
AbstractDependencyValueMetaData result = createAbstractDependencyValueMetaData(bean, property);
if (whenRequired != null)
result.setWhenRequiredState(whenRequired);
if (dependentState != null)
result.setDependentState(dependentState);
+ if (search != null)
+ result.setSearch(search);
return result;
}
@@ -1014,7 +1063,7 @@
return new AbstractInjectionValueMetaData();
}
- public ValueMetaData createContextualInject(ControllerState whenRequired, ControllerState dependentState, AutowireType autowire, InjectOption option)
+ public ValueMetaData createContextualInject(ControllerState whenRequired, ControllerState dependentState, AutowireType autowire, InjectOption option, SearchInfo search)
{
AbstractInjectionValueMetaData result = createAbstractInjectionValueMetaData();
if (whenRequired != null)
@@ -1025,6 +1074,8 @@
result.setInjectionType(autowire);
if (option != null)
result.setInjectionOption(option);
+ if (search != null)
+ result.setSearch(search);
return result;
}
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/policy/package-info.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/policy/package-info.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/plugins/policy/package-info.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -22,14 +22,17 @@
@JBossXmlAdaptedTypes
({
@JBossXmlAdaptedType(type=Cardinality.class, valueAdapter=CardinalityValueAdapter.class),
- @JBossXmlAdaptedType(type=ControllerState.class, valueAdapter=ControllerStateValueAdapter.class)
+ @JBossXmlAdaptedType(type=ControllerState.class, valueAdapter=ControllerStateValueAdapter.class),
+ @JBossXmlAdaptedType(type=SearchInfo.class, valueAdapter=SearchInfoValueAdapter.class)
})
package org.jboss.beans.metadata.plugins.policy;
import org.jboss.beans.metadata.plugins.CardinalityValueAdapter;
import org.jboss.beans.metadata.plugins.ControllerStateValueAdapter;
+import org.jboss.beans.metadata.plugins.SearchInfoValueAdapter;
import org.jboss.dependency.spi.Cardinality;
import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.graph.SearchInfo;
import org.jboss.xb.annotations.JBossXmlAdaptedType;
import org.jboss.xb.annotations.JBossXmlAdaptedTypes;
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/spi/DemandMetaData.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/spi/DemandMetaData.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/spi/DemandMetaData.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -28,6 +28,7 @@
* Metadata about what a bean demands.
*
* @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
* @version $Revision$
*/
public interface DemandMetaData extends MetaDataVisitorNode, JBossInterface
@@ -45,4 +46,11 @@
* @return when the dependency is required
*/
ControllerState getWhenRequired();
+
+ /**
+ * Get the target state
+ *
+ * @return the target state
+ */
+ ControllerState getTargetState();
}
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -36,12 +36,13 @@
import org.jboss.beans.metadata.spi.BeanMetaData;
import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
import org.jboss.beans.metadata.spi.ClassLoaderMetaData;
+import org.jboss.beans.metadata.spi.RelatedClassMetaData;
import org.jboss.beans.metadata.spi.ValueMetaData;
-import org.jboss.beans.metadata.spi.RelatedClassMetaData;
import org.jboss.dependency.spi.Cardinality;
import org.jboss.dependency.spi.ControllerMode;
import org.jboss.dependency.spi.ControllerState;
import org.jboss.dependency.spi.ErrorHandlingMode;
+import org.jboss.dependency.spi.graph.SearchInfo;
/**
* BeanMetaDataBuilder contract.
@@ -87,7 +88,9 @@
return BeanMetaDataBuilderFactory.createBuilder((AbstractBeanMetaData)beanMetaData);
}
else
- throw new IllegalArgumentException("Invalid type of bean metadata");
+ {
+ throw new IllegalArgumentException("Invalid type of bean metadata: " + beanMetaData);
+ }
}
/**
@@ -460,6 +463,34 @@
public abstract BeanMetaDataBuilder addPropertyMetaData(String name, Collection<ValueMetaData> value);
/**
+ * Add a property annotation.
+ *
+ * @param name the property name
+ * @param annotation the annotation
+ * @return the builder
+ */
+ public abstract BeanMetaDataBuilder addPropertyAnnotation(String name, String annotation);
+
+ /**
+ * Add a property annotation.
+ *
+ * @param name the property name
+ * @param annotation the annotation
+ * @param replace the replace flag
+ * @return the builder
+ */
+ public abstract BeanMetaDataBuilder addPropertyAnnotation(String name, String annotation, boolean replace);
+
+ /**
+ * Add a property annotation.
+ *
+ * @param name the property name
+ * @param annotation the annotation
+ * @return the builder
+ */
+ public abstract BeanMetaDataBuilder addPropertyAnnotation(String name, Annotation annotation);
+
+ /**
* Add a property, replace it if it already exists
*
* @param name the property name
@@ -691,9 +722,23 @@
* @param transformer the transformer
* @return the builder
*/
- public abstract BeanMetaDataBuilder addDemand(Object demand, ControllerState whenRequired, String transformer);
+ public BeanMetaDataBuilder addDemand(Object demand, ControllerState whenRequired, String transformer)
+ {
+ return addDemand(demand, whenRequired, null, transformer);
+ }
/**
+ * Add a demand
+ *
+ * @param demand the demand
+ * @param whenRequired when the demand is required
+ * @param targetState the target state
+ * @param transformer the transformer
+ * @return the builder
+ */
+ public abstract BeanMetaDataBuilder addDemand(Object demand, ControllerState whenRequired, ControllerState targetState, String transformer);
+
+ /**
* Add a dependency
*
* @param dependency the dependency
@@ -1611,9 +1656,24 @@
* @param dependentState the state of the injected bean
* @return the injection
*/
- public abstract ValueMetaData createInject(Object bean, String property, ControllerState whenRequired, ControllerState dependentState);
+ public ValueMetaData createInject(Object bean, String property, ControllerState whenRequired, ControllerState dependentState)
+ {
+ return createInject(bean, property, whenRequired, dependentState, null);
+ }
/**
+ * Create an injection
+ *
+ * @param bean the bean to inject
+ * @param property the property of the bean
+ * @param whenRequired when the injection is required
+ * @param dependentState the state of the injected bean
+ * @param search the search info
+ * @return the injection
+ */
+ public abstract ValueMetaData createInject(Object bean, String property, ControllerState whenRequired, ControllerState dependentState, SearchInfo search);
+
+ /**
* Create contextual injection.
*
* @return the contextual injection
@@ -1644,9 +1704,24 @@
* @param option the inject option
* @return the contextual injection
*/
- public abstract ValueMetaData createContextualInject(ControllerState whenRequired, ControllerState dependentState, AutowireType autowire, InjectOption option);
+ public ValueMetaData createContextualInject(ControllerState whenRequired, ControllerState dependentState, AutowireType autowire, InjectOption option)
+ {
+ return createContextualInject(whenRequired, dependentState, autowire, option, null);
+ }
/**
+ * Create contextual injection.
+ *
+ * @param whenRequired when the injection is required
+ * @param dependentState the state of the injected bean
+ * @param autowire the autowire type
+ * @param option the inject option
+ * @param search the search info
+ * @return the contextual injection
+ */
+ public abstract ValueMetaData createContextualInject(ControllerState whenRequired, ControllerState dependentState, AutowireType autowire, InjectOption option, SearchInfo search);
+
+ /**
* Create a new collection
*
* @return the collection
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/spi/factory/GenericBeanFactoryMetaData.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/spi/factory/GenericBeanFactoryMetaData.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/spi/factory/GenericBeanFactoryMetaData.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -23,9 +23,7 @@
import java.io.Serializable;
import java.util.Collections;
-import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.xml.bind.annotation.XmlAttribute;
@@ -60,8 +58,6 @@
import org.jboss.beans.metadata.spi.DependencyMetaData;
import org.jboss.beans.metadata.spi.InstallMetaData;
import org.jboss.beans.metadata.spi.LifecycleMetaData;
-import org.jboss.beans.metadata.spi.MetaDataVisitor;
-import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
import org.jboss.beans.metadata.spi.PropertyMetaData;
import org.jboss.beans.metadata.spi.SupplyMetaData;
import org.jboss.beans.metadata.spi.ValueMetaData;
@@ -75,6 +71,7 @@
* GenericBeanFactoryMetaData.
*
* @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
* @version $Revision: 59429 $
*/
@XmlRootElement(name="beanfactory")
@@ -626,28 +623,4 @@
}
return builder.getBeanMetaData();
}
-
- /**
- * PropertyMap.
- */
- private class PropertyMap extends HashMap<String, ValueMetaData> implements MetaDataVisitorNode
- {
- /** The serialVersionUID */
- private static final long serialVersionUID = -4295725682462294630L;
-
- public void initialVisit(MetaDataVisitor visitor)
- {
- visitor.initialVisit(this);
- }
-
- public void describeVisit(MetaDataVisitor vistor)
- {
- vistor.describeVisit(this);
- }
-
- public Iterator<? extends MetaDataVisitorNode> getChildren()
- {
- return values().iterator();
- }
- }
}
\ No newline at end of file
Copied: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/spi/factory/PropertyMap.java (from rev 84513, projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/spi/factory/PropertyMap.java)
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/spi/factory/PropertyMap.java (rev 0)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/beans/metadata/spi/factory/PropertyMap.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -0,0 +1,193 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2007, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.beans.metadata.spi.factory;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.Stack;
+
+import org.jboss.beans.info.spi.BeanInfo;
+import org.jboss.beans.info.spi.PropertyInfo;
+import org.jboss.beans.metadata.plugins.TypeProvider;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.MetaDataVisitor;
+import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
+import org.jboss.beans.metadata.spi.RelatedClassMetaData;
+import org.jboss.beans.metadata.spi.ValueMetaData;
+import org.jboss.kernel.spi.config.KernelConfigurator;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.reflect.spi.TypeInfo;
+import org.jboss.util.JBossObject;
+import org.jboss.util.JBossStringBuilder;
+
+/**
+ * PropertyMap.
+ *
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ */
+class PropertyMap extends HashMap<String, ValueMetaData> implements MetaDataVisitorNode, TypeProvider
+{
+ /** The serialVersionUID */
+ private static final long serialVersionUID = -4295725682462294630L;
+
+ public void initialVisit(MetaDataVisitor visitor)
+ {
+ visitor.initialVisit(this);
+ }
+
+ public void describeVisit(MetaDataVisitor vistor)
+ {
+ vistor.describeVisit(this);
+ }
+
+ public Iterator<? extends MetaDataVisitorNode> getChildren()
+ {
+ return values().iterator();
+ }
+
+ public ValueMetaData put(String name, ValueMetaData value)
+ {
+ ValueInfo info = new ValueInfo(name, value);
+ return super.put(name, info);
+ }
+
+ public TypeInfo getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+ {
+ ValueInfo valueInfo = null;
+ for (ValueMetaData value : values())
+ {
+ ValueInfo vi = ValueInfo.class.cast(value);
+ if (vi == previous)
+ {
+ valueInfo = vi;
+ break;
+ }
+ }
+ if (valueInfo == null)
+ throw new IllegalArgumentException("No matching value (" + previous + ") found: " + values());
+
+ KernelControllerContext context = visitor.getControllerContext();
+ BeanMetaData bmd = context.getBeanMetaData();
+ Set<RelatedClassMetaData> related = bmd.getRelated();
+ if (related == null || related.size() != 1)
+ throw new IllegalArgumentException("Invalid information for contextual injection: " + bmd);
+ // TODO - perhaps match which related metadata is the right one
+ RelatedClassMetaData beanClassMetaData = related.iterator().next();
+ KernelConfigurator configurator = context.getKernel().getConfigurator();
+ BeanInfo beanInfo = configurator.getBeanInfo(beanClassMetaData.getClassName(), context.getClassLoader());
+ PropertyInfo pi = beanInfo.getProperty(valueInfo.name);
+ TypeInfo typeInfo = pi.getType();
+ if (typeInfo.isCollection() || typeInfo.isMap())
+ {
+ throw new IllegalArgumentException("Cannot handle collection or map: " + valueInfo);
+ }
+ return typeInfo;
+ }
+
+ private static class ValueInfo extends JBossObject implements ValueMetaData, Serializable, TypeProvider
+ {
+ private static final long serialVersionUID = 1L;
+
+ private String name;
+ private ValueMetaData value;
+
+ private ValueInfo(String name, ValueMetaData value)
+ {
+ this.name = name;
+ this.value = value;
+ }
+
+ public TypeInfo getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
+ {
+ Stack<MetaDataVisitorNode> visitorNodeStack = visitor.visitorNodeStack();
+ // see AbstractInjectionValueMetaData.describeVisit
+ MetaDataVisitorNode node = visitorNodeStack.pop();
+ try
+ {
+ if (node instanceof TypeProvider)
+ {
+ TypeProvider typeProvider = (TypeProvider) node;
+ return typeProvider.getType(visitor, this);
+ }
+ else
+ {
+ throw new IllegalArgumentException(TypeProvider.ERROR_MSG);
+ }
+ }
+ finally
+ {
+ visitorNodeStack.push(node);
+ }
+ }
+
+ public Object getUnderlyingValue()
+ {
+ return value.getUnderlyingValue();
+ }
+
+ public Object getValue(TypeInfo info, ClassLoader cl) throws Throwable
+ {
+ return value.getValue(info, cl);
+ }
+
+ public void initialVisit(MetaDataVisitor vistor)
+ {
+ vistor.initialVisit(this);
+ }
+
+ public void describeVisit(MetaDataVisitor vistor)
+ {
+ vistor.describeVisit(this);
+ }
+
+ public Iterator<? extends MetaDataVisitorNode> getChildren()
+ {
+ return Collections.singleton(value).iterator();
+ }
+
+ public void toShortString(JBossStringBuilder buffer)
+ {
+ value.toShortString(buffer);
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return value.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ return value.equals(obj);
+ }
+
+ public String toShortString()
+ {
+ return value.toShortString();
+ }
+ }
+}
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/annotations/ValueUtil.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/annotations/ValueUtil.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/annotations/ValueUtil.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -21,29 +21,27 @@
*/
package org.jboss.kernel.plugins.annotations;
-import java.util.List;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Map;
-import java.util.HashMap;
+import java.util.List;
import org.jboss.beans.metadata.api.annotations.Inject;
+import org.jboss.beans.metadata.api.annotations.JavaBeanValue;
import org.jboss.beans.metadata.api.annotations.NullValue;
import org.jboss.beans.metadata.api.annotations.Parameter;
+import org.jboss.beans.metadata.api.annotations.Search;
import org.jboss.beans.metadata.api.annotations.StringValue;
import org.jboss.beans.metadata.api.annotations.ThisValue;
import org.jboss.beans.metadata.api.annotations.Value;
import org.jboss.beans.metadata.api.annotations.ValueFactory;
-import org.jboss.beans.metadata.api.annotations.JavaBeanValue;
-import org.jboss.beans.metadata.api.annotations.Search;
import org.jboss.beans.metadata.api.model.FromContext;
-import org.jboss.beans.metadata.spi.ValueMetaData;
-import org.jboss.beans.metadata.spi.ParameterMetaData;
import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
-import org.jboss.beans.metadata.plugins.AbstractValueFactoryMetaData;
import org.jboss.beans.metadata.plugins.AbstractParameterMetaData;
import org.jboss.beans.metadata.plugins.AbstractSearchValueMetaData;
+import org.jboss.beans.metadata.plugins.AbstractValueFactoryMetaData;
+import org.jboss.beans.metadata.spi.ParameterMetaData;
+import org.jboss.beans.metadata.spi.ValueMetaData;
import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.graph.SearchInfo;
/**
* Simple util class.
@@ -52,18 +50,6 @@
*/
final class ValueUtil
{
- /** The search types */
- private static final Map<String, org.jboss.dependency.plugins.graph.Search> types;
-
- static
- {
- types = new HashMap<String,org.jboss.dependency.plugins.graph.Search>();
- for (org.jboss.dependency.plugins.graph.Search search : org.jboss.dependency.plugins.graph.Search.values())
- {
- types.put(search.getType().toUpperCase(), search);
- }
- }
-
/**
* Does value already exist.
*
@@ -221,6 +207,8 @@
injection.setDependentState(new ControllerState(annotation.dependentState()));
if (isAttributePresent(annotation.whenRequired()))
injection.setWhenRequiredState(new ControllerState(annotation.whenRequired()));
+ if (isAttributePresent(annotation.search()))
+ injection.setSearch(org.jboss.dependency.plugins.graph.Search.getInstance(annotation.search()));
injection.setInjectionOption(annotation.option());
injection.setInjectionType(annotation.type());
if (FromContext.NOOP.equals(annotation.fromContext()) == false)
@@ -266,13 +254,11 @@
* @param annotation the annotation
* @return search meta data
*/
+ @SuppressWarnings("deprecation")
static ValueMetaData createValueMetaData(Search annotation)
{
String searchType = annotation.type();
- org.jboss.dependency.plugins.graph.Search type = types.get(searchType.toUpperCase());
- if (type == null)
- throw new IllegalArgumentException("No such search type: " + searchType + ", available: " + Arrays.toString(org.jboss.dependency.plugins.graph.Search.values()));
-
+ SearchInfo type = org.jboss.dependency.plugins.graph.Search.getInstance(searchType);
ControllerState state = null;
if (isAttributePresent(annotation.dependentState()))
state = new ControllerState(annotation.dependentState());
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -39,7 +39,7 @@
public boolean resolve(Controller controller)
{
- ControllerContext context = controller.getInstalledContext(getIDependOn());
+ ControllerContext context = getControllerContext(controller);
if (context != null)
{
setIDependOn(context.getName());
@@ -52,6 +52,25 @@
}
return isResolved();
}
+
+ /**
+ * Get controller context.
+ *
+ * @param controller the controller
+ * @return controller context
+ */
+ protected ControllerContext getControllerContext(Controller controller)
+ {
+ ControllerState state = getDependentState();
+ if (state == null)
+ {
+ return controller.getInstalledContext(getIDependOn());
+ }
+ else
+ {
+ return controller.getContext(getIDependOn(), state);
+ }
+ }
}
Copied: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchClassContextDependencyItem.java (from rev 84513, projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchClassContextDependencyItem.java)
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchClassContextDependencyItem.java (rev 0)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchClassContextDependencyItem.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -0,0 +1,59 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.kernel.plugins.dependency;
+
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.graph.LookupStrategy;
+import org.jboss.dependency.spi.graph.SearchInfo;
+
+/**
+ * A search Class context dependencyItem.
+ *
+ * @author <a href="ales.justin at gmail.com">Ales Justin</a>
+ */
+public class SearchClassContextDependencyItem extends ClassDependencyItem
+{
+ private SearchInfo search;
+
+ public SearchClassContextDependencyItem(Object name, Class<?> demandClass, ControllerState whenRequired, ControllerState dependentState, SearchInfo search)
+ {
+ super(name, demandClass, whenRequired, dependentState);
+ if (search == null)
+ throw new IllegalArgumentException("Null search.");
+
+ this.search = search;
+ }
+
+ /**
+ * Get controller context.
+ *
+ * @param controller the controller
+ * @return controller context
+ */
+ protected ControllerContext getControllerContext(Controller controller)
+ {
+ LookupStrategy strategy = search.getStrategy();
+ return strategy.getContext(controller, getIDependOn(), ControllerState.INSTALLED);
+ }
+}
\ No newline at end of file
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/deployment/AbstractKernelDeployer.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/deployment/AbstractKernelDeployer.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/deployment/AbstractKernelDeployer.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -217,22 +217,21 @@
buffer.append("Incompletely deployed:\n");
if (errors.size() != 0)
{
- buffer.append("\n*** DEPLOYMENTS IN ERROR: Name -> Error\n");
+ buffer.append("\nDEPLOYMENTS IN ERROR:\n");
for (ControllerContext ctx : errors)
{
- buffer.append(ctx.getName()).append(" -> ").append(ctx.getError().toString()).append('\n');
+ buffer.append(String.format(" Deployment \"%s\" is in error due to: %s\n", ctx.getName(), ctx.getError()));
}
}
if (incomplete.size() != 0)
{
- buffer.append("\n*** DEPLOYMENTS MISSING DEPENDENCIES: Name -> Dependency{Required State:Actual State}\n");
+ buffer.append("\nDEPLOYMENTS MISSING DEPENDENCIES:\n");
for (ControllerContext ctx : incomplete)
{
Object name = ctx.getName();
- buffer.append(name).append(" -> ");
+ buffer.append(String.format(" Deployment \"%s\" is missing the following dependencies:\n", name));
DependencyInfo dependsInfo = ctx.getDependencyInfo();
Set<DependencyItem> depends = dependsInfo.getIDependOn(null);
- boolean first = true;
for (DependencyItem item : depends)
{
ControllerState dependentState = item.getDependentState();
@@ -262,29 +261,18 @@
if (print)
{
- if (first)
- first = false;
- else
- buffer.append(", ");
-
- buffer.append(iDependOn).append('{').append(dependentState.getStateString());
- buffer.append(':');
- if (iDependOn == null)
- {
- buffer.append("** UNRESOLVED " + item.toHumanReadableString() + " **");
- }
- else
- {
- if (other == null)
- buffer.append("** NOT FOUND **");
- else
- buffer.append(otherState.getStateString());
- }
- buffer.append('}');
+ buffer.append(String.format(" Dependency \"%s\" (should be in state \"%s\", but is actually %s)\n",
+ iDependOn,
+ dependentState.getStateString(),
+ iDependOn == null ?
+ String.format("unresolved (%s)",
+ item.toHumanReadableString()) :
+ other == null ?
+ "not found" :
+ String.format("in state \"%s\"", otherState.getStateString())));
}
}
}
- buffer.append('\n');
}
}
throw new IllegalStateException(buffer.toString());
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/deployment/package-info.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/deployment/package-info.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/java/org/jboss/kernel/plugins/deployment/package-info.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -22,14 +22,17 @@
@JBossXmlAdaptedTypes
({
@JBossXmlAdaptedType(type=Cardinality.class, valueAdapter=CardinalityValueAdapter.class),
- @JBossXmlAdaptedType(type=ControllerState.class, valueAdapter=ControllerStateValueAdapter.class)
+ @JBossXmlAdaptedType(type=ControllerState.class, valueAdapter=ControllerStateValueAdapter.class),
+ @JBossXmlAdaptedType(type=SearchInfo.class, valueAdapter=SearchInfoValueAdapter.class)
})
package org.jboss.kernel.plugins.deployment;
import org.jboss.beans.metadata.plugins.CardinalityValueAdapter;
import org.jboss.beans.metadata.plugins.ControllerStateValueAdapter;
+import org.jboss.beans.metadata.plugins.SearchInfoValueAdapter;
import org.jboss.dependency.spi.Cardinality;
import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.graph.SearchInfo;
import org.jboss.xb.annotations.JBossXmlAdaptedType;
import org.jboss.xb.annotations.JBossXmlAdaptedTypes;
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/main/resources/schema/jboss-beans-common_2_0.xsd
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/main/resources/schema/jboss-beans-common_2_0.xsd 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/main/resources/schema/jboss-beans-common_2_0.xsd 2009-02-20 12:40:45 UTC (rev 84514)
@@ -409,6 +409,7 @@
<xsd:attribute name="type" type="autowireTypeType" use="optional" default="ByClass"/>
<xsd:attribute name="option" type="optionType" use="optional" default="Strict"/>
<xsd:attribute name="fromContext" type="contextType" use="optional"/>
+ <xsd:attribute name="search" type="searchTypeType" use="optional" default="default"/>
</xsd:complexType>
<xsd:complexType name="searchType">
@@ -983,6 +984,7 @@
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="state" type="controllerStateType" use="optional"/>
+ <xsd:attribute name="targetState" type="controllerStateType" use="optional"/>
<xsd:attribute name="transformer" type="xsd:token" use="optional"/>
</xsd:extension>
</xsd:simpleContent>
Copied: projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/config/support/SimpleAnnotationImpl.java (from rev 84513, projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/config/support/SimpleAnnotationImpl.java)
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/config/support/SimpleAnnotationImpl.java (rev 0)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/config/support/SimpleAnnotationImpl.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -0,0 +1,40 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.config.support;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class SimpleAnnotationImpl implements SimpleAnnotation
+{
+ public String name()
+ {
+ return null;
+ }
+
+ public Class<? extends Annotation> annotationType()
+ {
+ return SimpleAnnotation.class;
+ }
+}
\ No newline at end of file
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/config/test/BeanMetaDataBuilderTestCase.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/config/test/BeanMetaDataBuilderTestCase.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/config/test/BeanMetaDataBuilderTestCase.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -36,15 +36,18 @@
import org.jboss.beans.metadata.plugins.AbstractRelatedClassMetaData;
import org.jboss.beans.metadata.plugins.InstallCallbackMetaData;
import org.jboss.beans.metadata.plugins.UninstallCallbackMetaData;
+import org.jboss.beans.metadata.plugins.AbstractDependencyValueMetaData;
import org.jboss.beans.metadata.plugins.builder.BeanMetaDataBuilderFactory;
+import org.jboss.beans.metadata.spi.AnnotationMetaData;
import org.jboss.beans.metadata.spi.BeanMetaData;
import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
import org.jboss.beans.metadata.spi.CallbackMetaData;
+import org.jboss.beans.metadata.spi.LifecycleMetaData;
+import org.jboss.beans.metadata.spi.PropertyMetaData;
import org.jboss.beans.metadata.spi.RelatedClassMetaData;
import org.jboss.beans.metadata.spi.ValueMetaData;
-import org.jboss.beans.metadata.spi.LifecycleMetaData;
-import org.jboss.beans.metadata.spi.PropertyMetaData;
import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.dependency.plugins.graph.Search;
import org.jboss.dependency.spi.Cardinality;
import org.jboss.dependency.spi.ControllerContext;
import org.jboss.dependency.spi.ControllerState;
@@ -56,6 +59,7 @@
import org.jboss.kernel.spi.dependency.KernelControllerContext;
import org.jboss.metadata.spi.MetaData;
import org.jboss.test.kernel.config.support.SimpleAnnotation;
+import org.jboss.test.kernel.config.support.SimpleAnnotationImpl;
import org.jboss.test.kernel.config.support.SimpleBean;
import org.jboss.test.kernel.config.support.SimpleCallbackBean;
import org.jboss.test.kernel.config.support.SimpleLifecycleBean;
@@ -190,6 +194,37 @@
}
@SuppressWarnings("deprecation")
+ public void testDemandWithTargetState() throws Throwable
+ {
+ BeanMetaDataBuilder demand = BeanMetaDataBuilderFactory.createBuilder("DemandBean", SimpleBean.class.getName());
+ demand.addDemand("SupplyBean", ControllerState.CREATE, ControllerState.START, null);
+ BeanMetaDataFactory demandBean = demand.getBeanMetaDataFactory();
+
+ BeanMetaDataBuilder supply = BeanMetaDataBuilderFactory.createBuilder("SupplyBean", SimpleLifecycleBean.class.getName());
+ BeanMetaDataFactory supplyBean = supply.getBeanMetaDataFactory();
+
+ AbstractKernelDeployment deployment = new AbstractKernelDeployment();
+ deployment.setBeanFactories(Arrays.asList(demandBean, supplyBean));
+
+ Kernel kernel = bootstrap();
+ KernelController controller = kernel.getController();
+ AbstractKernelDeployer deployer = new AbstractKernelDeployer(kernel);
+
+ deployer.deploy(deployment);
+ try
+ {
+ Object db = controller.getInstalledContext("DemandBean").getTarget();
+ assertNotNull(db);
+ Object sb = controller.getInstalledContext("SupplyBean").getTarget();
+ assertNotNull(sb);
+ }
+ finally
+ {
+ deployer.undeploy(deployment);
+ }
+ }
+
+ @SuppressWarnings("deprecation")
public void testDependency() throws Throwable
{
BeanMetaDataBuilder dependOn = BeanMetaDataBuilderFactory.createBuilder("DependOnBean", SimpleBean.class.getName());
@@ -926,4 +961,35 @@
assertNotNull(vmd);
assertNull(vmd.getUnderlyingValue());
}
+
+ public void testSearch() throws Throwable
+ {
+ BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder("test");
+ builder.addPropertyMetaData("ci", builder.createContextualInject(null, null, null, null, Search.WIDTH));
+ BeanMetaData bmd = builder.getBeanMetaData();
+ Set<PropertyMetaData> properties = bmd.getProperties();
+ assertNotNull(properties);
+ assertEquals(1, properties.size());
+ PropertyMetaData pmd = properties.iterator().next();
+ ValueMetaData vmd = pmd.getValue();
+ assertNotNull(vmd);
+ AbstractDependencyValueMetaData advmd = assertInstanceOf(vmd, AbstractDependencyValueMetaData.class);
+ assertEquals(Search.WIDTH, advmd.getSearch());
+ }
+
+ public void testPropertyAnnotations() throws Throwable
+ {
+ BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder("test");
+ builder.addPropertyMetaData("ci", builder.createContextualInject());
+ builder.addPropertyAnnotation("ci", new SimpleAnnotationImpl());
+ BeanMetaData bmd = builder.getBeanMetaData();
+
+ Set<PropertyMetaData> properties = bmd.getProperties();
+ assertNotNull(properties);
+ assertEquals(1, properties.size());
+ PropertyMetaData pmd = properties.iterator().next();
+ Set<AnnotationMetaData> annotations = pmd.getAnnotations();
+ assertNotNull(annotations);
+ assertEquals(1, annotations.size());
+ }
}
Copied: projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/support/FirstBean2.java (from rev 84513, projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/support/FirstBean2.java)
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/support/FirstBean2.java (rev 0)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/support/FirstBean2.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -0,0 +1,51 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.kernel.deployment.support;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class FirstBean2
+{
+ private FirstBean c;
+ private RealTM tm;
+
+ public FirstBean2(FirstBean c)
+ {
+ this.c = c;
+ }
+
+ public FirstBean getC()
+ {
+ return c;
+ }
+
+ public RealTM getTm()
+ {
+ return tm;
+ }
+
+ public void setTm(RealTM tm)
+ {
+ this.tm = tm;
+ }
+}
\ No newline at end of file
Copied: projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/test/BeanFactoryContextualInjectionTestCase.java (from rev 84513, projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/test/BeanFactoryContextualInjectionTestCase.java)
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/test/BeanFactoryContextualInjectionTestCase.java (rev 0)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/test/BeanFactoryContextualInjectionTestCase.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -0,0 +1,52 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.deployment.test;
+
+import junit.framework.Test;
+import org.jboss.beans.metadata.spi.factory.BeanFactory;
+import org.jboss.test.kernel.deployment.support.FirstBean2;
+
+/**
+ * BeanFactoryContextualInjectionTestCase.
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class BeanFactoryContextualInjectionTestCase extends AbstractDeploymentTest
+{
+ public static Test suite()
+ {
+ return suite(BeanFactoryContextualInjectionTestCase.class);
+ }
+
+ public BeanFactoryContextualInjectionTestCase(String name) throws Throwable
+ {
+ super(name);
+ }
+
+ public void testContextualInjection() throws Throwable
+ {
+ BeanFactory bf = assertBean("FirstBean", BeanFactory.class);
+ FirstBean2 bean = (FirstBean2)bf.createBean();
+ assertNotNull(bean.getC());
+ assertNotNull(bean.getTm());
+ }
+}
\ No newline at end of file
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/test/DeploymentTestSuite.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/test/DeploymentTestSuite.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/test/DeploymentTestSuite.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -75,6 +75,7 @@
suite.addTest(GetInstanceTestCase.suite());
suite.addTest(NullifyTestCase.suite());
suite.addTest(TransitiveBeansTestCase.suite());
+ suite.addTest(BeanFactoryContextualInjectionTestCase.suite());
// bean container tests
suite.addTest(BeanContainerUsageTestCase.suite());
suite.addTest(BeanContainerUsageMDTestCase.suite());
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/DemandJaxbTestCase.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/DemandJaxbTestCase.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/DemandJaxbTestCase.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -33,6 +33,7 @@
* Demand TestCase.
*
* @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
* @version $Revision: 40800 $
*/
public class DemandJaxbTestCase extends AbstractMCTest
@@ -62,6 +63,13 @@
assertEquals(ControllerState.CONFIGURED, demand.getWhenRequired());
}
+ public void testDemandWithTargetState() throws Exception
+ {
+ AbstractDemandMetaData demand = getDemand();
+ assertEquals("Demand", demand.getDemand());
+ assertEquals(ControllerState.CREATE, demand.getTargetState());
+ }
+
/* TODO
public void testDemandBadNoValue() throws Exception
{
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/DemandTestCase.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/DemandTestCase.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/DemandTestCase.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -34,6 +34,7 @@
* Demand TestCase.
*
* @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
* @version $Revision$
*/
public class DemandTestCase extends AbstractXMLTest
@@ -63,6 +64,13 @@
assertEquals(ControllerState.CONFIGURED, demand.getWhenRequired());
}
+ public void testDemandWithTargetState() throws Exception
+ {
+ AbstractDemandMetaData demand = getDemand("DemandWithTargetState.xml");
+ assertEquals("Demand", demand.getDemand());
+ assertEquals(ControllerState.CREATE, demand.getTargetState());
+ }
+
public void testDemandWithTransformer() throws Exception
{
AbstractDemandMetaData demand = getDemand("DemandWithTransformer.xml");
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionJaxbTestCase.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionJaxbTestCase.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionJaxbTestCase.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -28,6 +28,7 @@
import org.jboss.beans.metadata.plugins.AbstractDependencyValueMetaData;
import org.jboss.beans.metadata.spi.PropertyMetaData;
import org.jboss.beans.metadata.spi.ValueMetaData;
+import org.jboss.dependency.plugins.graph.Search;
import org.jboss.dependency.spi.ControllerState;
/**
@@ -76,6 +77,13 @@
assertEquals(ControllerState.CONFIGURED, dependency.getDependentState());
}
+ public void testInjectionWithSearch() throws Exception
+ {
+ AbstractDependencyValueMetaData dependency = getInjection();
+ assertEquals("Dummy", dependency.getValue());
+ assertEquals(Search.LEAVES, dependency.getSearch());
+ }
+
/* TODO
public void testInjectionBadNoBean() throws Exception
{
Modified: projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionTestCase.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionTestCase.java 2009-02-20 12:24:52 UTC (rev 84513)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionTestCase.java 2009-02-20 12:40:45 UTC (rev 84514)
@@ -24,13 +24,13 @@
import java.util.Set;
import junit.framework.Test;
-
+import org.jboss.beans.metadata.api.model.FromContext;
import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
import org.jboss.beans.metadata.plugins.AbstractDependencyValueMetaData;
-import org.jboss.beans.metadata.api.model.FromContext;
import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
import org.jboss.beans.metadata.spi.PropertyMetaData;
import org.jboss.beans.metadata.spi.ValueMetaData;
+import org.jboss.dependency.plugins.graph.Search;
import org.jboss.dependency.spi.ControllerState;
/**
@@ -100,6 +100,13 @@
assertEquals(FromContext.getInstance("name"), dependency.getFromContext());
}
+ public void testInjectionWithSearch() throws Exception
+ {
+ AbstractInjectionValueMetaData dependency = getInjection("InjectionWithSearch.xml");
+ assertEquals("Dummy", dependency.getValue());
+ assertEquals(Search.LEAVES, dependency.getSearch());
+ }
+
public static Test suite()
{
return suite(InjectionTestCase.class);
Copied: projects/microcontainer/branches/Branch_2_0/kernel/src/test/resources/org/jboss/test/kernel/deployment/test/BeanFactoryContextualInjectionTestCase.xml (from rev 84513, projects/microcontainer/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/test/BeanFactoryContextualInjectionTestCase.xml)
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/test/resources/org/jboss/test/kernel/deployment/test/BeanFactoryContextualInjectionTestCase.xml (rev 0)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/test/resources/org/jboss/test/kernel/deployment/test/BeanFactoryContextualInjectionTestCase.xml 2009-02-20 12:40:45 UTC (rev 84514)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+ <beanfactory name="FirstBean" class="org.jboss.test.kernel.deployment.support.FirstBean2">
+ <constructor>
+ <parameter class="org.jboss.test.kernel.deployment.support.FirstBean"><inject/></parameter>
+ </constructor>
+ <property name="tm"><inject/></property>
+ </beanfactory>
+
+ <bean name="C" class="org.jboss.test.kernel.deployment.support.FirstBean"/>
+ <bean name="RealTM" class="org.jboss.test.kernel.deployment.support.RealTM"/>
+
+</deployment>
Copied: projects/microcontainer/branches/Branch_2_0/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/DemandWithTargetState.xml (from rev 84513, projects/microcontainer/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/DemandWithTargetState.xml)
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/DemandWithTargetState.xml (rev 0)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/DemandWithTargetState.xml 2009-02-20 12:40:45 UTC (rev 84514)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
+ <demand targetState="Create">Demand</demand>
+</bean>
Copied: projects/microcontainer/branches/Branch_2_0/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/InjectionWithSearch.xml (from rev 84513, projects/microcontainer/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/InjectionWithSearch.xml)
===================================================================
--- projects/microcontainer/branches/Branch_2_0/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/InjectionWithSearch.xml (rev 0)
+++ projects/microcontainer/branches/Branch_2_0/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/InjectionWithSearch.xml 2009-02-20 12:40:45 UTC (rev 84514)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
+ <property name="Dummy">
+ <inject bean="Dummy" search="Leaves"/>
+ </property>
+</bean>
More information about the jboss-cvs-commits
mailing list