alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Hibernate example source code file (SessionFactoryStub.java)

This example Hibernate source code file (SessionFactoryStub.java) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Hibernate tags/keywords

could, hibernateexception, hibernateexception, io, jdbc, map, naming, object, override, override, serializable, serializable, sessionfactory, sessionfactory, sql, statelesssession, string, util, uuid

The Hibernate SessionFactoryStub.java source code

/*
 * 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 javax.naming.NamingException;
import javax.naming.Reference;
import javax.naming.StringRefAddr;
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 org.jboss.logging.Logger;

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

/**
 * A flyweight for <tt>SessionFactory. 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 built upon first
 * access.
 *
 * @author Gavin King
 *
 * @deprecated See <a href="http://opensource.atlassian.com/projects/hibernate/browse/HHH-6190">HHH-6190 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.debugf("Resolved stub SessionFactory by name");
        }
		else {
			LOG.debugf("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();
	}
}

Other Hibernate examples (source code examples)

Here is a short list of links related to this Hibernate SessionFactoryStub.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.