FileDocCategorySizeDatePackage
Cloneable.javaAPI DocHibernate 3.2.53894Fri Nov 25 10:36:30 GMT 2005org.hibernate.util

Cloneable

public class Cloneable extends Object
An object that is shallow-coneable
author
Steve Ebersole

Fields Summary
private static final Object[]
READER_METHOD_ARGS
Constructors Summary
Methods Summary
private voidcheckListeners()

		BeanInfo beanInfo = null;
		try {
			beanInfo = Introspector.getBeanInfo( getClass(), Object.class );
			internalCheckListeners( beanInfo );
		}
		catch( IntrospectionException t ) {
			throw new HibernateException( "Unable to validate listener config", t );
		}
		finally {
			if ( beanInfo != null ) {
				// release the jdk internal caches everytime to ensure this
				// plays nicely with destroyable class-loaders
				Introspector.flushFromCaches( getClass() );
			}
		}
	
private java.lang.ObjectcopyListeners()

		Object copy = null;
		BeanInfo beanInfo = null;
		try {
			beanInfo = Introspector.getBeanInfo( getClass(), Object.class );
			internalCheckListeners( beanInfo );
			copy = getClass().newInstance();
			PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
			for ( int i = 0, max = pds.length; i < max; i++ ) {
				try {
					pds[i].getWriteMethod().invoke(
							copy,
							new Object[] {
								pds[i].getReadMethod().invoke( this, READER_METHOD_ARGS )
							}
						);
				}
				catch( Throwable t ) {
					throw new HibernateException( "Unable copy copy listener [" + pds[i].getName() + "]" );
				}
			}
		}
		catch( Exception t ) {
			throw new HibernateException( "Unable to copy listeners", t );
		}
		finally {
			if ( beanInfo != null ) {
				// release the jdk internal caches everytime to ensure this
				// plays nicely with destroyable class-loaders
				Introspector.flushFromCaches( getClass() );
			}
		}
		
		return copy;
	
private voidinternalCheckListeners(java.beans.BeanInfo beanInfo)

		PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
		try {
			for ( int i = 0, max = pds.length; i < max; i++ ) {
				final Object listener = pds[i].getReadMethod().invoke( this, READER_METHOD_ARGS );
				if ( listener == null ) {
					throw new HibernateException( "Listener [" + pds[i].getName() + "] was null" );
				}
				if ( listener.getClass().isArray() ) {
					Object[] listenerArray = (Object[]) listener;
					int length = listenerArray.length;
					for ( int index = 0 ; index < length ; index++ ) {
						if ( listenerArray[index] == null ) {
							throw new HibernateException( "Listener in [" + pds[i].getName() + "] was null" );
						}
					}
				}
			}
		}
		catch( HibernateException e ) {
			throw e;
		}
		catch( Throwable t ) {
			throw new HibernateException( "Unable to validate listener config" );
		}
	
public java.lang.ObjectshallowCopy()
Essentially performs a shallow copy of this SessionEventListenerConfig instance; meaning the SessionEventListenerConfig itself is cloned, but the individual listeners are not cloned.

return
The SessionEventListenerConfig shallow copy.


	                           	 
	   
		return AccessController.doPrivileged(
		        new PrivilegedAction() {
			        public Object run() {
				        return copyListeners();
			        }
		        }
			);
	
public voidvalidate()
Checks to ensure the SessionEventListenerConfig is fully configured (basically, that none of the listeners is null).

throws
HibernateException If the SessionEventListenerConfig is not fully configured.

		AccessController.doPrivileged(
		        new PrivilegedAction() {
			        public Object run() {
				        checkListeners();
				        return null;
			        }
		        }
			);