[ 
https://issues.apache.org/jira/browse/ARIES-1455?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Christian Schneider resolved ARIES-1455.
----------------------------------------
       Resolution: Fixed
    Fix Version/s: jpa-2.3.0

https://github.com/apache/aries/commit/37265e0a7e9dda58001af8f845638ac0640fec52

> JpaComponentProcessor is not scanning the nested beans inside service 
> definition
> --------------------------------------------------------------------------------
>
>                 Key: ARIES-1455
>                 URL: https://issues.apache.org/jira/browse/ARIES-1455
>             Project: Aries
>          Issue Type: Bug
>          Components: Blueprint, JPA
>    Affects Versions: jpa-2.2.0
>            Reporter: Mohammad Shamsi
>            Assignee: Christian Schneider
>             Fix For: jpa-2.3.0
>
>
> Given following blueprint definition:
> {code:xml}
> <service interface="com.foo.MyDao">
>         <bean class="com.foo.impl.MyDaoImpl">
>             <tx:transaction method="*" value="Required"/>
>         </bean>
> </service>
> {code}
> MyDaoImpl has a property of type EntityManager annotated with PersistenceUnit 
>  but "JpaComponentProcessor" is not able to properly scan the nested bean 
> inside above service definition to find the annotated property.  
> looking at JpaComponentProcessor source, following code snippet, one can see 
> it 
>  is checking if component definition is an instance of "MutableBeanMetadata" 
> which is not the case when the bean definition is nested in service 
> definition (it is an instance of "MutableServiceMetadata")
> {code:java}
> Set<String> components = new 
> HashSet<String(cdr.getComponentDefinitionNames());
> for (String component : components) {
>      ComponentMetadata compDef = cdr.getComponentDefinition(component);
>      if (compDef instanceof MutableBeanMetadata && 
> !((MutableBeanMetadata)compDef).isProcessor()) {
>                 handleComponent((MutableBeanMetadata)compDef, bundle, cdr, 
> container);
>      }
> }
> {code}
> As a workaround I can change the blueprint definition to following:
> {code:xml}
> <bean id="myBean" class="com.foo.impl.MyDaoImpl">
>      <tx:transaction method="*" value="Required"/>
> </bean>
> <service interface="com.foo.MyDao">
>     <ref component-id="myBean" />
> </service>
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to