Package org.hibernate.jmx

Source Code of org.hibernate.jmx.SessionFactoryStub

/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* Copyright (c) 2010, Red Hat Inc. or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors.  All third-party contributions are
* distributed under license by Red Hat Inc.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA  02110-1301  USA
*/
package org.hibernate.jmx;

import java.io.InvalidObjectException;
import java.io.ObjectStreamException;
import java.io.Serializable;
import java.sql.Connection;
import java.util.Map;
import java.util.Set;
import javax.naming.NamingException;
import javax.naming.Reference;
import javax.naming.StringRefAddr;

import org.jboss.logging.Logger;

import org.hibernate.AssertionFailure;
import org.hibernate.Cache;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionBuilder;
import org.hibernate.SessionFactory;
import org.hibernate.StatelessSession;
import org.hibernate.StatelessSessionBuilder;
import org.hibernate.TypeHelper;
import org.hibernate.engine.spi.FilterDefinition;
import org.hibernate.id.IdentifierGenerator;
import org.hibernate.id.UUIDGenerator;
import org.hibernate.internal.CoreMessageLogger;
import org.hibernate.internal.SessionFactoryRegistry;
import org.hibernate.metadata.ClassMetadata;
import org.hibernate.metadata.CollectionMetadata;
import org.hibernate.service.jndi.internal.JndiServiceImpl;
import org.hibernate.stat.Statistics;

/**
* A flyweight for <tt>SessionFactory</tt>. If the MBean itself does not
* have classpath to the persistent classes, then a stub will be registered
* with JNDI and the actual <tt>SessionFactoryImpl</tt> built upon first
* access.
*
* @author Gavin King
*
* @deprecated See <a href="http://opensource.atlassian.com/projects/hibernate/browse/HHH-6190">HHH-6190</a> for details
*/
@Deprecated
public class SessionFactoryStub implements SessionFactory {
  private static final IdentifierGenerator UUID_GENERATOR = UUIDGenerator.buildSessionFactoryUniqueIdentifierGenerator();

    private static final CoreMessageLogger LOG = Logger.getMessageLogger(CoreMessageLogger.class, SessionFactoryStub.class.getName());

  private transient SessionFactory impl;
  private transient HibernateService service;
  private String uuid;
  private String name;

  SessionFactoryStub(HibernateService service) {
    this.service = service;
    this.name = service.getJndiName();
    try {
      uuid = (String) UUID_GENERATOR.generate(null, null);
    }
    catch (Exception e) {
      throw new AssertionFailure("Could not generate UUID");
    }

    SessionFactoryRegistry.INSTANCE.addSessionFactory( uuid, name, this, new JndiServiceImpl( service.getProperties() )  );
  }

  @Override
  public SessionFactoryOptions getSessionFactoryOptions() {
    return impl.getSessionFactoryOptions();
  }

  @Override
  public SessionBuilder withOptions() {
    return getImpl().withOptions();
  }

  public Session openSession() throws HibernateException {
    return getImpl().openSession();
  }

  public Session getCurrentSession() {
    return getImpl().getCurrentSession();
  }

  private synchronized SessionFactory getImpl() {
    if (impl==null) impl = service.buildSessionFactory();
    return impl;
  }

  //readResolveObject
  private Object readResolve() throws ObjectStreamException {
    // look for the instance by uuid
    Object result = SessionFactoryRegistry.INSTANCE.getSessionFactory( uuid ) ;
    if ( result == null ) {
            // in case we were deserialized in a different JVM, look for an instance with the same name
      // (alternatively we could do an actual JNDI lookup here....)
      result = SessionFactoryRegistry.INSTANCE.getNamedSessionFactory( name );
      if ( result == null ) {
        throw new InvalidObjectException( "Could not find a SessionFactory [uuid=" + uuid + ",name=" + name + "]" );
      }
      LOG.debug("Resolved stub SessionFactory by name");
    }
    else {
      LOG.debug("Resolved stub SessionFactory by UUID");
    }
    return result;
  }

  /**
   * @see javax.naming.Referenceable#getReference()
   */
  @Override
  public Reference getReference() throws NamingException {
    return new Reference(
        SessionFactoryStub.class.getName(),
        new StringRefAddr("uuid", uuid),
        SessionFactoryRegistry.ObjectFactoryImpl.class.getName(),
        null
    );
  }

  public ClassMetadata getClassMetadata(Class persistentClass) throws HibernateException {
    return getImpl().getClassMetadata(persistentClass);
  }

  public ClassMetadata getClassMetadata(String entityName)
  throws HibernateException {
    return getImpl().getClassMetadata(entityName);
  }

  public CollectionMetadata getCollectionMetadata(String roleName) throws HibernateException {
    return getImpl().getCollectionMetadata(roleName);
  }

  public Map<String,ClassMetadata> getAllClassMetadata() throws HibernateException {
    return getImpl().getAllClassMetadata();
  }

  public Map getAllCollectionMetadata() throws HibernateException {
    return getImpl().getAllCollectionMetadata();
  }

  public void close() throws HibernateException {
  }

  public boolean isClosed() {
    return false;
  }

  public Cache getCache() {
    return getImpl().getCache();
  }

  public void evict(Class persistentClass, Serializable id)
    throws HibernateException {
    getImpl().evict(persistentClass, id);
  }

  public void evict(Class persistentClass) throws HibernateException {
    getImpl().evict(persistentClass);
  }

  public void evictEntity(String entityName, Serializable id)
  throws HibernateException {
    getImpl().evictEntity(entityName, id);
  }

  public void evictEntity(String entityName) throws HibernateException {
    getImpl().evictEntity(entityName);
  }

  public void evictCollection(String roleName, Serializable id)
    throws HibernateException {
    getImpl().evictCollection(roleName, id);
  }

  public void evictCollection(String roleName) throws HibernateException {
    getImpl().evictCollection(roleName);
  }

  public void evictQueries() throws HibernateException {
    getImpl().evictQueries();
  }

  public void evictQueries(String cacheRegion) throws HibernateException {
    getImpl().evictQueries(cacheRegion);
  }

  public Statistics getStatistics() {
    return getImpl().getStatistics();
  }

  @Override
  public StatelessSessionBuilder withStatelessOptions() {
    return getImpl().withStatelessOptions();
  }

  public StatelessSession openStatelessSession() {
    return getImpl().openStatelessSession();
  }

  public StatelessSession openStatelessSession(Connection conn) {
    return getImpl().openStatelessSession(conn);
  }

  public Set getDefinedFilterNames() {
    return getImpl().getDefinedFilterNames();
  }

  public FilterDefinition getFilterDefinition(String filterName) throws HibernateException {
    return getImpl().getFilterDefinition( filterName );
  }

  public boolean containsFetchProfileDefinition(String name) {
    return getImpl().containsFetchProfileDefinition( name );
  }

  public TypeHelper getTypeHelper() {
    return getImpl().getTypeHelper();
  }
}
TOP

Related Classes of org.hibernate.jmx.SessionFactoryStub

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.