All Downloads are FREE. Search and download functionalities are using the official Maven repository.

me.prettyprint.hom.EntityManagerFactoryImpl Maven / Gradle / Ivy

package me.prettyprint.hom;

import java.util.Map;

import javax.persistence.Cache;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnitUtil;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.metamodel.Metamodel;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import me.prettyprint.cassandra.service.CassandraHostConfigurator;
import me.prettyprint.hector.api.Cluster;
import me.prettyprint.hector.api.exceptions.HectorException;
import me.prettyprint.hector.api.factory.HFactory;

public class EntityManagerFactoryImpl implements EntityManagerFactory {

  private Logger log = LoggerFactory.getLogger(EntityManagerFactoryImpl.class);

  private EntityManagerConfigurator entityManagerConfigurator;
  private Cluster cluster;
  
  public EntityManagerFactoryImpl() {
    
  }
  
  public EntityManagerFactoryImpl(Map properties) {
    this(new EntityManagerConfigurator(properties));

    // cassandraHostConfigurator properties
    // Steps:
    // 1. initialize Hector 
    // 2. aquire keyspace
    // 3. build the cache mgr (internal to EntityManager)
    // 4. build the objectMapper (internal to EntityManger)
  }
  
  public EntityManagerFactoryImpl(EntityManagerConfigurator entityManagerConfigurator) {
    this.entityManagerConfigurator = entityManagerConfigurator;
    this.cluster = HFactory.getOrCreateCluster(entityManagerConfigurator.getClusterName(), 
        entityManagerConfigurator.getCassandraHostConfigurator());

  }
  
  @Override
  public void close() {
    cluster.getConnectionManager().shutdown();
  }

  @Override
  public EntityManager createEntityManager() {
    log.debug("building EMF");
    return buildEntityManager(entityManagerConfigurator.getKeyspace());
  }
  
  private EntityManagerImpl buildEntityManager(String keyspace) {
    EntityManagerImpl entityManager = new EntityManagerImpl(HFactory.
        createKeyspace(keyspace, cluster), 
        entityManagerConfigurator.getClasspathPrefix());
    log.debug("Built entityManager {}", entityManager);
    return entityManager; 
  }

  /**
   * Looks for the {@link EntityManagerConfigurator#KEYSPACE_PROP} using the 
   * keyspace already present on the internal EntityManagerConfigurator if already found
   * @param map
   * @return
   */
  @SuppressWarnings("unchecked")
  @Override
  public EntityManager createEntityManager(Map map) {
    log.debug("building EMF with props");
    String keyspaceStr = EntityManagerConfigurator.getPropertyGently(map, EntityManagerConfigurator.KEYSPACE_PROP, false);
    if ( StringUtils.isBlank(keyspaceStr) ) {
      keyspaceStr = entityManagerConfigurator.getKeyspace();
    }            
    return buildEntityManager(keyspaceStr);
  }

  @Override
  public boolean isOpen() {
    try {
      cluster.describeClusterName();
      return true;
    } catch (HectorException he) {
      log.debug("isOpen failed to connecto to cluster: {}",he.getMessage());
    }
    return false;
  }

  @Override
  public Cache getCache() {
    // TODO Auto-generated method stub
    return null;
  }

  @Override
  public CriteriaBuilder getCriteriaBuilder() {
    // TODO Auto-generated method stub
    return null;
  }

  @Override
  public Metamodel getMetamodel() {
    // TODO Auto-generated method stub
    return null;
  }

  @Override
  public PersistenceUnitUtil getPersistenceUnitUtil() {
    // TODO Auto-generated method stub
    return null;
  }

  @Override
  public Map getProperties() {
    // TODO Auto-generated method stub
    return null;
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy