Package org.jboss.test.cluster.ejb3.common.unit

Source Code of org.jboss.test.cluster.ejb3.common.unit.DBSetup

/*
* JBoss, Home of Professional Open Source.
* Copyright 2006, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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 software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.cluster.ejb3.common.unit;

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.lang.reflect.Method;

import junit.extensions.TestSetup;
import junit.framework.Test;

/** A TestSetup that starts hypersonic before the testcase with a tcp
* listening port at 1701.
*
* @author Scott.Stark@jboss.org
* @version $Revison:$
*/
public class DBSetup extends TestSetup
{
   private static final String HYPERSONIC_DIR = "output/hypersonic";
   private static final String DB_NAME = "clusteredentity-db";
   private final boolean deleteInTearDown;
  
   public DBSetup(Test test)
   {
      this(test, true);
   }
  
   public DBSetup(Test test, boolean deleteInTearDown)
   {
      super(test);
      this.deleteInTearDown = deleteInTearDown;
   }

   protected void setUp() throws Exception
   {
         File hypersoniDir = new File(HYPERSONIC_DIR);
         if (!hypersoniDir.exists())
         {
            hypersoniDir.mkdirs();
         }

         if (!hypersoniDir.isDirectory())
         {
            throw new IOException("Failed to create directory: " + hypersoniDir);
         }
     
         File dbPath = new File(hypersoniDir, DB_NAME);

         // Start DB in new thread, or else it will block us
         DBThread serverThread = new DBThread(dbPath);
         serverThread.start();
        
         int elapsed = 0;
         while (!serverThread.isStarted() && elapsed < 15000)
         {
            try
            {
               Thread.sleep(100);
               elapsed += 100;
            }
            catch (InterruptedException ie)
            {
               System.out.println("Interrupted while waiting for Hypersonic");
            }
         }
        
         if (!serverThread.isStarted())
            System.out.println("Hypersonic failed to start in a timely fashion");
   }

   protected void tearDown() throws Exception
   {
      Class.forName("org.hsqldb.jdbcDriver");
      String dbURL = "jdbc:hsqldb:hsql://" + System.getProperty("jbosstest.server.host", "localhost") + ":1701";
      Connection conn = DriverManager.getConnection(dbURL, "sa", "");
      Statement statement = conn.createStatement();     
      statement.executeQuery("SHUTDOWN COMPACT");
     
      if (deleteInTearDown)
      {
         File hypersonicDir = new File(HYPERSONIC_DIR);
         if (hypersonicDir.exists() && hypersonicDir.isDirectory())
         {
            FileFilter filter = new FileFilter() {
               public boolean accept(File file)
               {
                  return file.getName().indexOf(DB_NAME) >= 0;
               }
            };
           
            File[] dbFiles = hypersonicDir.listFiles(filter);
            for (File file : dbFiles)
            {
               file.delete();
            }
         }
      }
     
   }

   public static void main(String[] args) throws Exception
   {
      DBSetup setup = new DBSetup(null);
      setup.setUp();
      Thread.sleep(120*1000);
      setup.tearDown();
   }
  
   class DBThread extends Thread
   {
      boolean started;
      File dbPath;
     
      DBThread(File dbPath)
      {
         super("hypersonic");
         this.dbPath = dbPath;
      }
     
      boolean isStarted()
      {
         return started;
      }
     
      public void run()
      {
         try
         {
            // Create startup arguments
            // BES 2007/09/25 We use -silent true to avoid
            // http://sourceforge.net/tracker/index.php?func=detail&aid=1673747&group_id=23316&atid=378131
            String[] args = {
                  "-database",
                  dbPath.toString(),
                  "-port",
                  String.valueOf(1701),
                  "-silent",
                  "true",
                  "-trace",
                  "false",
                  "-no_system_exit",
                  "true",
             };
            System.out.println("Starting hsqldb");
            // HACK Do this by reflection for now until we determine how
            // we want to handle this in EJB3
            Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass("org.hsqldb.Server");
            Method main = clazz.getDeclaredMethod("main", new Class[] { String[].class });
            main.invoke(null, new Object[] { args });
//            org.hsqldb.Server.main(args);
            System.out.println("Done");
         }
         catch (Exception e)
         {
            e.printStackTrace();
         }
         finally
         {
            started = true;
         }
      }
   }
}
TOP

Related Classes of org.jboss.test.cluster.ejb3.common.unit.DBSetup

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.