[ARIES-1455] Also scan inlined beans for annotations
git-svn-id: https://svn.apache.org/repos/asf/aries/trunk/jpa@1718780 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/itests/jpa-container-blueprint-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml b/itests/jpa-container-blueprint-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml
index 412a4b2..94060cb 100644
--- a/itests/jpa-container-blueprint-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml
+++ b/itests/jpa-container-blueprint-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml
@@ -64,6 +64,13 @@
<bean id="carServiceEmJtaAnn"
class="org.apache.aries.jpa.container.itest.bundle.blueprint.impl.CarServiceEmJtaAnn">
</bean>
+
+ <service interface="org.apache.aries.jpa.container.itest.entities.CarService">
+ <service-properties>
+ <entry key="type" value="emJtaAnnInlined" />
+ </service-properties>
+ <bean class="org.apache.aries.jpa.container.itest.bundle.blueprint.impl.CarServiceEmJtaAnn"/>
+ </service>
<service ref="carServiceEmSupplier"
interface="org.apache.aries.jpa.container.itest.entities.CarService">
diff --git a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/BlueprintTest.java b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/BlueprintTest.java
index 04d7676..dacdcc0 100644
--- a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/BlueprintTest.java
+++ b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/BlueprintTest.java
@@ -102,6 +102,11 @@
}
@Test
+ public void testInlined() throws Exception {
+ carRealTransactionalLifecycle(getCarService("emJtaAnnInlined"));
+ }
+
+ @Test
public void testCoordinationLifecycle() throws InterruptedException, ExecutionException {
CarService carService = getCarService("em");
assertNoCars(carService);
diff --git a/jpa-blueprint/src/main/java/org/apache/aries/jpa/blueprint/impl/JpaComponentProcessor.java b/jpa-blueprint/src/main/java/org/apache/aries/jpa/blueprint/impl/JpaComponentProcessor.java
index bdd5e7e..3b75d89 100644
--- a/jpa-blueprint/src/main/java/org/apache/aries/jpa/blueprint/impl/JpaComponentProcessor.java
+++ b/jpa-blueprint/src/main/java/org/apache/aries/jpa/blueprint/impl/JpaComponentProcessor.java
@@ -38,10 +38,12 @@
import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
import org.apache.aries.blueprint.mutable.MutableRefMetadata;
import org.apache.aries.blueprint.mutable.MutableReferenceMetadata;
+import org.apache.aries.blueprint.mutable.MutableServiceMetadata;
import org.osgi.framework.Bundle;
import org.osgi.service.blueprint.container.BlueprintContainer;
import org.osgi.service.blueprint.reflect.ComponentMetadata;
import org.osgi.service.blueprint.reflect.ReferenceMetadata;
+import org.osgi.service.blueprint.reflect.Target;
import org.osgi.service.coordinator.Coordinator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -69,8 +71,17 @@
Set<String> components = new HashSet<String>(cdr.getComponentDefinitionNames());
for (String component : components) {
ComponentMetadata compDef = cdr.getComponentDefinition(component);
+
if (compDef instanceof MutableBeanMetadata && !((MutableBeanMetadata)compDef).isProcessor()) {
+ // Normal bean def
handleComponent((MutableBeanMetadata)compDef, bundle, cdr, container);
+ } else if(compDef instanceof MutableServiceMetadata) {
+ // Bean inlined into service def
+ MutableServiceMetadata sMeta = (MutableServiceMetadata)compDef;
+ Target target = sMeta.getServiceComponent();
+ if (target instanceof MutableBeanMetadata) {
+ handleComponent((MutableBeanMetadata)target, bundle, cdr, container);
+ }
}
}
}