HHH-2863 : fixed for directory layout change ++
git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@14028 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
parent
45667c1c79
commit
ccdfd6c4a3
|
@ -0,0 +1,327 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2007, Red Hat Middleware, LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* 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, v. 2.1. This program is distributed in the
|
||||||
|
* hope that it will be useful, but WITHOUT A 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, v.2.1 along with this
|
||||||
|
* distribution; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* Red Hat Author(s): Max Andersen, Steve Ebersole
|
||||||
|
*/
|
||||||
|
package org.hibernate.test.cfg;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.FilenameFilter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.ObjectInputStream;
|
||||||
|
import java.io.ObjectOutputStream;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
|
||||||
|
import junit.framework.Test;
|
||||||
|
import junit.framework.TestSuite;
|
||||||
|
import junit.textui.TestRunner;
|
||||||
|
|
||||||
|
import org.hibernate.SessionFactory;
|
||||||
|
import org.hibernate.cfg.Configuration;
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
|
import org.hibernate.classic.Session;
|
||||||
|
import org.hibernate.junit.UnitTestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test of configuration, specifically "cacheable files".
|
||||||
|
*
|
||||||
|
* @author Max Andersen
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
public class ConfigurationPerformanceTest extends UnitTestCase {
|
||||||
|
|
||||||
|
private final String workPackageName = "org.hibernate.test.cfg.work";
|
||||||
|
private File compilationBaseDir;
|
||||||
|
private File mappingBaseDir;
|
||||||
|
private File workPackageDir;
|
||||||
|
|
||||||
|
protected void setUp() throws Exception {
|
||||||
|
compilationBaseDir = getTestComplileDirectory();
|
||||||
|
mappingBaseDir = new File( compilationBaseDir, "org/hibernate/test" );
|
||||||
|
workPackageDir = new File( compilationBaseDir, workPackageName.replace( '.', '/' ) );
|
||||||
|
if ( workPackageDir.exists() ) {
|
||||||
|
workPackageDir.delete();
|
||||||
|
}
|
||||||
|
workPackageDir.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void tearDown() throws Exception {
|
||||||
|
super.tearDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final String[] FILES = new String[] {
|
||||||
|
"legacy/ABC.hbm.xml",
|
||||||
|
"legacy/ABCExtends.hbm.xml",
|
||||||
|
"legacy/Baz.hbm.xml",
|
||||||
|
"legacy/Blobber.hbm.xml",
|
||||||
|
"legacy/Broken.hbm.xml",
|
||||||
|
"legacy/Category.hbm.xml",
|
||||||
|
"legacy/Circular.hbm.xml",
|
||||||
|
"legacy/Commento.hbm.xml",
|
||||||
|
"legacy/ComponentNotNullMaster.hbm.xml",
|
||||||
|
"legacy/Componentizable.hbm.xml",
|
||||||
|
"legacy/Container.hbm.xml",
|
||||||
|
"legacy/Custom.hbm.xml",
|
||||||
|
"legacy/CustomSQL.hbm.xml",
|
||||||
|
"legacy/Eye.hbm.xml",
|
||||||
|
"legacy/Fee.hbm.xml",
|
||||||
|
"legacy/Fo.hbm.xml",
|
||||||
|
"legacy/FooBar.hbm.xml",
|
||||||
|
"legacy/Fum.hbm.xml",
|
||||||
|
"legacy/Fumm.hbm.xml",
|
||||||
|
"legacy/Glarch.hbm.xml",
|
||||||
|
"legacy/Holder.hbm.xml",
|
||||||
|
"legacy/IJ2.hbm.xml",
|
||||||
|
"legacy/Immutable.hbm.xml",
|
||||||
|
"legacy/Location.hbm.xml",
|
||||||
|
"legacy/Many.hbm.xml",
|
||||||
|
"legacy/Map.hbm.xml",
|
||||||
|
"legacy/Marelo.hbm.xml",
|
||||||
|
"legacy/MasterDetail.hbm.xml",
|
||||||
|
"legacy/Middle.hbm.xml",
|
||||||
|
"legacy/Multi.hbm.xml",
|
||||||
|
"legacy/MultiExtends.hbm.xml",
|
||||||
|
"legacy/Nameable.hbm.xml",
|
||||||
|
"legacy/One.hbm.xml",
|
||||||
|
"legacy/ParentChild.hbm.xml",
|
||||||
|
"legacy/Qux.hbm.xml",
|
||||||
|
"legacy/Simple.hbm.xml",
|
||||||
|
"legacy/SingleSeveral.hbm.xml",
|
||||||
|
"legacy/Stuff.hbm.xml",
|
||||||
|
"legacy/UpDown.hbm.xml",
|
||||||
|
"legacy/Vetoer.hbm.xml",
|
||||||
|
"legacy/WZ.hbm.xml",
|
||||||
|
};
|
||||||
|
|
||||||
|
public ConfigurationPerformanceTest(String string) {
|
||||||
|
super( string );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Test suite() {
|
||||||
|
return new TestSuite( ConfigurationPerformanceTest.class );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
TestRunner.run( suite() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testLoadingAndSerializationOfConfiguration() throws Throwable {
|
||||||
|
String prefix = mappingBaseDir.getAbsolutePath() + '/';
|
||||||
|
try {
|
||||||
|
// first time
|
||||||
|
System.err.println( "###FIRST SAVELOAD###" );
|
||||||
|
SessionFactory factory = saveAndLoad( prefix, FILES, "hibernate.cfg.bin" );
|
||||||
|
factory.close();
|
||||||
|
// second time to validate
|
||||||
|
System.err.println( "###SECOND SAVELOAD###" );
|
||||||
|
factory = saveAndLoad( prefix, FILES, "hibernate.cfg.bin" );
|
||||||
|
factory.close();
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
System.err.println( "###CLEANING UP###" );
|
||||||
|
File file = null;
|
||||||
|
try {
|
||||||
|
// clean up
|
||||||
|
file = new File( "hibernate.cfg.bin" );
|
||||||
|
file.delete();
|
||||||
|
}
|
||||||
|
catch ( Throwable t ) {
|
||||||
|
System.err.println( "Unable to cleanup [" + file + "] : " + t );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( int i = 0; i < FILES.length; i++ ) {
|
||||||
|
try {
|
||||||
|
String fileName = FILES[i];
|
||||||
|
file = new File( prefix, fileName + ".bin" );
|
||||||
|
file.delete();
|
||||||
|
}
|
||||||
|
catch ( Throwable t ) {
|
||||||
|
System.err.println( "Unable to cleanup [" + file + "] : " + t );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testSessionFactoryCreationTime() throws Throwable {
|
||||||
|
generateTestFiles();
|
||||||
|
if ( !workPackageDir.exists() ) {
|
||||||
|
System.err.println( workPackageDir.getAbsoluteFile() + " not found" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SessionFactory factory = saveAndLoad(
|
||||||
|
workPackageDir.getAbsolutePath() + '/',
|
||||||
|
workPackageDir.list(
|
||||||
|
new FilenameFilter() {
|
||||||
|
public boolean accept(File dir, String name) {
|
||||||
|
return name.endsWith( ".hbm.xml" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
),
|
||||||
|
"hibernateperftest.cfg.bin"
|
||||||
|
);
|
||||||
|
|
||||||
|
Session session = factory.openSession();
|
||||||
|
session.createQuery( "from Test1" ).list();
|
||||||
|
|
||||||
|
factory.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private SessionFactory saveAndLoad(String prefix, String[] files, String cfgName) throws Throwable {
|
||||||
|
System.err.println( "saveAndLoad from " + prefix + " with cfg = " + cfgName );
|
||||||
|
File cachedCfgFile = new File( workPackageDir, cfgName );
|
||||||
|
|
||||||
|
Configuration cfg;
|
||||||
|
long start;
|
||||||
|
|
||||||
|
if ( !cachedCfgFile.exists() ) {
|
||||||
|
start = System.currentTimeMillis();
|
||||||
|
cfg = new Configuration();
|
||||||
|
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
||||||
|
System.err.println( "Created configuration: " + ( System.currentTimeMillis() - start ) / 1000.0 + " sec." );
|
||||||
|
|
||||||
|
start = System.currentTimeMillis();
|
||||||
|
for ( int i = 0; i < files.length; i++ ) {
|
||||||
|
String file = files[i];
|
||||||
|
cfg.addCacheableFile( new File( prefix + file ) );
|
||||||
|
}
|
||||||
|
System.err.println(
|
||||||
|
"Added " + ( files.length ) + " resources: " +
|
||||||
|
( System.currentTimeMillis() - start ) / 1000.0 + " sec."
|
||||||
|
);
|
||||||
|
|
||||||
|
ObjectOutputStream os = new ObjectOutputStream( new FileOutputStream( cachedCfgFile ) );
|
||||||
|
os.writeObject( cfg ); // need to serialize Configuration *before* building sf since it would require non-mappings and cfg types to be serializable
|
||||||
|
os.flush();
|
||||||
|
os.close();
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
start = System.currentTimeMillis();
|
||||||
|
ObjectInputStream is = new ObjectInputStream( new FileInputStream( cachedCfgFile ) );
|
||||||
|
cfg = ( Configuration ) is.readObject();
|
||||||
|
is.close();
|
||||||
|
System.err
|
||||||
|
.println( "Loaded serializable configuration:" + ( System.currentTimeMillis() - start ) / 1000.0 + " sec." );
|
||||||
|
}
|
||||||
|
start = System.currentTimeMillis();
|
||||||
|
System.err.println( "Start build of session factory" );
|
||||||
|
SessionFactory factory = cfg.buildSessionFactory();
|
||||||
|
System.err.println( "Build session factory:" + ( System.currentTimeMillis() - start ) / 1000.0 + " sec." );
|
||||||
|
return factory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void generateTestFiles() throws Throwable {
|
||||||
|
String filesToCompile = "";
|
||||||
|
for ( int count = 0; count < 100; count++ ) {
|
||||||
|
String name = "Test" + count;
|
||||||
|
File javaFile = new File( workPackageDir, name + ".java" );
|
||||||
|
File hbmFile = new File( workPackageDir, name + ".hbm.xml" );
|
||||||
|
filesToCompile += ( javaFile.getAbsolutePath() + " " );
|
||||||
|
|
||||||
|
javaFile.getParentFile().mkdirs();
|
||||||
|
hbmFile.getParentFile().mkdirs();
|
||||||
|
|
||||||
|
System.out.println( "Generating " + javaFile.getAbsolutePath() );
|
||||||
|
PrintWriter javaWriter = null;
|
||||||
|
PrintWriter hbmWriter = null;
|
||||||
|
try {
|
||||||
|
javaWriter = new PrintWriter( new FileWriter( javaFile ) );
|
||||||
|
hbmWriter = new PrintWriter( new FileWriter( hbmFile ) );
|
||||||
|
|
||||||
|
javaWriter.println( "package " + workPackageName + ";" );
|
||||||
|
hbmWriter.println(
|
||||||
|
"<?xml version=\"1.0\"?>\r\n" +
|
||||||
|
"<!DOCTYPE hibernate-mapping PUBLIC \r\n" +
|
||||||
|
" \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\r\n" +
|
||||||
|
" \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\r\n"
|
||||||
|
);
|
||||||
|
|
||||||
|
hbmWriter.println( "<hibernate-mapping package=\"" + workPackageName + "\">" );
|
||||||
|
|
||||||
|
javaWriter.println( "public class " + name + " {" );
|
||||||
|
javaWriter.println( " static { System.out.println(\"" + name + " initialized!\"); }" );
|
||||||
|
hbmWriter.println( "<class name=\"" + name + "\">" );
|
||||||
|
|
||||||
|
hbmWriter.println( "<id type=\"long\"><generator class=\"assigned\"/></id>" );
|
||||||
|
for ( int propCount = 0; propCount < 100; propCount++ ) {
|
||||||
|
String propName = "Prop" + propCount;
|
||||||
|
|
||||||
|
writeJavaProperty( javaWriter, propName );
|
||||||
|
|
||||||
|
hbmWriter.println( "<property name=\"" + propName + "\" type=\"string\"/>" );
|
||||||
|
|
||||||
|
}
|
||||||
|
hbmWriter.println( "</class>" );
|
||||||
|
javaWriter.println( "}" );
|
||||||
|
hbmWriter.println( "</hibernate-mapping>" );
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
if ( javaWriter != null ) {
|
||||||
|
javaWriter.flush();
|
||||||
|
javaWriter.close();
|
||||||
|
}
|
||||||
|
if ( hbmWriter != null ) {
|
||||||
|
hbmWriter.flush();
|
||||||
|
hbmWriter.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String javac = "javac -version -d " + compilationBaseDir + " " + filesToCompile;
|
||||||
|
System.err.println( "JAVAC : " + javac );
|
||||||
|
Process process = Runtime.getRuntime().exec( javac );
|
||||||
|
process.waitFor();
|
||||||
|
System.err.println( "********************* JAVAC OUTPUT **********************" );
|
||||||
|
pullStream( process.getInputStream() );
|
||||||
|
System.err.println( "---------------------------------------------------------" );
|
||||||
|
pullStream( process.getErrorStream() );
|
||||||
|
System.err.println( "*********************************************************" );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void pullStream(InputStream stream) throws IOException {
|
||||||
|
if ( stream == null || stream.available() <= 0 ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
byte[] buffer = new byte[256];
|
||||||
|
while ( true ) {
|
||||||
|
int read = stream.read( buffer );
|
||||||
|
if ( read == -1 ) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
System.err.write( buffer, 0, read );
|
||||||
|
}
|
||||||
|
// System.err.println( "" );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void writeJavaProperty(PrintWriter javaWriter, String propName) {
|
||||||
|
javaWriter.println( " String " + propName + ";" );
|
||||||
|
javaWriter.println( " String get" + propName + "() { return " + propName + "; }" );
|
||||||
|
javaWriter.println( " void set" + propName + "(String newVal) { " + propName + "=newVal; }" );
|
||||||
|
}
|
||||||
|
|
||||||
|
private File getTestComplileDirectory() {
|
||||||
|
String resourceName = "org/hibernate/test/legacy/ABC.hbm.xml";
|
||||||
|
String prefix = getClass().getClassLoader().getResource( resourceName ).getFile();
|
||||||
|
prefix = prefix.substring( 0, prefix.lastIndexOf( '/' ) ); // ABC.hbm.xml
|
||||||
|
prefix = prefix.substring( 0, prefix.lastIndexOf( '/' ) ); // legacy/
|
||||||
|
prefix = prefix.substring( 0, prefix.lastIndexOf( '/' ) ); // test/
|
||||||
|
prefix = prefix.substring( 0, prefix.lastIndexOf( '/' ) ); // hibernate/
|
||||||
|
prefix = prefix.substring( 0, prefix.lastIndexOf( '/' ) ); // org/
|
||||||
|
return new File( prefix + '/' );
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue