/** * Resolves persistence-unit-ref * * @param environment The environment to resolve the elements for * @param classLoader The deployment class loader * @param deploymentReflectionIndex The reflection index * @return The bindings for the environment entries */ private List<BindingConfiguration> getPersistenceContextRefs( DeploymentUnit deploymentUnit, DeploymentDescriptorEnvironment environment, ClassLoader classLoader, DeploymentReflectionIndex deploymentReflectionIndex, ResourceInjectionTarget resourceInjectionTarget) throws DeploymentUnitProcessingException { List<BindingConfiguration> bindingConfigurations = new ArrayList<BindingConfiguration>(); final RemoteEnvironment remoteEnvironment = environment.getEnvironment(); if (remoteEnvironment == null) { return bindingConfigurations; } if (remoteEnvironment instanceof Environment) { PersistenceContextReferencesMetaData persistenceUnitRefs = ((Environment) remoteEnvironment).getPersistenceContextRefs(); if (persistenceUnitRefs != null) { for (PersistenceContextReferenceMetaData puRef : persistenceUnitRefs) { String name = puRef.getName(); String persistenceUnitName = puRef.getPersistenceUnitName(); String lookup = puRef.getLookupName(); if (!isEmpty(lookup) && !isEmpty(persistenceUnitName)) { throw MESSAGES.cannotSpecifyBoth( "<lookup-name>", lookup, "persistence-unit-name", persistenceUnitName, "<persistence-context-ref/>", resourceInjectionTarget); } if (!name.startsWith("java:")) { name = environment.getDefaultContext() + name; } // our injection (source) comes from the local (ENC) lookup, no matter what. LookupInjectionSource injectionSource = new LookupInjectionSource(name); // add any injection targets processInjectionTargets( resourceInjectionTarget, injectionSource, classLoader, deploymentReflectionIndex, puRef, EntityManager.class); BindingConfiguration bindingConfiguration = null; if (!isEmpty(lookup)) { bindingConfiguration = new BindingConfiguration(name, new LookupInjectionSource(lookup)); } else { PropertiesMetaData properties = puRef.getProperties(); Map map = new HashMap(); if (properties != null) { for (PropertyMetaData prop : properties) { map.put(prop.getKey(), prop.getValue()); } } PersistenceContextType type = puRef.getPersistenceContextType() == null ? PersistenceContextType.TRANSACTION : puRef.getPersistenceContextType(); InjectionSource pcBindingSource = this.getPersistenceContextBindingSource( deploymentUnit, persistenceUnitName, type, map); bindingConfiguration = new BindingConfiguration(name, pcBindingSource); } bindingConfigurations.add(bindingConfiguration); } } } return bindingConfigurations; }
/** * Resolves persistence-unit-ref * * @param environment The environment to resolve the elements for * @param classLoader The deployment class loader * @param deploymentReflectionIndex The reflection index * @return The bindings for the environment entries */ private List<BindingConfiguration> getPersistenceUnitRefs( DeploymentUnit deploymentUnit, DeploymentDescriptorEnvironment environment, ClassLoader classLoader, DeploymentReflectionIndex deploymentReflectionIndex, ResourceInjectionTarget resourceInjectionTarget) throws DeploymentUnitProcessingException { final List<BindingConfiguration> bindingConfigurations = new ArrayList<BindingConfiguration>(); if (environment.getEnvironment() == null) { return bindingConfigurations; } PersistenceUnitReferencesMetaData persistenceUnitRefs = environment.getEnvironment().getPersistenceUnitRefs(); if (persistenceUnitRefs != null) { if (persistenceUnitRefs.size() > 0) { JPADeploymentMarker.mark(deploymentUnit); } for (PersistenceUnitReferenceMetaData puRef : persistenceUnitRefs) { String name = puRef.getName(); String persistenceUnitName = puRef.getPersistenceUnitName(); String lookup = puRef.getLookupName(); if (!isEmpty(lookup) && !isEmpty(persistenceUnitName)) { throw MESSAGES.cannotSpecifyBoth( "<lookup-name>", lookup, "persistence-unit-name", persistenceUnitName, "<persistence-unit-ref/>", resourceInjectionTarget); } if (!name.startsWith("java:")) { name = environment.getDefaultContext() + name; } // our injection (source) comes from the local (ENC) lookup, no matter what. LookupInjectionSource injectionSource = new LookupInjectionSource(name); // add any injection targets processInjectionTargets( resourceInjectionTarget, injectionSource, classLoader, deploymentReflectionIndex, puRef, EntityManagerFactory.class); BindingConfiguration bindingConfiguration = null; if (!isEmpty(lookup)) { bindingConfiguration = new BindingConfiguration(name, new LookupInjectionSource(lookup)); } else { InjectionSource puBindingSource = this.getPersistenceUnitBindingSource(deploymentUnit, persistenceUnitName); bindingConfiguration = new BindingConfiguration(name, puBindingSource); } bindingConfigurations.add(bindingConfiguration); } } return bindingConfigurations; }