Package com.adaptrex.core.persistence.jpa

Source Code of com.adaptrex.core.persistence.jpa.JpaPersistenceManager

/*
* Copyright 2012 Adaptrex, LLC.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.adaptrex.core.persistence.jpa;

import com.adaptrex.core.AdaptrexConfig;
import com.adaptrex.core.persistence.AdaptrexPersistence;
import com.adaptrex.core.persistence.AdaptrexPersistenceManager;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.xml.parsers.SAXParserFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;

/**
*
* @author
* adaptrex
*/
public class JpaPersistenceManager implements AdaptrexPersistenceManager {

    private static Logger log = LoggerFactory.getLogger(JpaPersistenceManager.class);
    private Map<String, AdaptrexPersistence> adaptrexPersistenceMap;
    private AdaptrexPersistence defaultPersistence;

    public JpaPersistenceManager(AdaptrexConfig config) throws IOException {
  adaptrexPersistenceMap = new HashMap<String, AdaptrexPersistence>();

  ClassLoader cl = Thread.currentThread().getContextClassLoader();
  List<InputStream> inputStreams = loadResources("META-INF/persistence.xml", cl);

  if (inputStreams.isEmpty()) {
      log.warn("Couldn't find persistence.xml");
      return;
  }

  final String defaultFactoryName = (String) config.get("defaultfactory");
  final boolean singleFactory = inputStreams.size() == 1;
 
  try {
      for (InputStream stream : inputStreams) {
    SAXParserFactory.newInstance().newSAXParser().parse(stream, new DefaultHandler() {
        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) {
      if (!qName.equalsIgnoreCase("persistence-unit")) {
          return;
      }

      String persistenceUnitName = attributes.getValue("name");
      log.debug("Creating EntityManagerFactory: " + persistenceUnitName);

      EntityManagerFactory factory =
        Persistence.createEntityManagerFactory(persistenceUnitName);
      AdaptrexPersistence persistence = new JpaPersistence(factory);
      adaptrexPersistenceMap.put(persistenceUnitName, persistence);
     
      if (singleFactory || persistenceUnitName.equals(defaultFactoryName)) {
          defaultPersistence = persistence;
      }
        }
    });
      }
     
      if (defaultPersistence == null) {
          log.warn("*** Multiple persistence.xml descriptors found but no default has been defined in adaptrex.webapp.config.");
      }
     
  } catch (Exception e) {
      log.warn("Error", e);
  }
    }

    @Override
    public AdaptrexPersistence getPersistence(String factoryName) {
  return factoryName != null ? adaptrexPersistenceMap.get(factoryName) : defaultPersistence;
    }

    @Override
    public AdaptrexPersistence getPersistence() {
  return defaultPersistence;
    }

    @Override
    public void shutdown() {
  for (Map.Entry<String, AdaptrexPersistence> persistenceEntry : adaptrexPersistenceMap.entrySet()) {
      log.info("Shutting Down EntityManagerFactory: " + persistenceEntry.getKey());
      ((EntityManagerFactory) persistenceEntry.getValue().getFactory()).close();
  }
    }

   
    /*
     * Ripped from: http://goo.gl/CYwbl
     */
    public static List<InputStream> loadResources(
      final String name, final ClassLoader classLoader) throws IOException {
  final List<InputStream> list = new ArrayList<InputStream>();
  final Enumeration<URL> systemResources = classLoader.getResources(name);
  while (systemResources.hasMoreElements()) {
      list.add(systemResources.nextElement().openStream());
  }
  return list;
    }
}
TOP

Related Classes of com.adaptrex.core.persistence.jpa.JpaPersistenceManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.