|
From: <ian...@us...> - 2007-08-27 16:12:25
|
Revision: 266
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=266&view=rev
Author: iansmith
Date: 2007-08-26 15:58:59 -0700 (Sun, 26 Aug 2007)
Log Message:
-----------
Added basic support for DB migration.
Added support for unit tests of the server.
Added test resources.
Modified Paths:
--------------
maven/trunk/ogoglio-server/.classpath
maven/trunk/ogoglio-server/pom.xml
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/HibernateTask.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/PersistException.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/ServiceInitializationPersistTasks.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AbstractResourceServlet.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/SpaceServlet.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/util/OgoglioProperties.java
maven/trunk/ogoglio-server/src/main/resources/log4j/log4j.properties
maven/trunk/ogoglio-server/src/main/webapp/META-INF/context.xml
maven/trunk/ogoglio-server/src/main/webapp/icons/index.html
maven/trunk/ogoglio-server/src/main/webapp/spaceEditor.html
Added Paths:
-----------
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/AccountsForTesting.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/DBVersionPersistTasks.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/DBVersionRecord.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/DBZapTest.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/Migration.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/MigrationSupport.java
maven/trunk/ogoglio-server/src/main/resources/hibernate/hibernate.cfg.xml
maven/trunk/ogoglio-server/src/main/resources/hibernate/migration-0.xml
maven/trunk/ogoglio-server/src/main/resources/hibernate/migration-1.xml
maven/trunk/ogoglio-server/src/test/java/com/ogoglio/persist/
maven/trunk/ogoglio-server/src/test/java/com/ogoglio/persist/test/
maven/trunk/ogoglio-server/src/test/java/com/ogoglio/persist/test/PersistTest.java
maven/trunk/ogoglio-server/src/test/java/com/ogoglio/sim/
maven/trunk/ogoglio-server/src/test/java/com/ogoglio/sim/script/
maven/trunk/ogoglio-server/src/test/java/com/ogoglio/sim/script/test/
maven/trunk/ogoglio-server/src/test/java/com/ogoglio/sim/script/test/ScriptTest.java
maven/trunk/ogoglio-server/src/test/resources/hibernate/
maven/trunk/ogoglio-server/src/test/resources/hibernate/test-config.properties
Removed Paths:
-------------
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/HibernateBase.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/HibernateTests.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/PersistTests.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptTests.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/util/PrepareDatabase.java
maven/trunk/ogoglio-server/src/main/resources/hibernate/Persist.hbm.xml
maven/trunk/ogoglio-server/src/main/resources/hibernate/Persist_NoTemplateTables.hbm.xml
maven/trunk/ogoglio-server/src/test/java/com/ogoglio/client/
maven/trunk/ogoglio-server/src/test/resources/sample-art3d/
Modified: maven/trunk/ogoglio-server/.classpath
===================================================================
--- maven/trunk/ogoglio-server/.classpath 2007-08-26 22:57:26 UTC (rev 265)
+++ maven/trunk/ogoglio-server/.classpath 2007-08-26 22:58:59 UTC (rev 266)
@@ -1,10 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/java"/>
- <classpathentry kind="src" path="src/main/resources"/>
- <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
- <classpathentry kind="src" output="target/test-classes" path="src/test/resources"/>
+ <classpathentry kind="src" path="src/test/java"/>
+ <classpathentry excluding="**" kind="src" output="src/main/resources/hibernate" path="src/main/resources/hibernate"/>
+ <classpathentry excluding="**" kind="src" output="src/main/resources/log4j" path="src/main/resources/log4j"/>
+ <classpathentry excluding="**" kind="src" output="src/test/resources/hibernate" path="src/test/resources/hibernate"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
+ <attributes>
+ <attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="/usr/local/jdk1.5.0_12/jre/lib/i386"/>
+ </attributes>
+ </classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>
Modified: maven/trunk/ogoglio-server/pom.xml
===================================================================
--- maven/trunk/ogoglio-server/pom.xml 2007-08-26 22:57:26 UTC (rev 265)
+++ maven/trunk/ogoglio-server/pom.xml 2007-08-26 22:58:59 UTC (rev 266)
@@ -9,8 +9,30 @@
<packaging>war</packaging>
<version>0.0.1</version>
+
+ <!-- -->
+ <!-- profiles -->
+ <!-- -->
+ <profiles>
+ <!-- LINUX -->
+ <profile>
+ <id>linux</id>
+ <activation>
+ <os>
+ <name>Linux</name>
+ </os>
+ <!-- placeholder for some config needed for linux -->
+ </activation>
+ <properties></properties>
+ </profile>
+ </profiles>
+ <!-- -->
+ <!-- BUILD -->
+ <!-- -->
<build>
+ <!-- -->
<!-- RESOURCES -->
+ <!-- -->
<resources>
<resource>
<directory>src/main/resources/hibernate</directory>
@@ -19,10 +41,10 @@
</includes>
</resource>
<resource>
- <targetPath>com/ogoglio/persist</targetPath>
+ <targetPath>com/ogoglio/migrate</targetPath>
<directory>src/main/resources/hibernate</directory>
<includes>
- <include>Persist.hbm.xml</include>
+ <include>migration-*.xml</include>
</includes>
</resource>
@@ -34,132 +56,30 @@
</resource>
</resources>
- <!-- PLUGINS -->
- <plugins>
- <!-- SUREFIRE INTEGRATION TEST -->
+ <!-- -->
+ <!-- TEST RESOURCES -->
+ <!-- -->
+ <testResources>
+ <testResource>
+ <directory>src/test/resources/hibernate</directory>
+ <filtering>true</filtering>
+ <includes>
+ <include>test-config.properties</include>
+ </includes>
+ </testResource>
+ </testResources>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <skip>true</skip><!-- this is critical to avoid running unit tests, sets default value for skip -->
- <childDelegation>false</childDelegation>
- </configuration>
- <executions>
- <execution>
- <id>over the wire tests</id>
- <phase>integration-test</phase>
- <goals>
- <goal>test</goal>
- </goals>
- <configuration>
- <includes>
- <!-- we seem to like plurals -->
- <include>**/*Tests.java</include>
- </includes>
- <excludes>
- <exclude>
- **/SpaceDuplicatorTests.java
- </exclude>
- </excludes>
- <skip>false</skip><!-- don't skip integration tests -->
- </configuration>
- </execution>
- </executions>
- </plugin>
+ <!-- -->
+ <!-- PLUGINS -->
+ <!-- -->
+ <plugins>
<!-- CARGO -->
- <plugin>
- <groupId>org.codehaus.cargo</groupId>
- <artifactId>cargo-maven2-plugin</artifactId>
- <version>0.3-SNAPSHOT</version>
- <executions>
- <execution>
- <id>get-up</id>
- <phase>pre-integration-test</phase>
- <goals>
- <goal>start</goal>
- </goals>
- <configuration>
- <wait>false</wait>
- </configuration>
- </execution>
- <execution>
- <id>get-down</id>
- <phase>post-integration-test</phase>
- <goals>
- <goal>stop</goal>
- </goals>
- <configuration>
- <wait>true</wait>
- </configuration>
- </execution>
- </executions>
+ <!-- DEPENDENCY PLUGIN: We need to pull in applets -->
- <!-- config of this plugin -->
- <configuration>
-
- <!-- tomcat 5.5 running on the same machine...die if not started in 20 secs -->
- <container>
- <containerId>tomcat5x</containerId>
- <home>/usr/share/tomcat5.5</home>
- <type>installed</type>
- <log>
- ${project.build.directory}/tomcat5x.log
- </log>
- <output>
- ${project.build.directory}/tomcat5x.out
- </output>
- <logLevel>debug</logLevel>
- </container>
-
- <!-- tomcat configuration -->
- <configuration>
- <home>${project.build.directory}/tomcat5x</home>
- <properties>
- <cargo.servlet.port>
- 8080
- </cargo.servlet.port>
- <cargo.logging>high</cargo.logging>
- <!--
- <cargo.datasource.datasource>
- cargo.datasource.url=jdbc:mysql://127.0.0.1/og|
- cargo.datasource.driver=com.mysql.jdbc.Driver|
- cargo.datasource.username=oguser|
- cargo.datasource.password=sssh|
- cargo.datasource.type=javax.sql.DataSource|
- cargo.datasource.jndi=jdbc/space|
- cargo.datasource.maxIdle=5|
- cargo.datasource.maxActive=50|
- cargo.datasource.scope=Shareable
- </cargo.datasource.datasource>
- -->
- </properties>
- <!-- our app to deploy -->
- <deployables>
- <deployable>
-
- <groupId>com.ogoglio</groupId>
- <artifactId>ogoglio-server</artifactId>
- <type>war</type>
-
- <properties>
- <context>ogoglio-server</context>
- </properties>
-
- </deployable>
- </deployables>
-
- </configuration>
- </configuration>
-
- </plugin>
-
- <!-- dependencies to pull in applets via deps-->
-
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
@@ -175,40 +95,44 @@
${project.build.directory}/ogoglio-server-0.0.1
</outputDirectory>
<overWriteReleases>false</overWriteReleases>
- <overWriteSnapshots>true</overWriteSnapshots>
+ <overWriteSnapshots>
+ true
+ </overWriteSnapshots>
<excludeTransitive>true</excludeTransitive>
</configuration>
</execution>
</executions>
- </plugin>
+ </plugin>
+
+ <!-- WAR config to allow some filtering love-->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-war-plugin</artifactId>
+ <configuration>
+ <webResources>
+ <resource>
+ <directory>src/main/webapp/</directory>
+ <filtering>true</filtering>
+ </resource>
+ </webResources>
+ </configuration>
+ </plugin>
</plugins>
</build>
- <!-- where to get cargo -->
- <pluginRepositories>
- <pluginRepository>
- <id>codehaus snapshot repository</id>
- <url>http://snapshots.repository.codehaus.org/</url>
- <releases>
- <enabled>true</enabled>
- </releases>
- </pluginRepository>
- </pluginRepositories>
- <!-- stuff we need -->
+ <!-- DEPENDENCIES -->
<dependencies>
<dependency>
<groupId>com.agical.rmock</groupId>
<artifactId>rmock</artifactId>
<version>2.0.0-rc-6</version>
- <scope>compile</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.1.ga</version>
- <scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
@@ -220,52 +144,62 @@
<groupId>rhino</groupId>
<artifactId>js</artifactId>
<version>1.6R6</version>
- <scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.0.1</version>
- <scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2</version>
- <scope>compile</scope>
</dependency>
+ <!-- need MYSQL for tests -->
<dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ <version>5.0.5</version>
+ <scope>test</scope>
+ </dependency>
+
+
+ <!-- -->
+ <!-- OGOGLIO DEPENDENCIES-->
+ <!-- -->
+ <dependency>
<groupId>com.ogoglio</groupId>
<artifactId>ogoglio-common</artifactId>
<version>0.0.1</version>
- <scope>compile</scope>
</dependency>
-
- <dependency>
+
+ <!-- broken: really is a dependency on the FILE -->
+ <dependency>
<groupId>com.ogoglio</groupId>
<artifactId>ogoglio-viewer-applet</artifactId>
<version>0.0.1</version>
<scope>runtime</scope>
<classifier>common</classifier>
- </dependency>
-
- <dependency>
+ </dependency>
+
+ <!-- broken: really is a dependency on the FILE -->
+ <dependency>
<groupId>com.ogoglio</groupId>
<artifactId>ogoglio-test-applet</artifactId>
<version>0.0.1</version>
- <scope>runtime</scope>
- </dependency>
-
- <dependency>
+ <scope>runtime</scope>
+ </dependency>
+
+ <!-- broken: really is a dependency on the FILE -->
+ <dependency>
<groupId>com.ogoglio</groupId>
<artifactId>ogoglio-body-editor-applet</artifactId>
<version>0.0.1</version>
<scope>runtime</scope>
<classifier>common</classifier>
- </dependency>
-
-
+ </dependency>
</dependencies>
+
</project>
Added: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/AccountsForTesting.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/AccountsForTesting.java (rev 0)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/AccountsForTesting.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -0,0 +1,57 @@
+package com.ogoglio.migrate;
+
+import java.net.URI;
+import java.util.Properties;
+
+import javax.naming.Context;
+import javax.servlet.ServletConfig;
+
+import org.hibernate.SessionFactory;
+
+import com.ogoglio.persist.ServiceInitializationPersistTasks;
+import com.ogoglio.site.AbstractResourceServlet;
+
+public class AccountsForTesting implements Migration {
+
+ private static final String BOOTSTRAP_ACCT_USER_KEY = "ogoglio/bootstrapUser";
+ private static final String BOOTSTRAP_ACCT_PW_KEY = "ogoglio/bootstrapUserPW";
+
+ public boolean migrate(SessionFactory sessionFactory,
+ ServletConfig NOTUSED, Context ctx, Properties testConfig, int from, int to) {
+
+ if ((from != 0) || (to != 1)) {
+ System.out
+ .println("Migration called in the wrong place! Expected 0->1 but was:"
+ + from + "->" + to + "!");
+ System.out
+ .println("Migration called in the wrong place! Check the ordering of migration array!");
+ return false;
+ }
+ try {
+ String uriString, user, pw;
+
+ //if null, we are test mode
+ if (ctx==null) {
+ uriString=testConfig.getProperty(AbstractResourceServlet.OGOGLIO_BASE_URL_KEY.replace('/', '.'));
+ user=testConfig.getProperty(BOOTSTRAP_ACCT_USER_KEY.replace('/', '.'));
+ pw=testConfig.getProperty(BOOTSTRAP_ACCT_PW_KEY.replace('/', '.'));
+ } else {
+ uriString=(String) ctx.lookup(AbstractResourceServlet.OGOGLIO_BASE_URL_KEY);
+ user=(String) ctx.lookup(BOOTSTRAP_ACCT_USER_KEY);
+ pw=(String) ctx.lookup(BOOTSTRAP_ACCT_PW_KEY);
+ }
+ URI uri = new URI(uriString);
+ //actual work
+ ServiceInitializationPersistTasks.initializeLocalSim(uri,sessionFactory);
+ ServiceInitializationPersistTasks.initializeBootstrapAccount(sessionFactory, uri.getHost(), user, pw);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.err
+ .println("Exception during attempt to init DB in migration from 0->1:\n"
+ + e.getMessage());
+ return false;
+ }
+
+ }
+}
Added: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/DBVersionPersistTasks.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/DBVersionPersistTasks.java (rev 0)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/DBVersionPersistTasks.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -0,0 +1,55 @@
+package com.ogoglio.migrate;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+
+import com.ogoglio.persist.HibernateTask;
+import com.ogoglio.persist.PersistException;
+
+public class DBVersionPersistTasks {
+ public final static String FIND_VERSION = "com.ogoglio.migrate.dbversions";
+
+ public static int findVersion(SessionFactory sessionFactory)
+ throws PersistException {
+ HibernateTask task = new HibernateTask() {
+ public Object run(Session session) throws PersistException {
+ Query query = session.getNamedQuery(FIND_VERSION);
+ return query.uniqueResult();
+ }
+ };
+ task.setSessionFactory(sessionFactory);
+ return ((DBVersionRecord) task.execute()).getVersion();
+ }
+
+ public static boolean updateVersion(final int newVersion,
+ final int expectedSize/* one or zero */,
+ SessionFactory sessionFactory) throws PersistException {
+ HibernateTask task = new HibernateTask() {
+ public Object run(Session session) throws PersistException {
+ Query query = session.getNamedQuery(FIND_VERSION);
+ int size = query.list().size();
+ DBVersionRecord rec;
+ if (expectedSize != size) {
+ System.out.println(
+ "Whoa! Size of returned result for db version record was ("
+ + size + ") but should have been "
+ + expectedSize + "!");
+ return Boolean.FALSE;
+ }
+ if (size == 0) {
+ rec = new DBVersionRecord();
+ } else {
+ rec = (DBVersionRecord) query.uniqueResult();
+ }
+ rec.setVersion(newVersion);
+ session.saveOrUpdate(rec);
+ System.out.println("******* Wrote new version FART:"+newVersion);
+ return Boolean.TRUE;
+ }
+ };
+ task.setSessionFactory(sessionFactory);
+ return (task.execute().equals(Boolean.TRUE));
+ }
+
+}
Added: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/DBVersionRecord.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/DBVersionRecord.java (rev 0)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/DBVersionRecord.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -0,0 +1,25 @@
+package com.ogoglio.migrate;
+
+public class DBVersionRecord {
+ public static int INTERNAL_DEV_STATE=-8288;
+
+ private int version=0;
+ private long id;
+
+ public DBVersionRecord() {
+
+ }
+ public long getVersionId() {
+ return id;
+ }
+ public void setVersionId(long id) {
+ this.id=id;
+ }
+ public int getVersion() {
+ return version;
+ }
+
+ public void setVersion(int version) {
+ this.version=version;
+ }
+}
Added: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/DBZapTest.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/DBZapTest.java (rev 0)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/DBZapTest.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -0,0 +1,37 @@
+package com.ogoglio.migrate;
+
+import junit.framework.TestCase;
+
+import org.hibernate.SessionFactory;
+
+public class DBZapTest extends TestCase {
+
+ protected SessionFactory sessionFactory;
+
+ public void setUp() {
+ try {
+ MigrationSupport support = new MigrationSupport();
+ if (!("true".equals(support.getTestConfig().getProperty("ogoglio.okToZapDB")))) {
+ fail("Whoa! Shouldn't be running tests without setting the ogoglio.okToZapDB property!");
+ }
+ if (support.initialize_version(null, null, false)==false) {
+ fail("can't get DB set up: trying to initialize it in the test code");
+ }
+
+ //if we are here, db stuff worked, but we still need to avoid all the jndi stuff
+ sessionFactory= support.createConfigurationForHibernate(MigrationSupport.DB_VERSION_NUMBER,
+ null, false).buildSessionFactory();
+ } catch (Exception e) {
+ System.out.println("-------");
+ e.printStackTrace(System.out);
+ System.out.println("---------");
+ fail("Could not setup:" + e.getMessage());
+ }
+ }
+
+ public void tearDown() {
+ if (sessionFactory!=null) {
+ sessionFactory.close();
+ }
+ }
+}
Added: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/Migration.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/Migration.java (rev 0)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/Migration.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -0,0 +1,15 @@
+package com.ogoglio.migrate;
+
+import java.util.Properties;
+
+import javax.naming.Context;
+import javax.servlet.ServletConfig;
+
+import org.hibernate.SessionFactory;
+
+public interface Migration {
+
+ public boolean migrate(SessionFactory sessionFactory, ServletConfig servletConfig, Context ctx,
+ Properties testConfig, int from, int to);
+
+}
Added: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/MigrationSupport.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/MigrationSupport.java (rev 0)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/MigrationSupport.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -0,0 +1,180 @@
+package com.ogoglio.migrate;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.servlet.ServletConfig;
+
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.Configuration;
+
+import com.ogoglio.persist.PersistException;
+
+public class MigrationSupport {
+
+ // THIS IS THE CRITICAL VERSION NUMBER
+ public static final int DB_VERSION_NUMBER = 1;
+
+ //check on migration okayness
+ public static final String MIGRATION_KEY = "ogoglio/okToMigrateDB";
+
+ // this is the set of semantic migrations, in order
+ public static final Migration[] migration = {
+ new AccountsForTesting()
+ };
+
+ public MigrationSupport() {
+ }
+
+ public boolean verifyVersion(ServletConfig servletConf, Context ctx) {
+ try {
+ SessionFactory sessionFactory = getCurrentConfiguration().buildSessionFactory();
+ int version = DBVersionPersistTasks.findVersion(sessionFactory);
+ if (version != DB_VERSION_NUMBER) {
+ System.out.println("DB Version Mismatch! Expected ("
+ + DB_VERSION_NUMBER + ") but got " + version + "!");
+ sessionFactory.close();
+ return tryUpgrade(servletConf, ctx, version, DB_VERSION_NUMBER,"update",true);
+ }
+ sessionFactory.close();
+ return true; // we are at the expected version
+ } catch (PersistException e) {
+ if (e.innerThrowable==null) {
+ System.out.println("Serious problem with hibernate:" + e.getMessage());
+ return false;
+ }
+ System.out.println("Unable to figure out DB version number. Likely this is a fresh database....("+e.innerThrowable.getClass().getName()+")");
+ return initialize_version(servletConf,ctx, true);
+ }
+ }
+
+ public boolean initialize_version(ServletConfig conf, Context ctx, boolean useJNDI) {
+ Configuration configuration = createConfigurationForHibernate(0,"create",useJNDI);
+ try {
+ SessionFactory factory=configuration.buildSessionFactory();
+ if (setVersionNumberOfDbViaQuery(factory,0,0)==false) {
+ factory.close();
+ return false;
+ }
+ factory.close();
+ return tryUpgrade(conf,ctx,0, DB_VERSION_NUMBER, "create",useJNDI);
+ } catch (Throwable e) {
+ System.out.println("Error trying initialized DB:" + e.getMessage());
+ return false;
+ }
+
+ }
+
+ public Configuration getCurrentConfiguration() {
+ return createConfigurationForHibernate(DB_VERSION_NUMBER, null, true);
+ }
+
+ public Configuration createConfigurationForHibernate(int num, String autoSetting, boolean useJNDI) {
+ Configuration configuration = new Configuration();
+ if (autoSetting!=null) {
+ configuration.setProperty("hibernate.hbm2ddl.auto", autoSetting);
+ }
+ if (useJNDI) {
+ configuration.setProperty("hibernate.connection.datasource","java:comp/env/jdbc/space");
+ } else {
+ Properties p=new Properties();
+ try {
+ p.load(getClass().getResourceAsStream("/test-config.properties"));
+ configuration.addProperties(p);
+ } catch (IOException e){
+ System.out.println("Unable to find the test configuration file!"+e.getMessage());
+ return configuration.configure();
+ }
+ }
+ configuration.addResource("com/ogoglio/migrate/migration-"+num+".xml");
+ return configuration.configure();
+ }
+
+ private boolean setVersionNumberOfDbViaQuery(SessionFactory sessionFactory,int targetVersion,int expectedSize) {
+ try {
+ return DBVersionPersistTasks.updateVersion(targetVersion, expectedSize, sessionFactory);
+ } catch (PersistException e) {
+ System.out.println("Problem updating the version of the database to version "+targetVersion+":"+e.getMessage());
+ return false;
+ }
+ }
+
+ public boolean tryUpgrade(ServletConfig servletConfig, Context ctx, int db_is, int db_wants_to_be,
+ String ddlMode, boolean useJNDI) {
+ if (migration.length != DB_VERSION_NUMBER) {
+ System.out
+ .println("Internal error! Migration list length should be "
+ + DB_VERSION_NUMBER + " but is " + migration.length
+ + "!");
+ return false;
+ }
+ Properties testConfig=new Properties();
+ boolean canMigrate=false;
+ if (ctx==null) {
+ //in test mode
+ testConfig = getTestConfig();
+ if ("true".equals(testConfig.getProperty("ogoglio.okToMigrateDB"))) {
+ canMigrate=true;
+ }
+ } else {
+ //not testing, but might be integration testing
+ try {
+ String migrate=(String)ctx.lookup(MIGRATION_KEY);
+ if ("true".equals(migrate)) {
+ canMigrate=true;
+ }
+ } catch (NamingException e) {
+ System.out.println("Naming exception trying to access "+MIGRATION_KEY+" from naming context!");
+ }
+ }
+
+ if (!canMigrate) {
+ System.out.println("Cannot migrate data! Property ogoglio.okToMigrateDB is false or non-existent!");
+ return false;
+ }
+
+ for (int i = db_is; i < db_wants_to_be; ++i) {
+ Migration current = migration[i];
+ System.out.println("------------------------------------------------\n");
+ System.out.println("DB: Attempting migration from " + i + " to "
+ + (i + 1) + "...");
+
+ //try to get hibernate to do the work
+ Configuration config = createConfigurationForHibernate(i+1, ddlMode ,useJNDI);
+ SessionFactory factory = config.buildSessionFactory();
+
+ //subtle: if the ddlMode is create, hibernate blows away all the data (including our version number record)
+ int expectedRecords=1;
+ if ("create".equals(ddlMode)) {
+ expectedRecords=0;
+ }
+ setVersionNumberOfDbViaQuery(factory,i+1, expectedRecords);
+
+ if (!current.migrate(factory,servletConfig, ctx, testConfig, i, i + 1)) {
+ factory.close();
+ return false;
+ }
+ factory.close();
+ System.out.println("------------------------------------------------\n");
+ }
+ return true;
+ }
+
+ public Properties getTestConfig() {
+ Properties testConfig = new Properties();
+ InputStream is=getClass().getResourceAsStream("/test-config.properties");
+ if (is==null) {
+ System.out.println("Warning! Unable to find test-config.properties! Probably something is broken!");
+ } else {
+ try {
+ testConfig.load(is);
+ } catch (IOException e) {
+ System.out.println("Warning! Error reading test-config.properties! "+e.getMessage());
+ }
+ }
+ return testConfig;
+ }
+}
Deleted: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/HibernateBase.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/HibernateBase.java 2007-08-26 22:57:26 UTC (rev 265)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/HibernateBase.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -1,70 +0,0 @@
-package com.ogoglio.persist;
-
-import org.hibernate.SessionFactory;
-import org.hibernate.cfg.Configuration;
-
-import com.ogoglio.util.OgoglioProperties;
-
-/**
- * Allows the hibernate initialization code to be in one place. Serves a few different purposes, but
- * in general allows connection the hibernate DB directly from a program or test.
- * @author iansmith
- *
- */
-public class HibernateBase {
- protected Configuration config = null;
-
- protected SessionFactory sessionFactory = null;
-
- public void setupSessionFactory(String persistXMLConfig, String autoDDL, String dialect, String driver, String URI,
- String user, String pw, String poolSize) {
-
- config = new Configuration();
- config.addResource(persistXMLConfig);
-
-
- if (autoDDL!=null) {
- config.setProperty("hibernate.hbm2ddl.auto", autoDDL);
- }
- config.setProperty("hibernate.dialect", dialect);
- config.setProperty("hibernate.connection.driver_class", driver);
- config.setProperty("hibernate.connection.url", URI);
- config.setProperty("hibernate.connection.username", user);
- config.setProperty("hibernate.connection.password", pw);
- config.setProperty("hibernate.show_sql","true");
- //always want these
- config.setProperty("hibernate.connection.shutdown","true");
- config.setProperty("hibernate.connection.pool_size", poolSize);
- sessionFactory = config.buildSessionFactory();
-
- if (sessionFactory==null) {
- System.err.println("You have no hope of running properly because sessionFactory was not setup correctly");
- System.err.println("in com.ogoglio.persist.HibernateBase.java");
- System.exit(1);
- }
-
- }
-
- public SessionFactory getSessionFactory() {
- return sessionFactory;
- }
-
- public void setupSessionFactoryForTest() {
- String dialect, uri, user, pass, driver;
-
- if (OgoglioProperties.getOgoglioProperty(OgoglioProperties.WHICH_DB).equals(OgoglioProperties.WHICH_MYSQL)) {
- dialect = OgoglioProperties.getOgoglioProperty(OgoglioProperties.MYSQL_DB_DIALECT);
- driver = OgoglioProperties.getOgoglioProperty(OgoglioProperties.MYSQL_DB_DRIVER);
- uri = OgoglioProperties.getOgoglioProperty(OgoglioProperties.MYSQL_DB_TEST_URI);
- user = OgoglioProperties.getOgoglioProperty(OgoglioProperties.MYSQL_DB_TEST_USER);
- pass = OgoglioProperties.getOgoglioProperty(OgoglioProperties.MYSQL_DB_TEST_PASS);
- } else {
- dialect = OgoglioProperties.getOgoglioProperty(OgoglioProperties.HSQL_DB_DIALECT);
- driver = OgoglioProperties.getOgoglioProperty(OgoglioProperties.HSQL_DB_DRIVER);
- uri = OgoglioProperties.getOgoglioProperty(OgoglioProperties.HSQL_DB_TEST_URI);
- user = OgoglioProperties.getOgoglioProperty(OgoglioProperties.HSQL_DB_TEST_USER);
- pass = OgoglioProperties.getOgoglioProperty(OgoglioProperties.HSQL_DB_TEST_PASS);
- }
- setupSessionFactory("com/ogoglio/persist/Persist.hbm.xml",null,dialect,driver,uri,user,pass,"5");
- }
-}
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/HibernateTask.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/HibernateTask.java 2007-08-26 22:57:26 UTC (rev 265)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/HibernateTask.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -63,7 +63,7 @@
// XXX This is really dodgy. This changes the type of the error from it's
// XXX true type (for example LazyInitializationException) to the PersistException
// XXX which I can only assume is to make the throws clauses easier. Ugh.
- throw new PersistException("Hibernate error: " + ex);
+ throw new PersistException(ex,"Hibernate error: " + ex);
} finally {
hibernateSession.close();
}
Deleted: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/HibernateTests.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/HibernateTests.java 2007-08-26 22:57:26 UTC (rev 265)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/HibernateTests.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -1,22 +0,0 @@
-package com.ogoglio.persist;
-
-import org.hibernate.SessionFactory;
-
-import com.agical.rmock.extension.junit.RMockTestCase;
-
-public class HibernateTests extends RMockTestCase {
-
- HibernateBase base = new HibernateBase();
- protected SessionFactory sessionFactory=null;
- public void setUp() {
- if (sessionFactory==null) {
- base.setupSessionFactoryForTest();
- sessionFactory=base.getSessionFactory();
- }
- }
- public void tearDown() {
- sessionFactory.close();
- sessionFactory=null;
- }
-
-}
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/PersistException.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/PersistException.java 2007-08-26 22:57:26 UTC (rev 265)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/PersistException.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -15,11 +15,17 @@
public class PersistException extends Exception {
+ public Throwable innerThrowable;
+
public PersistException() {
}
- public PersistException(String string) {
+ public PersistException(Throwable throwable, String string) {
super(string);
+ this.innerThrowable=throwable;
}
-
+
+ public PersistException(String string) {
+ this(null,string);
+ }
}
Deleted: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/PersistTests.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/PersistTests.java 2007-08-26 22:57:26 UTC (rev 265)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/PersistTests.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -1,196 +0,0 @@
-/* Copyright 2007 Transmutable (http://transmutable.com/)
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License. */
-package com.ogoglio.persist;
-
-import java.net.URI;
-
-public class PersistTests extends HibernateTests {
-
- private String displayName1 = "Breakfast of Sim";
-
- private URI simURI1 = null;
-
- //private String ownerUsername = null;
-
- String username1 = null;
-
- String email1 = null;
-
- String level1 = null;
-
- String username2 = null;
-
- String email2 = null;
-
- String level2 = null;
-
- public void setUp() {
- try {
- super.setUp();
-
- username1 = AccountRecord.cleanUsername("MoonUnitZappa");
- email1 = AccountRecord.cleanEmail("mu...@ex...");
- level1 = "basic";
-
- username2 = AccountRecord.cleanUsername("KurtVonnegut");
- email2 = AccountRecord.cleanEmail("kv...@ex...");
- level2 = "pro";
-
- simURI1 = new URI("http://127.0.0.1:8080/sim");
- //ownerUsername = "Mr. Goldwater";
- } catch (Exception e) {
- fail("Could not setup:" + e);
- }
- }
-
-
- public void testRecords() {
- try {
- String ONE_TWO="1234";
-
- AccountRecord accRec1= AccountPersistTasks.findAccountByUsername(username1, sessionFactory);
- if (accRec1!=null) {
- System.out.println("Destroying leftover account test state:"+username1);
- AccountPersistTasks.delete(accRec1,sessionFactory);
- }
- accRec1 = AccountPersistTasks.createAccount(username1, level1, email1, sessionFactory);
- verifyAccountProps(accRec1,username1, email1, level1, null);
-
- accRec1.setPassword("1234");
- AccountPersistTasks.update(accRec1, sessionFactory);
-
- AccountRecord accRec2 = AccountPersistTasks.findAccountByUsername(username1, sessionFactory);
- assertNotNull(accRec2);
- verifyAccountProps(accRec2, username1, email1, level1, ONE_TWO);
-
- String templateName1 = "Plate of Raw Oysters";
- TemplateRecord templateRec1 = TemplatePersistTasks.createTemplate(templateName1 , username1, sessionFactory);
- verifyTemplateProps(templateName1, templateRec1);
-
- templateRec1 = TemplatePersistTasks.findTemplateByTemplateID(templateRec1.getTemplateID(), sessionFactory);
- verifyTemplateProps(templateName1, templateRec1);
-
- SimRecord simRecord1=SimPersistTasks.findSimsBySimURI(simURI1, sessionFactory);
- if (simRecord1!=null) {
- System.out.println("Destroying leftover sim record test state:"+
- simRecord1.getDisplayName());
- SimPersistTasks.delete(simRecord1,sessionFactory);
- }
- //ok to create sim now on that URI
- simRecord1 = SimPersistTasks.createSim(displayName1, simURI1, 2048, true, sessionFactory);
- verifySimProps(simRecord1,displayName1,simURI1,-1,2048);
-
- String displayName2 = "moon unit";
- simRecord1.setDisplayName(displayName2);
- SimPersistTasks.update(simRecord1, sessionFactory);
- assertEquals(displayName2, simRecord1.getDisplayName());
- //better test is to load it from db
- SimRecord simRecord2 = SimPersistTasks.findSimsBySimURI(simURI1, sessionFactory);
- verifySimProps(simRecord2, displayName2, simURI1, -1, 2048);
-
- //it's the same sim on the same URI so better have same id?
- assertEquals(simRecord1.getSimID(), simRecord2.getSimID());
-
- String spaceName1 = "Space 1";
- SpaceRecord spaceRecord1 = SpacePersistTasks.createSpace(spaceName1, "bubkus", sessionFactory);
- assertNull("created space with bogus username", spaceRecord1);
- spaceRecord1 = SpacePersistTasks.createSpace(spaceName1, username1, sessionFactory);
- assertNotNull(spaceRecord1);
- assertEquals(spaceName1, spaceRecord1.getDisplayName());
- assertFalse(spaceRecord1.getSpaceID() == -1);
- assertEquals(username1, spaceRecord1.getOwnerUsername());
-
- SpaceRecord spaceRecord2 = SpacePersistTasks.findSpaceBySpaceID(spaceRecord1.getSpaceID(), sessionFactory);
- assertEquals(spaceRecord1, spaceRecord2);
-
- SimRecord assignedSimRecord = SpacePersistTasks.findOrAssignSim(spaceRecord2, sessionFactory);
- assertNotNull(assignedSimRecord);
- System.out.println("XXX ASSIGNED TO SIM:"+assignedSimRecord.getSimID()+","+assignedSimRecord.getSimURI()+" -->\n"+
- "space was "+spaceRecord2.getSpaceID()+" now on "+spaceRecord2.getSimID()+","+spaceRecord2.getDisplayName());
- /*
- * IES: I spent a lot of time looking at this and could not see any way to test this given that
- * IES: that assigned sim is random. Apparently, before we were depending on a random number
- * IES: sequence doing something we expected.
- assertEquals(simRecord1.getSimURI(), assignedSimRecord.getSimURI());
- assertEquals(simRecord1.getDisplayName(), assignedSimRecord.getDisplayName());
- assertEquals(simRecord1.getSimID(), assignedSimRecord.getSimID());
- assertEquals(simRecord1, assignedSimRecord);
- */
-
- BodyRecord bodyRec1 = BodyPersistTasks.createBody(displayName1, "bogosity", sessionFactory);
- assertNull("created body with bogus username", bodyRec1);
- bodyRec1 = BodyPersistTasks.createBody(displayName1, username1, sessionFactory);
- assertNotNull(bodyRec1);
-
- BodyRecord bodyRec2 = BodyPersistTasks.findBodyByID(bodyRec1.getBodyID(), sessionFactory);
- assertNotNull(bodyRec2);
- assertEquals(bodyRec1, bodyRec2);
-
- PossessionRecord possRecord = PossessionPersistTasks.createPossession(username1, templateRec1.getTemplateID(), sessionFactory);
- assertNotNull(possRecord);
- assertEquals(username1, possRecord.getOwnerUsername());
- assertEquals(templateRec1.getTemplateID(), possRecord.getTemplateID());
- possRecord.setSpaceID(spaceRecord1.getSpaceID());
- possRecord.setThingID(12);
- PossessionPersistTasks.update(possRecord, sessionFactory);
- possRecord = PossessionPersistTasks.findPossessionByPossessionID(possRecord.getPossessionID(), sessionFactory);
- assertEquals(spaceRecord1.getSpaceID(), possRecord.getSpaceID());
- assertEquals(12, possRecord.getThingID());
-
- PossessionRecord[] possRecs1 = PossessionPersistTasks.findPossessionsByOwnerUsername(username1, sessionFactory);
- assertNotNull(possRecs1);
-
- assertEquals(username1, possRecs1[0].getOwnerUsername());
- } catch (PersistException e) {
- e.printStackTrace();
- fail();
- }
-
- try {
- // IES: testing that our weird semantics here work as expected...
- assertNull(AccountPersistTasks.createAccount(username1, level1, email2, sessionFactory));
- } catch (PersistException e) {
- fail("Should have just returned null instead of failed: " + e);
- }
- }
-
-
- private void verifySimProps(SimRecord rec, String name, URI uri, int not_id, int port) {
- assertNotNull(rec);
- assertEquals(name, rec.getDisplayName());
- assertEquals(uri, rec.getSimURI());
- assertFalse(not_id == rec.getSimID());
- assertEquals(port, rec.getEventPort());
- }
-
-
- private void verifyTemplateProps(String templateName1, TemplateRecord templateRec1) {
- assertNotNull(templateRec1);
- assertEquals(templateName1, templateRec1.getDisplayName());
- assertEquals(username1, templateRec1.getOwnerUsername());
- }
-
-
- private void verifyAccountProps(AccountRecord rec, String user, String mail, String level, String pwd) {
- assertNotNull(rec);
- assertEquals(user, rec.getUsername());
- assertEquals(mail, rec.getEmail());
- assertEquals(level, rec.getAccountlevel());
- if (pwd==null) {
- assertNull(rec.getPassword());
- } else {
- assertEquals(pwd,rec.getPassword());
- }
- }
-}
\ No newline at end of file
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/ServiceInitializationPersistTasks.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/ServiceInitializationPersistTasks.java 2007-08-26 22:57:26 UTC (rev 265)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/ServiceInitializationPersistTasks.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -24,10 +24,6 @@
public static final String LOCAL_SIM_DISPLAY_NAME = "Localhost Sim";
- public static final String LIBRARY_USERNAME = "library";
-
- public static final String DEFAULT_LIBRARY_PASSWORD = "og1234";
-
public static final String DEFAULT_LAND_DISPLAY_NAME = "Default Land";
public static final String DEFAULT_DOOR_DISPLAY_NAME = "Default Door";
@@ -40,13 +36,13 @@
SimPersistTasks.createSim(LOCAL_SIM_DISPLAY_NAME, WebAPIUtil.appendToURI(serviceURI, "sim/"), SimRecord.DEFAULT_EVENT_PORT, true, sessionFactory);
}
- public static void initializeLibraryAccount(SessionFactory sessionFactory,String host) throws PersistException, IOException {
- AccountRecord accountRec = AccountPersistTasks.findAccountByUsername(LIBRARY_USERNAME, sessionFactory);
+ public static void initializeBootstrapAccount(SessionFactory sessionFactory,String host,String user, String pw) throws PersistException, IOException {
+ AccountRecord accountRec = AccountPersistTasks.findAccountByUsername(user, sessionFactory);
if (accountRec != null) {
return;
}
- accountRec = AccountPersistTasks.createAccount(LIBRARY_USERNAME, "admin", "library@"+host, sessionFactory);
- accountRec.setPassword(DEFAULT_LIBRARY_PASSWORD);
+ accountRec = AccountPersistTasks.createAccount(user, "admin", "library@"+host, sessionFactory);
+ accountRec.setPassword(pw);
AccountPersistTasks.update(accountRec, sessionFactory);
}
Deleted: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptTests.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptTests.java 2007-08-26 22:57:26 UTC (rev 265)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptTests.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -1,114 +0,0 @@
-package com.ogoglio.sim.script;
-
-import java.io.InputStream;
-import java.util.HashMap;
-
-import javax.media.j3d.Transform3D;
-
-import junit.framework.TestCase;
-
-import com.ogoglio.sim.SpaceSimulator;
-import com.ogoglio.xml.SpaceDocument;
-import com.ogoglio.xml.SpaceEvent;
-import com.ogoglio.xml.TemplateDocument;
-import com.ogoglio.xml.ThingDocument;
-
-public class ScriptTests extends TestCase {
-
- public static final String simplestScript = "var i = 0; i++; ++i";
-
- public static final String constructorScript = "function construct(thingID) { return 'script constructed ' + thingID; }";
-
- //TODO test the script API for regressions
-
- public void testSpaceScriptEngine() {
-
- TestSpaceListener listener = new TestSpaceListener();
- SpaceSimulator spaceSimulator = null;
- try {
- SpaceDocument spaceDocument = new SpaceDocument(1, "Space", "trevor", true, 0, false, 0, 1);
- spaceSimulator = new SpaceSimulator(spaceDocument, listener);
- spaceSimulator.startSim();
-
- TemplateDocument templateDoc1 = new TemplateDocument(1, "Template 1", "trevor", "A cool template", null);
- listener.templateMap.put(new Long(1), templateDoc1);
- listener.scriptMap.put(new Long(1), simplestScript);
- ThingDocument thingDoc = spaceSimulator.addThing(templateDoc1.getTemplateID(), templateDoc1.getOwnerUsername(), templateDoc1.getDisplayName(), "trevor", 1, new Transform3D());
- assertTrue(spaceSimulator.removeThing(thingDoc.getThingID()));
-
- TemplateDocument templateDoc2 = new TemplateDocument(2, "Template 2", "trevor", "Another cool template", null);
- listener.templateMap.put(new Long(2), templateDoc2);
- listener.scriptMap.put(new Long(2), constructorScript);
- thingDoc = spaceSimulator.addThing(templateDoc2.getTemplateID(), templateDoc2.getOwnerUsername(), templateDoc2.getDisplayName(), "trevor", 2, new Transform3D());
- assertTrue(spaceSimulator.removeThing(thingDoc.getThingID()));
-
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }finally {
- spaceSimulator.cleanup();
- }
-
- }
-
- /*
- private static void delete(File dir) {
- File[] children = dir.listFiles();
- if(children == null) {
- return;
- }
- for (int i = 0; i < children.length; i++) {
- if(children[i].isDirectory()) {
- delete(children[i]);
- } else {
- children[i].delete();
- }
- }
- dir.delete();
- }
- */
-
- private class TestSpaceListener implements SpaceSimulator.Listener {
-
- HashMap scriptMap = new HashMap(); //Long templateIDs to String scripts
-
- HashMap templateMap = new HashMap(); //Long templateIDs to TemplateDocuments
-
- public void generatedSpaceEvent(SpaceEvent event, SpaceSimulator spaceSimulator) {
- }
-
- public String getTemplateScript(long templateID) {
- return (String)scriptMap.get(new Long(templateID));
- }
-
- public TemplateDocument getTemplateDocument(long templateID) {
- return (TemplateDocument)templateMap.get(new Long(templateID));
- }
-
- public void requestSave(SpaceSimulator simulator) {
- }
-
- public InputStream getTemplateGeometryStream(long templateID, int lodIndex) {
- return null;
- }
-
- public InputStream getTemplateResourceStream(long templateID, String name) {
- return null;
- }
-
- public boolean setPageContent(long spaceID, long thingID, long pageID, String content) {
- return false;
- }
-
- public boolean setPageContent(long spaceID, long destinationThingID, long destinationPageID, InputStream contentStream) {
- return false;
- }
-
- public void generatedSpaceEventForUser(String username, SpaceEvent event, SpaceSimulator spaceSimulator) {
- }
-
- }
-
-}
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AbstractResourceServlet.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AbstractResourceServlet.java 2007-08-26 22:57:26 UTC (rev 265)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AbstractResourceServlet.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -40,16 +40,18 @@
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.hibernate.SessionFactory;
-import org.hibernate.cfg.Configuration;
import com.ogoglio.media.MediaService;
+import com.ogoglio.migrate.MigrationSupport;
import com.ogoglio.sim.Sim;
import com.ogoglio.util.StreamUtils;
public abstract class AbstractResourceServlet extends HttpServlet {
- private static final String HIBERNATE_SESSION_FACTORY_KEY = "com.ogoglio.hibernateSessionFactory";
+ public static final String OGOGLIO_BASE_URL_KEY = "ogoglio/baseURL";
+ public static final String HIBERNATE_SESSION_FACTORY_KEY = "com.ogoglio.hibernateSessionFactory";
+
private static final String METHOD_PARAM = "method";
private SiteResource baseResource = null;
@@ -65,11 +67,14 @@
public abstract SiteResource createBaseResource(ServletConfig servletConfig);
public void init(ServletConfig config) throws ServletException {
+ Context initCtx=null, envCtx=null;
try {
- Context initCtx = new InitialContext();
- Context envCtx = (Context) initCtx.lookup("java:comp/env");
+ initCtx = new InitialContext();
+ //creates a context on EVERY servlet? the actual VALUE of the data source is inserted by
+ //hibernate configuration
+ envCtx = (Context) initCtx.lookup("java:comp/env");
- String baseUrl = (String) envCtx.lookup("ogoglio/baseURL");
+ String baseUrl = (String) envCtx.lookup(OGOGLIO_BASE_URL_KEY);
String mediaUrl = (String) envCtx.lookup("ogoglio/mediaURL");
boolean simsAllowRemoteAccess = "true".equals(envCtx.lookup("ogoglio/simsAllowRemoteAccess"));
File mediaDirectory = null;
@@ -89,8 +94,10 @@
}
super.init(config);
- hibernateSessionFactory = getOrCreateHibernateSessionFactory(config);
-
+ hibernateSessionFactory = getOrCreateHibernateSessionFactory(config,envCtx);
+ if (hibernateSessionFactory==null) {
+ throw new IllegalStateException("Unable to create sensible hibernate configuration!");
+ }
baseResource = createBaseResource(config);
if (!(baseResource.getPathElement() instanceof String)) {
throw new IllegalStateException("The base resource must have a String path element: " + baseResource.getPathElement());
@@ -117,10 +124,15 @@
return hibernateSessionFactory;
}
- private static SessionFactory getOrCreateHibernateSessionFactory(ServletConfig config) {
+ private static SessionFactory getOrCreateHibernateSessionFactory(ServletConfig config, Context context) {
SessionFactory sessionFactory = (SessionFactory) config.getServletContext().getAttribute(HIBERNATE_SESSION_FACTORY_KEY);
if (sessionFactory == null) {
- sessionFactory = new Configuration().configure().buildSessionFactory();
+ System.out.println(config.getServletName()+" checking DB Version...");
+ MigrationSupport ms= new MigrationSupport();
+ if (!ms.verifyVersion(config,context)) {
+ throw new IllegalStateException("Cannot find a DB configuration for hibernate!");
+ }
+ sessionFactory= ms.getCurrentConfiguration().configure().buildSessionFactory();
config.getServletContext().setAttribute(HIBERNATE_SESSION_FACTORY_KEY, sessionFactory);
}
return sessionFactory;
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java 2007-08-26 22:57:26 UTC (rev 265)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -36,7 +36,6 @@
import com.ogoglio.persist.PersistException;
import com.ogoglio.persist.PossessionPersistTasks;
import com.ogoglio.persist.PossessionRecord;
-import com.ogoglio.persist.ServiceInitializationPersistTasks;
import com.ogoglio.persist.SimRecord;
import com.ogoglio.persist.SpaceMemberPersistTasks;
import com.ogoglio.persist.SpaceMemberRecord;
@@ -76,6 +75,8 @@
public void init(ServletConfig config) throws ServletException {
super.init(config);
+ /*
+ * IES:NOT NEEDED NOW WITH DB MIGRATION?
try {
ServiceInitializationPersistTasks.initializeLocalSim(new URI(getSiteInfo().getBaseUrl()), getSessionFactory());
ServiceInitializationPersistTasks.initializeLibraryAccount(getSessionFactory(), getSiteInfo().getHost());
@@ -89,6 +90,7 @@
e.printStackTrace();
throw new ServletException("Could not initialize service: " + e);
}
+ */
}
public SiteResource createBaseResource(ServletConfig servletConfig) {
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/SpaceServlet.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/SpaceServlet.java 2007-08-26 22:57:26 UTC (rev 265)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/SpaceServlet.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -434,6 +434,7 @@
private void doProxy(HttpServletRequest request, String method, HttpServletResponse response, String[] pathElements) throws IOException {
try {
+ System.out.println("***FART1");
AccountRecord authedAccount = AuthServlet.getAuthedAccountRecord(request, getSessionFactory());
if (authedAccount == null) {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
@@ -451,6 +452,7 @@
return;
}
+ System.out.println("***FART2");
SimRecord simRecord = SpacePersistTasks.findOrAssignSim(spaceRecord, getSessionFactory());
if (simRecord == null) {
System.err.println("Could not assign a sim to space " + spaceRecord.getSpaceID());
@@ -459,13 +461,21 @@
}
String proxyURI = simRecord.getSimURI().toString();
+ System.out.println("***FART3:"+proxyURI);
for (int i = 0; i < pathElements.length; i++) {
proxyURI += pathElements[i] + "/";
}
+ System.out.print("***FART4:");
+ for (int i=0; i< pathElements.length;++i) {
+ System.out.print(pathElements[i]+"/");
+ }
+ System.out.println("");
proxy(new URI(proxyURI), method, request, response);
+ System.out.println("***FART5");
} catch (PersistException e) {
+ System.out.println("***FART6");
e.printStackTrace();
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return;
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/util/OgoglioProperties.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/util/OgoglioProperties.java 2007-08-26 22:57:26 UTC (rev 265)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/util/OgoglioProperties.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -47,6 +47,9 @@
if (prop!=null) {
return;
}
+
+ System.out.println("property value FART:"+System.getProperty("ogoglio.mediaURL"));
+
//init
File f = new File(System.getProperty("user.home"),PROPERTY_FILE_NAME);
prop=new OgoglioProperties();
Deleted: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/util/PrepareDatabase.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/util/PrepareDatabase.java 2007-08-26 22:57:26 UTC (rev 265)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/util/PrepareDatabase.java 2007-08-26 22:58:59 UTC (rev 266)
@@ -1,95 +0,0 @@
-package com.ogoglio.util;
-
-import java.net.URI;
-
-import org.hibernate.SessionFactory;
-
-import com.ogoglio.persist.HibernateBase;
-import com.ogoglio.persist.ServiceInitializationPersistTasks;
-
-public class PrepareDatabase extends HibernateBase {
-
- /*
- * This is the beginning of a utility program to allow you be sure that your database is ready to
- * be used by the space (web) service. This opens the database in the correct mode to get it to
- * drop all the existing tables, create them according to the Persist.hbm.xml document while dumping
- * to the terminal the SQL it is using, and then exiting cleanly.
- *
- * This is program is only used on development machines to initialize their local HSQL instance
- * into a fresh state. After this program has run successfully, you can fire up the web service,
- * and the test suite can AND SHOULD be run.
- */
- /**
- * @param args IGNORED
- */
- public static void main(String[] args) {
- if (args.length!=0) {
- System.out.println("Dosen't take command line parameters, use the .ogoglio-properties file!");
- System.exit(1);
- }
- PrepareDatabase db= new PrepareDatabase();
- db.start(false);
- db.start(true);
- System.out.println("Completed successfully. DBs are now ready.");
- }
-
- public void setup...
[truncated message content] |