[jboss-cvs] JBossAS SVN: r83805 - in projects/microcontainer/trunk: dependency/src/main/java/org/jboss/dependency/plugins/graph and 7 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Feb 3 05:41:46 EST 2009
Author: alesj
Date: 2009-02-03 05:41:46 -0500 (Tue, 03 Feb 2009)
New Revision: 83805
Added:
projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/SearchDependencyItem.java
projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchClassContextDependencyItem.java
projects/microcontainer/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/InjectionWithSearch.xml
Modified:
projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyItem.java
projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/Search.java
projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Inject.java
projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Search.java
projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java
projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java
projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractSearchValueMetaData.java
projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/ValueUtil.java
projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java
projects/microcontainer/trunk/kernel/src/main/resources/schema/jboss-beans-common_2_0.xsd
projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionJaxbTestCase.java
projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionTestCase.java
Log:
[JBMICROCONT-406]; move search into inject.
Modified: projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyItem.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyItem.java 2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyItem.java 2009-02-03 10:41:46 UTC (rev 83805)
@@ -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;
Modified: projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/Search.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/Search.java 2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/Search.java 2009-02-03 10:41:46 UTC (rev 83805)
@@ -54,6 +54,22 @@
this.delegate = delegate;
}
+ /**
+ * Get Search enum instance.
+ *
+ * @param typeString the type string
+ * @return matching instance, default if none found
+ */
+ public static Search getInstance(String typeString)
+ {
+ for(Search search : values())
+ {
+ if (search.getType().equalsIgnoreCase(typeString))
+ return search;
+ }
+ return DEFAULT;
+ }
+
public String getType()
{
return delegate.getType();
Added: projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/SearchDependencyItem.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/SearchDependencyItem.java (rev 0)
+++ projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/SearchDependencyItem.java 2009-02-03 10:41:46 UTC (rev 83805)
@@ -0,0 +1,121 @@
+/*
+ * 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.spi.ControllerState;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerMode;
+import org.jboss.dependency.spi.graph.GraphController;
+import org.jboss.dependency.spi.graph.LookupStrategy;
+import org.jboss.dependency.plugins.AbstractDependencyItem;
+
+/**
+ * Search dependency item.
+ *
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class SearchDependencyItem extends AbstractDependencyItem
+{
+ private Search search;
+
+ public SearchDependencyItem(Object name, Object iDependOn, ControllerState whenRequired, ControllerState dependentState, Search 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/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Inject.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Inject.java 2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Inject.java 2009-02-03 10:41:46 UTC (rev 83805)
@@ -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/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Search.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Search.java 2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Search.java 2009-02-03 10:41:46 UTC (rev 83805)
@@ -33,6 +33,7 @@
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
+ at Deprecated
public @interface Search
{
/**
Modified: projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java 2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java 2009-02-03 10:41:46 UTC (rev 83805)
@@ -21,29 +21,33 @@
*/
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.graph.LookupStrategy;
import org.jboss.dependency.spi.dispatch.AttributeDispatchContext;
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 +81,12 @@
protected ControllerState dependentState;
/**
+ * The search type
+ */
+ protected Search search = Search.DEFAULT;
+
+
+ /**
* Create a new dependency value
*/
public AbstractDependencyValueMetaData()
@@ -138,6 +148,11 @@
flushJBossObjectCache();
}
+ /**
+ * Get when required state.
+ *
+ * @return the when required state
+ */
public ControllerState getWhenRequiredState()
{
return whenRequiredState;
@@ -155,6 +170,11 @@
flushJBossObjectCache();
}
+ /**
+ * Get the required state of dependency.
+ *
+ * @return the required dependency state
+ */
public ControllerState getDependentState()
{
return dependentState;
@@ -179,6 +199,37 @@
setValue(new AbstractValueMetaData(value));
}
+ /**
+ * Set search type.
+ *
+ * @param search the search type
+ */
+ @XmlAttribute(name = "search")
+ public void setSearch(Search search)
+ {
+ this.search = search;
+ }
+
+ /**
+ * Get search type.
+ *
+ * @return the search type
+ */
+ public Search 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 +240,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 +253,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 +274,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)
@@ -259,7 +335,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 +358,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 +370,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/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java 2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java 2009-02-03 10:41:46 UTC (rev 83805)
@@ -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/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractSearchValueMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractSearchValueMetaData.java 2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractSearchValueMetaData.java 2009-02-03 10:41:46 UTC (rev 83805)
@@ -21,30 +21,32 @@
*/
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.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
{
@@ -122,7 +124,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 +178,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);
- }
- }
}
Modified: projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/ValueUtil.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/ValueUtil.java 2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/ValueUtil.java 2009-02-03 10:41:46 UTC (rev 83805)
@@ -221,6 +221,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,6 +268,7 @@
* @param annotation the annotation
* @return search meta data
*/
+ @SuppressWarnings("deprecation")
static ValueMetaData createValueMetaData(Search annotation)
{
String searchType = annotation.type();
Modified: projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java 2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java 2009-02-03 10:41:46 UTC (rev 83805)
@@ -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/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchClassContextDependencyItem.java (from rev 83617, projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java)
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchClassContextDependencyItem.java (rev 0)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchClassContextDependencyItem.java 2009-02-03 10:41:46 UTC (rev 83805)
@@ -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.plugins.graph.Search;
+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;
+
+/**
+ * A search Class context dependencyItem.
+ *
+ * @author <a href="ales.justin at gmail.com">Ales Justin</a>
+ */
+public class SearchClassContextDependencyItem extends ClassDependencyItem
+{
+ private Search search;
+
+ public SearchClassContextDependencyItem(Object name, Class<?> demandClass, ControllerState whenRequired, ControllerState dependentState, Search 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
Property changes on: projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchClassContextDependencyItem.java
___________________________________________________________________
Name: svn:mergeinfo
+
Modified: projects/microcontainer/trunk/kernel/src/main/resources/schema/jboss-beans-common_2_0.xsd
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/resources/schema/jboss-beans-common_2_0.xsd 2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/main/resources/schema/jboss-beans-common_2_0.xsd 2009-02-03 10:41:46 UTC (rev 83805)
@@ -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">
Modified: projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionJaxbTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionJaxbTestCase.java 2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionJaxbTestCase.java 2009-02-03 10:41:46 UTC (rev 83805)
@@ -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/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionTestCase.java 2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionTestCase.java 2009-02-03 10:41:46 UTC (rev 83805)
@@ -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/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/InjectionWithSearch.xml (from rev 83617, projects/microcontainer/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/InjectionWithState.xml)
===================================================================
--- projects/microcontainer/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/InjectionWithSearch.xml (rev 0)
+++ projects/microcontainer/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/InjectionWithSearch.xml 2009-02-03 10:41:46 UTC (rev 83805)
@@ -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>
Property changes on: projects/microcontainer/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/InjectionWithSearch.xml
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:mergeinfo
+
Name: svn:eol-style
+ native
More information about the jboss-cvs-commits
mailing list