Package org.hibernate.validator.test

Source Code of org.hibernate.validator.test.HANTestCase

//$Id: HANTestCase.java 15133 2008-08-20 10:05:57Z hardy.ferentschik $
package org.hibernate.validator.test;

import java.io.InputStream;

import org.hibernate.SessionFactory;
import org.hibernate.Session;
import org.hibernate.HibernateException;
import org.hibernate.Interceptor;
import org.hibernate.dialect.Dialect;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Environment;
import org.hibernate.cfg.Configuration;

/**
* Copy from HAN
*
* @author Emmanuel Bernard
*/
public abstract class HANTestCase extends junit.framework.TestCase {

  private static SessionFactory sessions;
  private static AnnotationConfiguration cfg;
  private static Dialect dialect;
  private static Class lastTestClass;
  private Session session;

  public HANTestCase() {
    super();
  }

  public HANTestCase(String x) {
    super( x );
  }

  protected void buildSessionFactory(Class[] classes, String[] packages, String[] xmlFiles) throws Exception {

    if ( getSessions() != null ) getSessions().close();
    try {
      setCfg( new AnnotationConfiguration() );
      configure( cfg );
      if ( recreateSchema() ) {
        cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
      }
      for ( int i = 0; i < packages.length; i++ ) {
        getCfg().addPackage( packages[i] );
      }
      for ( int i = 0; i < classes.length; i++ ) {
        getCfg().addAnnotatedClass( classes[i] );
      }
      for ( int i = 0; i < xmlFiles.length; i++ ) {
        InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( xmlFiles[i] );
        getCfg().addInputStream( is );
      }
      setDialect( Dialect.getDialect() );
      setSessions( getCfg().buildSessionFactory( /*new TestInterceptor()*/ ) );
    }
    catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  protected void setUp() throws Exception {
    if ( getSessions() == null || lastTestClass != getClass() ) {
      buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() );
      lastTestClass = getClass();
    }
  }

  protected void runTest() throws Throwable {
    try {
      super.runTest();
      if ( session != null && session.isOpen() ) {
        if ( session.isConnected() ) session.connection().rollback();
        session.close();
        session = null;
        fail( "unclosed session" );
      }
      else {
        session = null;
      }
    }
    catch (Throwable e) {
      try {
        if ( session != null && session.isOpen() ) {
          if ( session.isConnected() ) session.connection().rollback();
          session.close();
        }
      }
      catch (Exception ignore) {
      }
      try {
        if ( sessions != null ) {
          sessions.close();
          sessions = null;
        }
      }
      catch (Exception ignore) {
      }
      throw e;
    }
  }

  public Session openSession() throws HibernateException {
    session = getSessions().openSession();
    return session;
  }

  public Session openSession(Interceptor interceptor) throws HibernateException {
    session = getSessions().openSession( interceptor );
    return session;
  }

  protected abstract Class[] getMappings();

  protected String[] getAnnotatedPackages() {
    return new String[]{};
  }

  protected String[] getXmlFiles() {
    return new String[]{};
  }

  private void setSessions(SessionFactory sessions) {
    HANTestCase.sessions = sessions;
  }

  protected SessionFactory getSessions() {
    return sessions;
  }

  private void setDialect(Dialect dialect) {
    HANTestCase.dialect = dialect;
  }

  protected Dialect getDialect() {
    return dialect;
  }

  protected static void setCfg(AnnotationConfiguration cfg) {
    HANTestCase.cfg = cfg;
  }

  protected static AnnotationConfiguration getCfg() {
    return cfg;
  }

  protected void configure(Configuration cfg) {
    //cfg.setNamingStrategy( AlternativeNamingStrategy.INSTANCE );
    //cfg.getSessionEventListenerConfig().setFlushEventListener( new EJB3FlushEventListener() );
    //cfg.getSessionEventListenerConfig().setAutoFlushEventListener( new EJB3AutoFlushEventListener() );
  }

  protected boolean recreateSchema() {
    return true;
  }

}
TOP

Related Classes of org.hibernate.validator.test.HANTestCase

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.