/**
   * 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;
  }