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, <[email protected]> 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> > > >
