⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sessionfactoryobjectfactory.java

📁 一个Java持久层类库
💻 JAVA
字号:
//$Id: SessionFactoryObjectFactory.java 11337 2007-03-22 22:42:58Z epbernard $package org.hibernate.impl;import java.util.Hashtable;import java.util.Iterator;import java.util.Properties;import javax.naming.Context;import javax.naming.InvalidNameException;import javax.naming.Name;import javax.naming.NamingException;import javax.naming.Reference;import javax.naming.event.EventContext;import javax.naming.event.NamespaceChangeListener;import javax.naming.event.NamingEvent;import javax.naming.event.NamingExceptionEvent;import javax.naming.event.NamingListener;import javax.naming.spi.ObjectFactory;import org.hibernate.SessionFactory;import org.hibernate.util.FastHashMap;import org.hibernate.util.NamingHelper;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * Resolves <tt>SessionFactory</tt> JNDI lookups and deserialization */public class SessionFactoryObjectFactory implements ObjectFactory {	private static final SessionFactoryObjectFactory INSTANCE; //to stop the class from being unloaded	private static final Logger log;	static {		log = LoggerFactory.getLogger( SessionFactoryObjectFactory.class );		INSTANCE = new SessionFactoryObjectFactory();		log.debug("initializing class SessionFactoryObjectFactory");	}	private static final FastHashMap INSTANCES = new FastHashMap();	private static final FastHashMap NAMED_INSTANCES = new FastHashMap();	private static final NamingListener LISTENER = new NamespaceChangeListener() {		public void objectAdded(NamingEvent evt) {			log.debug( "A factory was successfully bound to name: " + evt.getNewBinding().getName() );		}		public void objectRemoved(NamingEvent evt) {			String name = evt.getOldBinding().getName();			log.info("A factory was unbound from name: " + name);			Object instance = NAMED_INSTANCES.remove(name);			Iterator iter = INSTANCES.values().iterator();			while ( iter.hasNext() ) {				if ( iter.next()==instance ) iter.remove();			}		}		public void objectRenamed(NamingEvent evt) {			String name = evt.getOldBinding().getName();			log.info("A factory was renamed from name: " + name);			NAMED_INSTANCES.put( evt.getNewBinding().getName(), NAMED_INSTANCES.remove(name) );		}		public void namingExceptionThrown(NamingExceptionEvent evt) {			log.warn( "Naming exception occurred accessing factory: " + evt.getException() );		}	};	public Object getObjectInstance(Object reference, Name name, Context ctx, Hashtable env) throws Exception {		log.debug("JNDI lookup: " + name);		String uid = (String) ( (Reference) reference ).get(0).getContent();		return getInstance(uid);	}	public static void addInstance(String uid, String name, SessionFactory instance, Properties properties) {		log.debug("registered: " + uid + " (" + ( (name==null) ? "unnamed" : name ) + ')');		INSTANCES.put(uid, instance);		if (name!=null) NAMED_INSTANCES.put(name, instance);		//must add to JNDI _after_ adding to HashMaps, because some JNDI servers use serialization		if (name==null) {			log.info("Not binding factory to JNDI, no JNDI name configured");		}		else {			log.info("Factory name: " + name);			try {				Context ctx = NamingHelper.getInitialContext(properties);				NamingHelper.bind(ctx, name, instance);				log.info("Bound factory to JNDI name: " + name);				( (EventContext) ctx ).addNamingListener(name, EventContext.OBJECT_SCOPE, LISTENER);			}			catch (InvalidNameException ine) {				log.error("Invalid JNDI name: " + name, ine);			}			catch (NamingException ne) {				log.warn("Could not bind factory to JNDI", ne);			}			catch(ClassCastException cce) {				log.warn("InitialContext did not implement EventContext");			}		}	}	public static void removeInstance(String uid, String name, Properties properties) {		//TODO: theoretically non-threadsafe...		if (name!=null) {			log.info("Unbinding factory from JNDI name: " + name);			try {				Context ctx = NamingHelper.getInitialContext(properties);				ctx.unbind(name);				log.info("Unbound factory from JNDI name: " + name);			}			catch (InvalidNameException ine) {				log.error("Invalid JNDI name: " + name, ine);			}			catch (NamingException ne) {				log.warn("Could not unbind factory from JNDI", ne);			}			NAMED_INSTANCES.remove(name);		}		INSTANCES.remove(uid);	}	public static Object getNamedInstance(String name) {		log.debug("lookup: name=" + name);		Object result = NAMED_INSTANCES.get(name);		if (result==null) {			log.debug("Not found: " + name);			log.debug( NAMED_INSTANCES.toString() );		}		return result;	}	public static Object getInstance(String uid) {		log.debug("lookup: uid=" + uid);		Object result = INSTANCES.get(uid);		if (result==null) {			log.debug("Not found: " + uid);			log.debug( INSTANCES.toString() );		}		return result;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -