Hi Jarek,

I could be very wrong :-) but I think I mis-wrote in the commit description.  
It looks to me as if when we build the refs we do in fact look first in the 
module, then in parents, but when we look for persistence units to deploy them 
we only look in the current module. Before this commit I re-read the parts of 
the spec I could find on this and now think we are supposed to deploy 
persistence units found in an ear lib directory only once, at the ear level.  
For ee 5 I thought we were supposed to deploy them once for every module.  I 
don't know if the spec changed or if I misunderstood either ee5 or ee6 or both.

I think I took the "look in the parents" code and put it in the 
findPersistenceUnitQuery method so it could be shared for persistence unit refs 
and persistence context refs.

thanks
david jencks

On Aug 2, 2010, at 10:21 PM, Jarek Gawor wrote:

> David,
> 
> Can you explain why look for persistence units for references in a
> given module only? Shouldn't it be checking the module first and then
> the application and then its parents?
> 
> Jarek
> 
> On Tue, Jun 29, 2010 at 12:42 AM,  <djen...@apache.org> wrote:
>> Author: djencks
>> Date: Tue Jun 29 04:42:13 2010
>> New Revision: 958821
>> 
>> URL: http://svn.apache.org/viewvc?rev=958821&view=rev
>> Log:
>> Only look in module and parents for persistence units.  Only look in module 
>> for persistence units for refs.  Combine persistence unit and context ref 
>> builders.
>> 
>> Added:
>>    
>> geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceRefBuilder.java
>>    (contents, props changed)
>>      - copied, changed from r958756, 
>> geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceUnitRefBuilder.java
>> Removed:
>>    
>> geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceContextRefBuilder.java
>>    
>> geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceUnitRefBuilder.java
>> Modified:
>>    
>> geronimo/server/trunk/plugins/client/client-deployer/src/main/plan/plan.xml
>>    geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/plan.xml
>>    
>> geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceUnitBuilder.java
>>    
>> geronimo/server/trunk/plugins/openjpa2/persistence-jpa20-deployer/src/main/plan/plan.xml
>> 
>> Modified: 
>> geronimo/server/trunk/plugins/client/client-deployer/src/main/plan/plan.xml
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/client/client-deployer/src/main/plan/plan.xml?rev=958821&r1=958820&r2=958821&view=diff
>> ==============================================================================
>> --- 
>> geronimo/server/trunk/plugins/client/client-deployer/src/main/plan/plan.xml 
>> (original)
>> +++ 
>> geronimo/server/trunk/plugins/client/client-deployer/src/main/plan/plan.xml 
>> Tue Jun 29 04:42:13 2010
>> @@ -42,7 +42,7 @@
>>                 <name>GBeanRefBuilder</name>
>>             </pattern>
>>             <pattern>
>> -                <name>PersistenceUnitRefBuilder</name>
>> +                <name>PersistenceRefBuilder</name>
>>             </pattern>
>>             <pattern>
>>                 <name>ClientResourceRefBuilder</name>
>> 
>> Modified: 
>> geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/plan.xml
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/plan.xml?rev=958821&r1=958820&r2=958821&view=diff
>> ==============================================================================
>> --- geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/plan.xml 
>> (original)
>> +++ geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/plan.xml 
>> Tue Jun 29 04:42:13 2010
>> @@ -115,10 +115,7 @@
>>                 <name>GBeanRefBuilder</name>
>>             </pattern>
>>             <pattern>
>> -                <name>PersistenceContextRefBuilder</name>
>> -            </pattern>
>> -            <pattern>
>> -                <name>PersistenceUnitRefBuilder</name>
>> +                <name>PersistenceRefBuilder</name>
>>             </pattern>
>>             <pattern>
>>                 <name>DataSourceBuilder</name>
>> 
>> Copied: 
>> geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceRefBuilder.java
>>  (from r958756, 
>> geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceUnitRefBuilder.java)
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceRefBuilder.java?p2=geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceRefBuilder.java&p1=geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceUnitRefBuilder.java&r1=958756&r2=958821&rev=958821&view=diff
>> ==============================================================================
>> --- 
>> geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceUnitRefBuilder.java
>>  (original)
>> +++ 
>> geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceRefBuilder.java
>>  Tue Jun 29 04:42:13 2010
>> @@ -32,21 +32,32 @@ import org.apache.geronimo.gbean.Abstrac
>>  import org.apache.geronimo.gbean.GBeanData;
>>  import org.apache.geronimo.gbean.annotation.GBean;
>>  import org.apache.geronimo.gbean.annotation.ParamAttribute;
>> +import org.apache.geronimo.j2ee.deployment.EARContext;
>>  import org.apache.geronimo.j2ee.deployment.Module;
>> +import 
>> org.apache.geronimo.j2ee.deployment.annotation.PersistenceContextAnnotationHelper;
>>  import 
>> org.apache.geronimo.j2ee.deployment.annotation.PersistenceUnitAnnotationHelper;
>>  import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
>>  import org.apache.geronimo.kernel.GBeanNotFoundException;
>>  import org.apache.geronimo.kernel.config.Configuration;
>>  import org.apache.geronimo.kernel.repository.Environment;
>>  import org.apache.geronimo.naming.deployment.AbstractNamingBuilder;
>> +import org.apache.geronimo.naming.reference.PersistenceContextReference;
>>  import org.apache.geronimo.naming.reference.PersistenceUnitReference;
>>  import org.apache.geronimo.schema.NamespaceElementConverter;
>>  import org.apache.geronimo.schema.SchemaConversionUtils;
>>  import org.apache.geronimo.xbeans.geronimo.naming.GerPatternType;
>> +import 
>> org.apache.geronimo.xbeans.geronimo.naming.GerPersistenceContextRefDocument;
>> +import 
>> org.apache.geronimo.xbeans.geronimo.naming.GerPersistenceContextRefType;
>> +import 
>> org.apache.geronimo.xbeans.geronimo.naming.GerPersistenceContextTypeType;
>>  import 
>> org.apache.geronimo.xbeans.geronimo.naming.GerPersistenceUnitRefDocument;
>>  import org.apache.geronimo.xbeans.geronimo.naming.GerPersistenceUnitRefType;
>> +import org.apache.geronimo.xbeans.geronimo.naming.GerPropertyType;
>>  import org.apache.openejb.jee.JndiConsumer;
>> +import org.apache.openejb.jee.PersistenceContextRef;
>> +import org.apache.openejb.jee.PersistenceContextType;
>> +import org.apache.openejb.jee.PersistenceRef;
>>  import org.apache.openejb.jee.PersistenceUnitRef;
>> +import org.apache.openejb.jee.Property;
>>  import org.apache.xmlbeans.QNameSet;
>>  import org.apache.xmlbeans.XmlObject;
>> 
>> @@ -54,17 +65,19 @@ import org.apache.xmlbeans.XmlObject;
>>  * @version $Rev$ $Date$
>>  */
>>  @GBean(j2eeType = NameFactory.MODULE_BUILDER)
>> -public class PersistenceUnitRefBuilder extends AbstractNamingBuilder {
>> +public class PersistenceRefBuilder extends AbstractNamingBuilder {
>>     private static final QName PERSISTENCE_UNIT_REF_QNAME = new 
>> QName(JEE_NAMESPACE, "persistence-unit-ref");
>>     private static final QNameSet PERSISTENCE_UNIT_REF_QNAME_SET = 
>> QNameSet.singleton(PERSISTENCE_UNIT_REF_QNAME);
>>     private static final QName GER_PERSISTENCE_UNIT_REF_QNAME = 
>> GerPersistenceUnitRefDocument.type.getDocumentElementName();
>>     private static final QNameSet GER_PERSISTENCE_UNIT_REF_QNAME_SET = 
>> QNameSet.singleton(GER_PERSISTENCE_UNIT_REF_QNAME);
>>     private static final Set PERSISTENCE_UNIT_INTERFACE_TYPES = 
>> Collections.singleton("org.apache.geronimo.persistence.PersistenceUnitGBean");
>> +    private static final QName GER_PERSISTENCE_CONTEXT_REF_QNAME = 
>> GerPersistenceContextRefDocument.type.getDocumentElementName();
>> +    private static final QNameSet GER_PERSISTENCE_CONTEXT_REF_QNAME_SET = 
>> QNameSet.singleton(GER_PERSISTENCE_CONTEXT_REF_QNAME);
>>     private final AbstractNameQuery defaultPersistenceUnitAbstractNameQuery;
>>     private final boolean strictMatching;
>> 
>> 
>> -    public PersistenceUnitRefBuilder(@ParamAttribute(name = 
>> "defaultEnvironment") Environment defaultEnvironment,
>> +    public PersistenceRefBuilder(@ParamAttribute(name = 
>> "defaultEnvironment") Environment defaultEnvironment,
>>                                      @ParamAttribute(name = 
>> "defaultPersistenceUnitAbstractNameQuery") AbstractNameQuery 
>> defaultPersistenceUnitAbstractNameQuery,
>>                                      @ParamAttribute(name = 
>> "strictMatching") boolean strictMatching) {
>>         super(defaultEnvironment);
>> @@ -73,22 +86,24 @@ public class PersistenceUnitRefBuilder e
>>     }
>> 
>>     protected boolean willMergeEnvironment(JndiConsumer specDD, XmlObject 
>> plan) throws DeploymentException {
>> -        if (specDD != null && specDD.getPersistenceUnitRef().size() > 0) {
>> +        if (specDD != null && !specDD.getPersistenceUnitRef().isEmpty()) {
>>             return true;
>>         }
>> -        return plan != null && 
>> plan.selectChildren(PersistenceUnitRefBuilder.GER_PERSISTENCE_UNIT_REF_QNAME_SET).length
>>  > 0;
>> +        return plan != null && 
>> plan.selectChildren(PersistenceRefBuilder.GER_PERSISTENCE_UNIT_REF_QNAME_SET).length
>>  > 0;
>>     }
>> 
>> -    public void buildNaming(JndiConsumer specDD, XmlObject plan, Module 
>> module, Map componentContext) throws DeploymentException {
>> +    public void buildNaming(JndiConsumer specDD, XmlObject plan, Module 
>> module, Map<EARContext.Key, Object> componentContext) throws 
>> DeploymentException {
>>         Configuration localConfiguration = 
>> module.getEarContext().getConfiguration();
>> -        // Discover and process any @PersistenceUnitRef annotations (if 
>> !metadata-complete)
>> +        List<DeploymentException> problems = new 
>> ArrayList<DeploymentException>();
>> +
>> +        // Discover and process any @PersistenceUnitRef and 
>> @PersistenceContextRef annotations (if !metadata-complete)
>>         if (module.getClassFinder() != null) {
>>             processAnnotations(specDD, module);
>>         }
>> 
>> +        //persistenceUnit refs
>>         Collection<PersistenceUnitRef> specPersistenceUnitRefsUntyped = 
>> specDD.getPersistenceUnitRef();
>>         Map<String, GerPersistenceUnitRefType> gerPersistenceUnitRefsUntyped 
>> = getGerPersistenceUnitRefs(plan);
>> -        List<DeploymentException> problems = new 
>> ArrayList<DeploymentException>();
>>         for (PersistenceUnitRef persistenceUnitRef : 
>> specPersistenceUnitRefsUntyped) {
>>             try {
>>                 String persistenceUnitRefName = 
>> persistenceUnitRef.getPersistenceUnitRefName().trim();
>> @@ -99,32 +114,9 @@ public class PersistenceUnitRefBuilder e
>>                 if (gerPersistenceUnitRef != null) {
>>                     persistenceUnitNameQuery = 
>> findPersistenceUnit(gerPersistenceUnitRef);
>>                     checkForGBean(localConfiguration, 
>> persistenceUnitNameQuery, true);
>> -                } else if (persistenceUnitRef.getPersistenceUnitName() != 
>> null && !persistenceUnitRef.getPersistenceUnitName().trim().isEmpty()) {
>> -                    String persistenceUnitName = 
>> persistenceUnitRef.getPersistenceUnitName().trim();
>> -                    persistenceUnitNameQuery = new AbstractNameQuery(null, 
>> Collections.singletonMap("name", persistenceUnitName), 
>> PERSISTENCE_UNIT_INTERFACE_TYPES);
>> -                    if (!checkForGBean(localConfiguration, 
>> persistenceUnitNameQuery, strictMatching)) {
>> -                        persistenceUnitName = "persistence/" + 
>> persistenceUnitName;
>> -                        persistenceUnitNameQuery = new 
>> AbstractNameQuery(null, Collections.singletonMap("name", 
>> persistenceUnitName), PERSISTENCE_UNIT_INTERFACE_TYPES);
>> -                        checkForGBean(localConfiguration, 
>> persistenceUnitNameQuery, true);
>> -                    }
>>                 } else {
>> -                    persistenceUnitNameQuery = new AbstractNameQuery(null, 
>> Collections.EMPTY_MAP, PERSISTENCE_UNIT_INTERFACE_TYPES);
>> -                    Set<AbstractNameQuery> patterns = 
>> Collections.singleton(persistenceUnitNameQuery);
>> -                    LinkedHashSet<GBeanData> gbeans = 
>> localConfiguration.findGBeanDatas(localConfiguration, patterns);
>> -                    persistenceUnitNameQuery = 
>> checkForDefaultPersistenceUnit(gbeans);
>> -                    if (gbeans.isEmpty()) {
>> -                        gbeans = 
>> localConfiguration.findGBeanDatas(patterns);
>> -                        persistenceUnitNameQuery = 
>> checkForDefaultPersistenceUnit(gbeans);
>> -
>> -                        if (gbeans.isEmpty()) {
>> -                            if (defaultPersistenceUnitAbstractNameQuery == 
>> null) {
>> -                                throw new DeploymentException("No default 
>> PersistenceUnit specified, and none located");
>> -                            }
>> -                            persistenceUnitNameQuery = 
>> defaultPersistenceUnitAbstractNameQuery;
>> -                        }
>> -                    }
>> +                    persistenceUnitNameQuery = 
>> findPersistenceUnitQuery(module, localConfiguration, persistenceUnitRef);
>>                 }
>> -                checkForGBean(localConfiguration, persistenceUnitNameQuery, 
>> true);
>> 
>>                 PersistenceUnitReference reference = new 
>> PersistenceUnitReference(module.getConfigId(), persistenceUnitNameQuery);
>> 
>> @@ -134,31 +126,111 @@ public class PersistenceUnitRefBuilder e
>>             }
>> 
>>         }
>> -
>> -
>>         for (GerPersistenceUnitRefType gerPersistenceUnitRef : 
>> gerPersistenceUnitRefsUntyped.values()) {
>>             try {
>>                 String PersistenceUnitRefName = 
>> gerPersistenceUnitRef.getPersistenceUnitRefName();
>> -
>>                 AbstractNameQuery persistenceUnitNameQuery = 
>> findPersistenceUnit(gerPersistenceUnitRef);
>> -
>>                 checkForGBean(localConfiguration, persistenceUnitNameQuery, 
>> true);
>> -
>>                 PersistenceUnitReference reference = new 
>> PersistenceUnitReference(module.getConfigId(), persistenceUnitNameQuery);
>> -
>>                 put(PersistenceUnitRefName, reference, 
>> module.getJndiContext());
>>             } catch (DeploymentException e) {
>>                 problems.add(e);
>>             }
>> +        }
>> +
>> +
>> +        //persistence context refs
>> +        Collection<PersistenceContextRef> specPersistenceContextRefsUntyped 
>> = specDD.getPersistenceContextRef();
>> +        Map<String, GerPersistenceContextRefType> 
>> gerPersistenceContextRefsUntyped = getGerPersistenceContextRefs(plan);
>> +        for (PersistenceContextRef persistenceContextRef : 
>> specPersistenceContextRefsUntyped) {
>> +            try {
>> +                String persistenceContextRefName = 
>> persistenceContextRef.getPersistenceContextRefName().trim();
>> +
>> +                addInjections(persistenceContextRefName, 
>> persistenceContextRef.getInjectionTarget(), componentContext);
>> +                PersistenceContextType persistenceContextType = 
>> persistenceContextRef.getPersistenceContextType();
>> +                boolean transactionScoped = persistenceContextType == null 
>> || persistenceContextType.equals(PersistenceContextType.TRANSACTION);
>> +
>> +                List<Property> propertyTypes = 
>> persistenceContextRef.getPersistenceProperty();
>> +                Map<String, String> properties = new HashMap<String, 
>> String>();
>> +                for (Property propertyType : propertyTypes) {
>> +                    String key = propertyType.getName();
>> +                    String value = propertyType.getValue();
>> +                    properties.put(key, value);
>> +                }
>> +
>> +                AbstractNameQuery persistenceUnitNameQuery;
>> +                GerPersistenceContextRefType gerPersistenceContextRef = 
>> gerPersistenceContextRefsUntyped.remove(persistenceContextRefName);
>> +                if (gerPersistenceContextRef != null) {
>> +                    persistenceUnitNameQuery = 
>> findPersistenceUnit(gerPersistenceContextRef);
>> +                    addProperties(gerPersistenceContextRef, properties);
>> +                    checkForGBean(localConfiguration, 
>> persistenceUnitNameQuery, true);
>> +                } else {
>> +                    persistenceUnitNameQuery = 
>> findPersistenceUnitQuery(module, localConfiguration, persistenceContextRef);
>> +                }
>> +                PersistenceContextReference reference = new 
>> PersistenceContextReference(module.getConfigId(), persistenceUnitNameQuery, 
>> transactionScoped, properties);
>> +                put(persistenceContextRefName, reference, 
>> module.getJndiContext());
>> +            } catch (DeploymentException e) {
>> +                problems.add(e);
>> +            }
>> +        }
>> +
>> +        // Support persistence context refs that are mentioned only in the 
>> geronimo plan
>> +        for (GerPersistenceContextRefType gerPersistenceContextRef : 
>> gerPersistenceContextRefsUntyped.values()) {
>> +            try {
>> +                String persistenceContextRefName = 
>> gerPersistenceContextRef.getPersistenceContextRefName();
>> +                GerPersistenceContextTypeType.Enum persistenceContextType = 
>> gerPersistenceContextRef.getPersistenceContextType();
>> +                boolean transactionScoped = persistenceContextType == null 
>> || !persistenceContextType.equals(GerPersistenceContextTypeType.EXTENDED);
>> +                Map<String, String> properties = new HashMap<String, 
>> String>();
>> +                addProperties(gerPersistenceContextRef, properties);
>> +                AbstractNameQuery persistenceUnitNameQuery = 
>> findPersistenceUnit(gerPersistenceContextRef);
>> +                checkForGBean(localConfiguration, persistenceUnitNameQuery, 
>> true);
>> +                PersistenceContextReference reference = new 
>> PersistenceContextReference(module.getConfigId(), persistenceUnitNameQuery, 
>> transactionScoped, properties);
>> +                put(persistenceContextRefName, reference, 
>> module.getJndiContext());
>> +            } catch (DeploymentException e) {
>> +                problems.add(e);
>> +            }
>> 
>>         }
>> +
>>         if (!problems.isEmpty()) {
>> -            //TODO make DeploymentException accept a list of exceptions as 
>> causes.
>> -            throw new DeploymentException("At least one deployment 
>> problem:" + problems);
>> +            throw new DeploymentException("At least one deployment 
>> problem:", problems);
>>         }
>>     }
>> 
>> -    private AbstractNameQuery 
>> checkForDefaultPersistenceUnit(LinkedHashSet<GBeanData> gbeans) throws 
>> DeploymentException {
>> +    private AbstractNameQuery findPersistenceUnitQuery(Module module, 
>> Configuration localConfiguration, PersistenceRef persistenceRef) throws 
>> DeploymentException {
>> +        AbstractNameQuery persistenceUnitNameQuery;
>> +        if (persistenceRef.getPersistenceUnitName() != null && 
>> !persistenceRef.getPersistenceUnitName().trim().isEmpty()) {
>> +            String persistenceUnitName = 
>> persistenceRef.getPersistenceUnitName().trim();
>> +            AbstractName childName = 
>> module.getEarContext().getNaming().createChildName(module.getModuleName(), 
>> persistenceUnitName, NameFactory.PERSISTENCE_UNIT);
>> +            persistenceUnitNameQuery = new AbstractNameQuery(null, 
>> childName.getName(), PERSISTENCE_UNIT_INTERFACE_TYPES);
>> +            if (!checkForGBean(localConfiguration, 
>> persistenceUnitNameQuery, strictMatching)) {
>> +                persistenceUnitName = "persistence/" + persistenceUnitName;
>> +                childName = 
>> module.getEarContext().getNaming().createChildName(module.getModuleName(), 
>> persistenceUnitName, NameFactory.PERSISTENCE_UNIT);
>> +                persistenceUnitNameQuery = new AbstractNameQuery(null, 
>> childName.getName(), PERSISTENCE_UNIT_INTERFACE_TYPES);
>> +                checkForGBean(localConfiguration, persistenceUnitNameQuery, 
>> true);
>> +            }
>> +        } else {
>> +            persistenceUnitNameQuery = new AbstractNameQuery(null, 
>> Collections.EMPTY_MAP, PERSISTENCE_UNIT_INTERFACE_TYPES);
>> +            Set<AbstractNameQuery> patterns = 
>> Collections.singleton(persistenceUnitNameQuery);
>> +            LinkedHashSet<GBeanData> gbeans = 
>> localConfiguration.findGBeanDatas(localConfiguration, patterns);
>> +            persistenceUnitNameQuery = 
>> checkForDefaultPersistenceUnit(gbeans);
>> +            if (gbeans.isEmpty()) {
>> +                gbeans = localConfiguration.findGBeanDatas(patterns);
>> +                persistenceUnitNameQuery = 
>> checkForDefaultPersistenceUnit(gbeans);
>> +
>> +                if (gbeans.isEmpty()) {
>> +                    if (defaultPersistenceUnitAbstractNameQuery == null) {
>> +                        throw new DeploymentException("No default 
>> PersistenceUnit specified, and none located");
>> +                    }
>> +                    persistenceUnitNameQuery = 
>> defaultPersistenceUnitAbstractNameQuery;
>> +                }
>> +            }
>> +        }
>> +        checkForGBean(localConfiguration, persistenceUnitNameQuery, true);
>> +        return persistenceUnitNameQuery;
>> +    }
>> +
>> +    private static AbstractNameQuery 
>> checkForDefaultPersistenceUnit(LinkedHashSet<GBeanData> gbeans) throws 
>> DeploymentException {
>>         AbstractNameQuery persistenceUnitNameQuery = null;
>>         for (java.util.Iterator it = gbeans.iterator(); it.hasNext();) {
>>             GBeanData gbean = (GBeanData) it.next();
>> @@ -176,14 +248,17 @@ public class PersistenceUnitRefBuilder e
>>         return persistenceUnitNameQuery;
>>     }
>> 
>> -    private boolean checkForGBean(Configuration localConfiguration, 
>> AbstractNameQuery persistenceUnitNameQuery, boolean complainIfMissing) 
>> throws DeploymentException {
>> +    private static boolean checkForGBean(Configuration localConfiguration, 
>> AbstractNameQuery persistenceQuery, boolean complainIfMissing) throws 
>> DeploymentException {
>>         try {
>> -            localConfiguration.findGBeanData(persistenceUnitNameQuery);
>> +            localConfiguration.findGBeanData(persistenceQuery);
>>             return true;
>>         } catch (GBeanNotFoundException e) {
>>             if (complainIfMissing || e.hasMatches()) {
>> -                String reason = e.hasMatches() ? "More than one GBean 
>> reference found." : "No GBean references found.";
>> -                throw new DeploymentException("Could not resolve reference 
>> at deploy time for query " + persistenceUnitNameQuery + ". " + reason, e);
>> +                if (e.hasMatches()) {
>> +                    throw new DeploymentException("More than one reference 
>> at deploy time for query " + persistenceQuery + ". " + e.getMatches(), e);
>> +                } else {
>> +                    throw new DeploymentException("No references found at 
>> deploy time for query " + persistenceQuery, e);
>> +                }
>>             }
>>             return false;
>>         }
>> @@ -192,15 +267,16 @@ public class PersistenceUnitRefBuilder e
>>     private void processAnnotations(JndiConsumer specDD, Module module) 
>> throws DeploymentException {
>>         // Process all the annotations for this naming builder type
>>         PersistenceUnitAnnotationHelper.processAnnotations(specDD, 
>> module.getClassFinder());
>> +        PersistenceContextAnnotationHelper.processAnnotations(specDD, 
>> module.getClassFinder());
>>     }
>> 
>> -    private AbstractNameQuery findPersistenceUnit(GerPersistenceUnitRefType 
>> gerPersistenceUnitRef) {
>> +    private AbstractNameQuery findPersistenceUnit(GerPersistenceUnitRefType 
>> gerPersistenceRef) {
>>         AbstractNameQuery persistenceUnitNameQuery;
>> -        if (gerPersistenceUnitRef.isSetPersistenceUnitName()) {
>> -            String persistenceUnitName = 
>> gerPersistenceUnitRef.getPersistenceUnitName();
>> +        if (gerPersistenceRef.isSetPersistenceUnitName()) {
>> +            String persistenceUnitName = 
>> gerPersistenceRef.getPersistenceUnitName();
>>             persistenceUnitNameQuery = new AbstractNameQuery(null, 
>> Collections.singletonMap("name", persistenceUnitName), 
>> PERSISTENCE_UNIT_INTERFACE_TYPES);
>>         } else {
>> -            GerPatternType gbeanLocator = 
>> gerPersistenceUnitRef.getPattern();
>> +            GerPatternType gbeanLocator = gerPersistenceRef.getPattern();
>> 
>>             persistenceUnitNameQuery = buildAbstractNameQuery(gbeanLocator, 
>> null, null, PERSISTENCE_UNIT_INTERFACE_TYPES);
>>         }
>> @@ -208,7 +284,7 @@ public class PersistenceUnitRefBuilder e
>>     }
>> 
>>     public QNameSet getSpecQNameSet() {
>> -        
>> SchemaConversionUtils.registerNamespaceConversions(Collections.singletonMap(PersistenceUnitRefBuilder.GER_PERSISTENCE_UNIT_REF_QNAME.getLocalPart(),
>>  new 
>> NamespaceElementConverter(PersistenceUnitRefBuilder.GER_PERSISTENCE_UNIT_REF_QNAME.getNamespaceURI())));
>> +        
>> SchemaConversionUtils.registerNamespaceConversions(Collections.singletonMap(PersistenceRefBuilder.GER_PERSISTENCE_UNIT_REF_QNAME.getLocalPart(),
>>  new 
>> NamespaceElementConverter(PersistenceRefBuilder.GER_PERSISTENCE_UNIT_REF_QNAME.getNamespaceURI())));
>>         return PERSISTENCE_UNIT_REF_QNAME_SET;
>>     }
>> 
>> @@ -219,7 +295,7 @@ public class PersistenceUnitRefBuilder e
>>     private Map<String, GerPersistenceUnitRefType> 
>> getGerPersistenceUnitRefs(XmlObject plan) throws DeploymentException {
>>         Map<String, GerPersistenceUnitRefType> map = new HashMap<String, 
>> GerPersistenceUnitRefType>();
>>         if (plan != null) {
>> -            List<GerPersistenceUnitRefType> refs = 
>> convert(plan.selectChildren(PersistenceUnitRefBuilder.GER_PERSISTENCE_UNIT_REF_QNAME_SET),
>>  NAMING_CONVERTER, GerPersistenceUnitRefType.class, 
>> GerPersistenceUnitRefType.type);
>> +            List<GerPersistenceUnitRefType> refs = 
>> convert(plan.selectChildren(PersistenceRefBuilder.GER_PERSISTENCE_UNIT_REF_QNAME_SET),
>>  NAMING_CONVERTER, GerPersistenceUnitRefType.class, 
>> GerPersistenceUnitRefType.type);
>>             for (GerPersistenceUnitRefType ref : refs) {
>>                 map.put(ref.getPersistenceUnitRefName().trim(), ref);
>>             }
>> @@ -227,4 +303,38 @@ public class PersistenceUnitRefBuilder e
>>         return map;
>>     }
>> 
>> +    private void addProperties(GerPersistenceContextRefType 
>> persistenceContextRef, Map<String, String> properties) {
>> +        GerPropertyType[] propertyTypes = 
>> persistenceContextRef.getPropertyArray();
>> +        for (GerPropertyType propertyType : propertyTypes) {
>> +            String key = propertyType.getKey();
>> +            String value = propertyType.getValue();
>> +            properties.put(key, value);
>> +        }
>> +    }
>> +
>> +    private Map<String, GerPersistenceContextRefType> 
>> getGerPersistenceContextRefs(XmlObject plan) throws DeploymentException {
>> +        Map<String, GerPersistenceContextRefType> map = new HashMap<String, 
>> GerPersistenceContextRefType>();
>> +        if (plan != null) {
>> +            List<GerPersistenceContextRefType> refs = 
>> convert(plan.selectChildren(GER_PERSISTENCE_CONTEXT_REF_QNAME_SET), 
>> NAMING_CONVERTER, GerPersistenceContextRefType.class, 
>> GerPersistenceContextRefType.type);
>> +            for (GerPersistenceContextRefType ref : refs) {
>> +                map.put(ref.getPersistenceContextRefName().trim(), ref);
>> +            }
>> +        }
>> +        return map;
>> +    }
>> +
>> +    private AbstractNameQuery 
>> findPersistenceUnit(GerPersistenceContextRefType persistenceContextRef) {
>> +        AbstractNameQuery persistenceUnitNameQuery;
>> +        if (persistenceContextRef.isSetPersistenceUnitName()) {
>> +            String persistenceUnitName = 
>> persistenceContextRef.getPersistenceUnitName();
>> +            persistenceUnitNameQuery = new AbstractNameQuery(null, 
>> Collections.singletonMap("name", persistenceUnitName), 
>> PERSISTENCE_UNIT_INTERFACE_TYPES);
>> +        } else {
>> +            GerPatternType gbeanLocator = 
>> persistenceContextRef.getPattern();
>> +
>> +            persistenceUnitNameQuery = buildAbstractNameQuery(gbeanLocator, 
>> null, null, PERSISTENCE_UNIT_INTERFACE_TYPES);
>> +        }
>> +        return persistenceUnitNameQuery;
>> +    }
>> +
>> +
>>  }
>> 
>> Propchange: 
>> geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceRefBuilder.java
>> ------------------------------------------------------------------------------
>>    svn:eol-style = native
>> 
>> Propchange: 
>> geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceRefBuilder.java
>> ------------------------------------------------------------------------------
>>    svn:keywords = Date Revision
>> 
>> Propchange: 
>> geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceRefBuilder.java
>> ------------------------------------------------------------------------------
>>    svn:mime-type = text/plain
>> 
>> Modified: 
>> geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceUnitBuilder.java
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceUnitBuilder.java?rev=958821&r1=958820&r2=958821&view=diff
>> ==============================================================================
>> --- 
>> geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceUnitBuilder.java
>>  (original)
>> +++ 
>> geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20-builder/src/main/java/org/apache/geronimo/persistence/builder/PersistenceUnitBuilder.java
>>  Tue Jun 29 04:42:13 2010
>> @@ -23,6 +23,7 @@ import java.net.URL;
>>  import java.util.ArrayList;
>>  import java.util.Collection;
>>  import java.util.HashMap;
>> +import java.util.LinkedHashSet;
>>  import java.util.List;
>>  import java.util.Map;
>>  import java.util.Properties;
>> @@ -59,6 +60,8 @@ import org.apache.openejb.jee.JAXBContex
>>  import org.apache.openejb.jee.JaxbJavaee;
>>  import org.apache.openejb.jee.Persistence;
>>  import org.apache.xbean.osgi.bundle.util.BundleResourceFinder;
>> +import org.apache.xbean.osgi.bundle.util.DiscoveryRange;
>> +import org.apache.xbean.osgi.bundle.util.ResourceDiscoveryFilter;
>>  import org.apache.xmlbeans.QNameSet;
>>  import org.apache.xmlbeans.XmlObject;
>>  import org.osgi.framework.Bundle;
>> @@ -72,18 +75,18 @@ import org.osgi.service.packageadmin.Pac
>>  @GBean(j2eeType = NameFactory.MODULE_BUILDER)
>>  public class PersistenceUnitBuilder implements ModuleBuilderExtension {
>> 
>> -    private static final EARContext.Key<List<URL>> PERSISTENCE_URL_LIST_KEY 
>> = new EARContext.Key<List<URL>>() {
>> -
>> -        @Override
>> -        public List<URL> get(Map<EARContext.Key, Object> keyObjectMap) {
>> -            List<URL> list = (List<URL>) keyObjectMap.get(this);
>> -            if (list == null) {
>> -                list = new ArrayList<URL>();
>> -                keyObjectMap.put(this, list);
>> -            }
>> -            return list;
>> -        }
>> -    };
>> +//    private static final EARContext.Key<List<URL>> 
>> PERSISTENCE_URL_LIST_KEY = new EARContext.Key<List<URL>>() {
>> +//
>> +//        @Override
>> +//        public List<URL> get(Map<EARContext.Key, Object> keyObjectMap) {
>> +//            List<URL> list = (List<URL>) keyObjectMap.get(this);
>> +//            if (list == null) {
>> +//                list = new ArrayList<URL>();
>> +//                keyObjectMap.put(this, list);
>> +//            }
>> +//            return list;
>> +//        }
>> +//    };
>> 
>>     private static final QName PERSISTENCE_QNAME = new 
>> QName("http://java.sun.com/xml/ns/persistence";, "persistence");
>> 
>> @@ -144,19 +147,31 @@ public class PersistenceUnitBuilder impl
>>             throw new DeploymentException("Parse Persistence configuration 
>> file failed", e);
>>         }
>>         try {
>> -            URI moduleBaseURI = moduleContext.getBaseDir().toURI();
>> -            Collection<String> manifestcp = module.getClassPath();
>> -            manifestcp.add(module.getTargetPath());
>> -//            URL[] urls = new URL[manifestcp.size()];
>> -//            int i = 0;
>> -//            for (String path : manifestcp) {
>> -//                //TODO either this encoding is unnecessary or incomplete
>> -//                path = path.replaceAll(" ", "%20");
>> -//                URL url = moduleBaseURI.resolve(path).toURL();
>> -//                urls[i++] = url;
>> -//            }
>> -            BundleResourceFinder finder = new 
>> BundleResourceFinder(packageAdmin, bundle, "", "META-INF/persistence.xml");
>> -            List<URL> knownPersistenceUrls = 
>> PERSISTENCE_URL_LIST_KEY.get(module.getRootEarContext().getGeneralData());
>> +
>> +            final Collection<String> manifestcp = new 
>> LinkedHashSet<String>();
>> +            for (Module m = module; m != null; m = m.getParentModule()){
>> +                manifestcp.addAll(m.getClassPath());
>> +            }
>> +            //should not be needed??
>> +//            manifestcp.add(module.getTargetPath());
>> +            BundleResourceFinder finder = new 
>> BundleResourceFinder(packageAdmin, bundle, "", "META-INF/persistence.xml", 
>> new ResourceDiscoveryFilter() {
>> +
>> +                @Override
>> +                public boolean rangeDiscoveryRequired(DiscoveryRange 
>> discoveryRange) {
>> +                    return discoveryRange == 
>> DiscoveryRange.BUNDLE_CLASSPATH || discoveryRange == 
>> DiscoveryRange.FRAGMENT_BUNDLES;
>> +                }
>> +
>> +                @Override
>> +                public boolean zipFileDiscoveryRequired(String s) {
>> +                    return manifestcp.contains(s);
>> +                }
>> +
>> +                @Override
>> +                public boolean directoryDiscoveryRequired(String s) {
>> +                    return manifestcp.contains(s);
>> +                }
>> +            });
>> +//            List<URL> knownPersistenceUrls = 
>> PERSISTENCE_URL_LIST_KEY.get(module.getRootEarContext().getGeneralData());
>>             final Map<URL, String> persistenceURLs = new HashMap<URL, 
>> String>();
>>             finder.find(new BundleResourceFinder.ResourceFinderCallback() {
>> 
>> @@ -172,7 +187,7 @@ public class PersistenceUnitBuilder impl
>>                     persistenceURLs.put(url, jarName);
>>                 }
>>             });
>> -            persistenceURLs.keySet().removeAll(knownPersistenceUrls);
>> +//            persistenceURLs.keySet().removeAll(knownPersistenceUrls);
>>             if (raws.length > 0 || persistenceURLs.size() > 0) {
>>                 
>> EnvironmentBuilder.mergeEnvironments(module.getEnvironment(), 
>> defaultEnvironment);
>>             }
>> @@ -189,7 +204,7 @@ public class PersistenceUnitBuilder impl
>>                     in.close();
>>                 }
>>                 buildPersistenceUnits(persistence, overrides, module, 
>> persistenceLocation);
>> -                knownPersistenceUrls.add(persistenceUrl);
>> +//                knownPersistenceUrls.add(persistenceUrl);
>>             }
>>         } catch (Exception e) {
>>             throw new DeploymentException("Could not look for 
>> META-INF/persistence.xml files", e);
>> 
>> Modified: 
>> geronimo/server/trunk/plugins/openjpa2/persistence-jpa20-deployer/src/main/plan/plan.xml
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/openjpa2/persistence-jpa20-deployer/src/main/plan/plan.xml?rev=958821&r1=958820&r2=958821&view=diff
>> ==============================================================================
>> --- 
>> geronimo/server/trunk/plugins/openjpa2/persistence-jpa20-deployer/src/main/plan/plan.xml
>>  (original)
>> +++ 
>> geronimo/server/trunk/plugins/openjpa2/persistence-jpa20-deployer/src/main/plan/plan.xml
>>  Tue Jun 29 04:42:13 2010
>> @@ -44,21 +44,7 @@
>>         </xml-attribute>
>>     </gbean>
>>     <!-- TODO possibly the ref builders only need a dependency on 
>> transaction -->
>> -    <gbean name="PersistenceContextRefBuilder" 
>> class="org.apache.geronimo.persistence.builder.PersistenceContextRefBuilder">
>> -        <xml-attribute name="defaultEnvironment">
>> -            <environment 
>> xmlns="http://geronimo.apache.org/xml/ns/deployment-${geronimoSchemaVersion}";>
>> -                <dependencies>
>> -                    <dependency>
>> -                        <groupId>org.apache.geronimo.configs</groupId>
>> -                        <artifactId>openjpa2</artifactId>
>> -                        <version>${version}</version>
>> -                        <type>car</type>
>> -                    </dependency>
>> -                </dependencies>
>> -            </environment>
>> -        </xml-attribute>
>> -    </gbean>
>> -    <gbean name="PersistenceUnitRefBuilder" 
>> class="org.apache.geronimo.persistence.builder.PersistenceUnitRefBuilder">
>> +    <gbean name="PersistenceRefBuilder" 
>> class="org.apache.geronimo.persistence.builder.PersistenceRefBuilder">
>>         <xml-attribute name="defaultEnvironment">
>>             <environment 
>> xmlns="http://geronimo.apache.org/xml/ns/deployment-${geronimoSchemaVersion}";>
>>                 <dependencies>
>> 
>> 
>> 

Reply via email to