|
From: <ian...@us...> - 2007-08-30 19:00:25
|
Revision: 296
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=296&view=rev
Author: iansmith
Date: 2007-08-30 12:00:17 -0700 (Thu, 30 Aug 2007)
Log Message:
-----------
Added support for multiple, different versioning of the database code. Needed to support multiple apps.
Modified Paths:
--------------
maven/trunk/ogoglio-appdev/.classpath
maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/migrate/Migration.java
maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/migrate/MigrationSupport.java
maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/migrate/test/DBZapTest.java
maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/servlet/AbstractRemoteServlet.java
maven/trunk/ogoglio-integration-test/pom.xml
maven/trunk/ogoglio-integration-test/src/test/resources/bootstrap.properties
maven/trunk/ogoglio-integration-test/src/test/resources/test-config.properties
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/AccountsForTesting.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/OgoglioServerMigration.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/ServiceInitializationPersistTasks.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/site/SimServlet.java
maven/trunk/ogoglio-server/src/main/resources/hibernate/hibernate.cfg.xml
maven/trunk/ogoglio-server/src/test/resources/bootstrap.properties
maven/trunk/ogoglio-server/src/test/resources/test-config.properties
Removed Paths:
-------------
maven/trunk/ogoglio-appdev/src/test/resources/
Modified: maven/trunk/ogoglio-appdev/.classpath
===================================================================
--- maven/trunk/ogoglio-appdev/.classpath 2007-08-30 00:59:14 UTC (rev 295)
+++ maven/trunk/ogoglio-appdev/.classpath 2007-08-30 19:00:17 UTC (rev 296)
@@ -3,7 +3,6 @@
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/test/java"/>
<classpathentry excluding="**" kind="src" output="src/main/resources" path="src/main/resources"/>
- <classpathentry excluding="**" kind="src" output="src/test/resources" path="src/test/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry kind="output" path="target/classes"/>
Modified: maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/migrate/Migration.java
===================================================================
--- maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/migrate/Migration.java 2007-08-30 00:59:14 UTC (rev 295)
+++ maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/migrate/Migration.java 2007-08-30 19:00:17 UTC (rev 296)
@@ -1,12 +1,12 @@
package com.ogoglio.appdev.migrate;
-import java.util.Properties;
-
import javax.naming.Context;
import javax.servlet.ServletConfig;
import org.hibernate.SessionFactory;
+import com.ogoglio.appdev.persist.PersistException;
+
public interface Migration {
/*
@@ -16,7 +16,8 @@
*
* Return false if things went wrong.
*/
- public boolean patch(SessionFactory sessionFactory, ServletConfig servletConfig, Context ctx, int from, int to);
+ public boolean patch(SessionFactory sessionFactory, ServletConfig servletConfig, Context ctx,
+ int from, int to) throws PersistException;
/*O
* The receiver should use this call to populate the database with data that would be useful
@@ -24,6 +25,6 @@
*
* Return false if things went wrong.
*/
- public boolean populate(SessionFactory sessionFactory, int from, int to);
+ public boolean populate(SessionFactory sessionFactory, int from, int to) throws PersistException;
}
Modified: maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/migrate/MigrationSupport.java
===================================================================
--- maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/migrate/MigrationSupport.java 2007-08-30 00:59:14 UTC (rev 295)
+++ maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/migrate/MigrationSupport.java 2007-08-30 19:00:17 UTC (rev 296)
@@ -24,17 +24,18 @@
public MigrationSupport() {
}
- public abstract int versionNumber();
- public abstract Migration[] migrationList();
+ public abstract int getVersionNumber();
+ public abstract Migration[] getMigrationList();
+ public abstract String getResourcePath();
public boolean verifyVersion(ServletConfig servletConf, Context ctx) {
try {
SessionFactory sessionFactory = getCurrentConfiguration().buildSessionFactory();
int version = DBVersionPersistTasks.findVersion(sessionFactory);
- if (version != versionNumber()) {
- System.err.println("DB Version Mismatch! Expected (" + versionNumber() + ") but got " + version + "!");
+ if (version != getVersionNumber()) {
+ System.err.println("DB Version Mismatch! Expected (" + getVersionNumber() + ") but got " + version + "!");
sessionFactory.close();
- return tryUpgrade(servletConf, ctx, version, versionNumber(),
+ return tryUpgrade(servletConf, ctx, version, getVersionNumber(),
DDL_MODE_UPDATE, true, null);
}
sessionFactory.close();
@@ -69,11 +70,11 @@
if (!initVersionOnly(true,null)) {
return false;
}
- return tryUpgrade(conf, ctx, 0, versionNumber(), DDL_MODE_UPDATE, true,null);
+ return tryUpgrade(conf, ctx, 0, getVersionNumber(), DDL_MODE_UPDATE, true,null);
}
public Configuration getCurrentConfiguration() {
- return createConfigurationForHibernate(versionNumber(), null, true, null);
+ return createConfigurationForHibernate(getVersionNumber(), null, true, null);
}
public Configuration createConfigurationForHibernate(int num, String autoSetting, boolean useJNDI, PropStorage ps) {
@@ -86,7 +87,7 @@
} else {
configuration.addProperties(ps.getAllProps(PropStorage.TEST_CONFIG_PROPS));
}
- configuration.addInputStream(UIConstants.getResource("com/ogoglio/migrate/migration-" + num + ".xml"));
+ configuration.addInputStream(UIConstants.getResource(getResourcePath()+"/migration-" + num + ".xml"));
return configuration.configure();
}
@@ -101,8 +102,8 @@
public boolean tryUpgrade(ServletConfig servletConfig, Context ctx, int db_is,
int db_wants_to_be, boolean isUpdate, boolean useJNDI, PropStorage propStore) {
- if (migrationList().length != versionNumber()) {
- System.out.println("Internal error! Migration list length should be " + versionNumber() + " but is " + migrationList().length + "!");
+ if (getMigrationList().length != getVersionNumber()) {
+ System.out.println("Internal error! Migration list length should be " + getVersionNumber() + " but is " + getMigrationList().length + "!");
return false;
}
boolean canMigrate = false;
@@ -134,9 +135,9 @@
for (int i = db_is; i < db_wants_to_be; ++i) {
- Migration current = migrationList()[i];
+ Migration current = getMigrationList()[i];
System.out.println("------------------------------------------------\n");
- System.out.println("DB: Attempting migration from " + i + " to " + (i + 1) + "...");
+ System.out.println("DB: Attempting migration from " + i + " to " + (i + 1) + " with auto HBM:"+hbm_auto_flag);
//try to get hibernate to do the work
Configuration config = createConfigurationForHibernate(i + 1, hbm_auto_flag, useJNDI, propStore);
@@ -149,21 +150,30 @@
}
setVersionNumberOfDbViaQuery(factory, i + 1, expectedRecords);
- if (!current.patch(factory, servletConfig, ctx, i, i + 1)) {
- factory.close();
- return false;
- }
-
- if (!isUpdate) {
- //we need to go ahead and create the data
- if (!current.populate(factory, i, i+1)) {
- System.out.println("FART: Whoa! Populate failed!"+i);
+ try {
+ if (!current.patch(factory, servletConfig, ctx, i, i + 1)) {
factory.close();
return false;
}
- System.out.println("FART: Populate ok!"+i);
+ } catch (PersistException e) {
+ System.err.println("Whoa! Patch failed at revision!"+(i+1)+" on class "+current.getClass().getName());
+ System.err.println("Whoa! Persistance layer problem was:"+e.getMessage());
}
+ try {
+ if (!isUpdate) {
+ //we need to go ahead and create the data
+ if (!current.populate(factory, i, i+1)) {
+ System.err.println("Whoa! Populate failed at revision!"+(i+1)+" on class "+current.getClass().getName());
+ factory.close();
+ return false;
+ }
+ }
+ } catch (PersistException e) {
+ System.err.println("Whoa! Populate failed at revision!"+(i+1)+" on class "+current.getClass().getName());
+ System.err.println("Whoa! Persistance layer problem was:"+e.getMessage());
+ }
+
factory.close();
System.out.println("------------------------------------------------\n");
}
@@ -180,6 +190,6 @@
return false;
}
- return tryUpgrade(null, null, 0, versionNumber(), DDL_MODE_CREATE, false, ps);
+ return tryUpgrade(null, null, 0, getVersionNumber(), DDL_MODE_CREATE, false, ps);
}
}
Modified: maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/migrate/test/DBZapTest.java
===================================================================
--- maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/migrate/test/DBZapTest.java 2007-08-30 00:59:14 UTC (rev 295)
+++ maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/migrate/test/DBZapTest.java 2007-08-30 19:00:17 UTC (rev 296)
@@ -28,7 +28,7 @@
}
//if we are here, db stuff worked, but we still need to avoid all the jndi stuff
- sessionFactory = support.createConfigurationForHibernate(getMigrationSupport().versionNumber(), null, false, ps).buildSessionFactory();
+ sessionFactory = support.createConfigurationForHibernate(getMigrationSupport().getVersionNumber(), null, false, ps).buildSessionFactory();
} catch (Exception e) {
System.out.println("-------");
e.printStackTrace(System.out);
Modified: maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/servlet/AbstractRemoteServlet.java
===================================================================
--- maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/servlet/AbstractRemoteServlet.java 2007-08-30 00:59:14 UTC (rev 295)
+++ maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/servlet/AbstractRemoteServlet.java 2007-08-30 19:00:17 UTC (rev 296)
@@ -62,7 +62,6 @@
throw new ServletException("Failed because of Ogoglio service auth failure: " + e);
}
}
-
super.service(request, response);
}
Modified: maven/trunk/ogoglio-integration-test/pom.xml
===================================================================
--- maven/trunk/ogoglio-integration-test/pom.xml 2007-08-30 00:59:14 UTC (rev 295)
+++ maven/trunk/ogoglio-integration-test/pom.xml 2007-08-30 19:00:17 UTC (rev 296)
@@ -3,7 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
- <groupId>ogoglio-integration-test</groupId>
+ <groupId>com.ogoglio</groupId>
<artifactId>ogoglio-integration-test</artifactId>
<version>0.0.1</version>
<packaging>pom</packaging>
Modified: maven/trunk/ogoglio-integration-test/src/test/resources/bootstrap.properties
===================================================================
--- maven/trunk/ogoglio-integration-test/src/test/resources/bootstrap.properties 2007-08-30 00:59:14 UTC (rev 295)
+++ maven/trunk/ogoglio-integration-test/src/test/resources/bootstrap.properties 2007-08-30 19:00:17 UTC (rev 296)
@@ -1,2 +1,4 @@
+allBootstrapUsers=${ogoglio.allBootstrapUsers}
+allBootstrapUsersPW=${ogoglio.allBootstrapUsersPW}
bootstrapUser=${ogoglio.bootstrapUser}
bootstrapUserPW=${ogoglio.bootstrapUserPW}
Modified: maven/trunk/ogoglio-integration-test/src/test/resources/test-config.properties
===================================================================
--- maven/trunk/ogoglio-integration-test/src/test/resources/test-config.properties 2007-08-30 00:59:14 UTC (rev 295)
+++ maven/trunk/ogoglio-integration-test/src/test/resources/test-config.properties 2007-08-30 19:00:17 UTC (rev 296)
@@ -18,6 +18,8 @@
#for doing tests that need bootstrap
ogoglio.baseURL=${ogoglio.baseURL}
+ogoglio.allBootstrapUsers=${ogoglio.allBootstrapUsers}
+ogoglio.allBootstrapUsersPW=${ogoglio.allBootstrapUsersPW}
ogoglio.bootstrapUser=${ogoglio.bootstrapUser}
ogoglio.bootstrapUserPW=${ogoglio.bootstrapUserPW}
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/AccountsForTesting.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/AccountsForTesting.java 2007-08-30 00:59:14 UTC (rev 295)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/AccountsForTesting.java 2007-08-30 19:00:17 UTC (rev 296)
@@ -1,6 +1,7 @@
package com.ogoglio.migrate;
import java.net.URI;
+import java.util.regex.Pattern;
import javax.naming.Context;
import javax.servlet.ServletConfig;
@@ -8,6 +9,7 @@
import org.hibernate.SessionFactory;
import com.ogoglio.appdev.migrate.Migration;
+import com.ogoglio.appdev.persist.PersistException;
import com.ogoglio.persist.ServiceInitializationPersistTasks;
import com.ogoglio.util.PropStorage;
@@ -17,7 +19,7 @@
public boolean patch(SessionFactory sessionFactory, ServletConfig config, Context ctx, int from, int to) {
return true;
}
- public boolean populate(SessionFactory sessionFactory, int from, int to) {
+ public boolean populate(SessionFactory sessionFactory, int from, int to) throws PersistException{
if ((from != 0) || (to != 1)) {
System.out.println("Migration called in the wrong place! Expected 0->1 but was:" + from + "->" + to + "!");
@@ -26,35 +28,40 @@
}
try {
- String uriString, user, pw;
+ String uriString, users, pws;
PropStorage zap=new PropStorage();
- System.out.println("FART1--->populate:"+(zap.loadPropertySet(PropStorage.BOOTSTRAP_PROPS))+","+
- zap.loadPropertySet(PropStorage.BASIC_PROPS));
-
if (zap.loadPropertySet(PropStorage.BOOTSTRAP_PROPS)==false) {
return false;
}
if (zap.loadPropertySet(PropStorage.BASIC_PROPS)==false) {
return false;
}
- System.out.println("FART2--->populate:");
uriString = zap.getKeyFromSet(PropStorage.BASIC_PROPS, "ogoglio.baseUrl");
- user=zap.getKeyFromSet(PropStorage.BOOTSTRAP_PROPS, "bootstrapUser");
- pw=zap.getKeyFromSet(PropStorage.BOOTSTRAP_PROPS, "bootstrapUserPW");
+ users=zap.getKeyFromSet(PropStorage.BOOTSTRAP_PROPS, "allBootstrapUsers");
+ pws=zap.getKeyFromSet(PropStorage.BOOTSTRAP_PROPS, "allBootstrapUsersPW");
- if ((uriString==null) || (user==null) || (pw==null)) {
- System.out.println("URI FART:"+(uriString==null));
- System.out.println("USER FART:"+(user==null));
- System.out.println("PW FART:"+(pw==null));
+ if ((uriString==null) || (users==null) || (pws==null)) {
+ System.err.println("URI Offender in settings.xml:"+(uriString==null));
+ System.err.println("USERS Offender in settings.xml:"+(users==null));
+ System.err.println("PWS Offender in settings.xml:"+(pws==null));
return false;
}
+
+ String[] userList = users.split(Pattern.quote(","));
+ String[] pwList = pws.split(Pattern.quote(","));
- System.out.println("FART3--->uriString:"+uriString);
+ if (userList.length!=pwList.length) {
+ System.err.println("Whoa! Settings.xml gave us a bootstrap user list and pw list of different lengths!");
+ return false;
+ }
URI uri = new URI(uriString);
- //actual work
+
+ for (int i=0; i<userList.length;++i) {
+ ServiceInitializationPersistTasks.initializeBootstrapAccount(sessionFactory, uri.getHost(), userList[i], pwList[i]);
+ }
+
ServiceInitializationPersistTasks.initializeLocalSim(uri, sessionFactory);
- ServiceInitializationPersistTasks.initializeBootstrapAccount(sessionFactory, uri.getHost(), user, pw);
ServiceInitializationPersistTasks.initializeServiceState(sessionFactory);
return true;
} catch (Exception e) {
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/OgoglioServerMigration.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/OgoglioServerMigration.java 2007-08-30 00:59:14 UTC (rev 295)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/OgoglioServerMigration.java 2007-08-30 19:00:17 UTC (rev 296)
@@ -13,14 +13,16 @@
// this is the set of semantic migrations, in order
private static final Migration[] migration = { new AccountsForTesting() };
- public Migration[] migrationList() {
+ public Migration[] getMigrationList() {
return migration;
}
- public int versionNumber() {
+ public int getVersionNumber() {
return DB_VERSION_NUMBER;
}
+ public String getResourcePath() { return "com/ogoglio/migrate"; }
+
private OgoglioServerMigration() {
}
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-30 00:59:14 UTC (rev 295)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/ServiceInitializationPersistTasks.java 2007-08-30 19:00:17 UTC (rev 296)
@@ -42,7 +42,7 @@
if (accountRec != null) {
return;
}
- accountRec = AccountPersistTasks.createAccount(user, "admin", "library@"+host, sessionFactory);
+ accountRec = AccountPersistTasks.createAccount(user, "admin", user+"@"+host, sessionFactory);
accountRec.setPassword(pw);
AccountPersistTasks.update(accountRec, sessionFactory);
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/site/SimServlet.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/site/SimServlet.java 2007-08-30 00:59:14 UTC (rev 295)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/site/SimServlet.java 2007-08-30 19:00:17 UTC (rev 296)
@@ -321,21 +321,17 @@
public void doPost(HttpServletRequest request, HttpServletResponse response, String[] pathElements) throws ServletException, IOException {
long spaceID = Long.parseLong(pathElements[2]);
try {
- System.out.println("do POST fart: SIM:"+spaceID);
SpaceRecord spaceRecord = SpacePersistTasks.findSpaceBySpaceID(spaceID, getSessionFactory());
if (spaceRecord == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
- System.out.println("do POST2 fart: SIM:"+spaceID);
-
AccountRecord authedAccount = AuthServlet.getAuthedAccountRecord(request, getSessionFactory());
if (authedAccount != null && !authedAccount.getUsername().equals(spaceRecord.getOwnerUsername())) {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
return;
}
- System.out.println("do POST3 fart: authed acct:"+authedAccount.getUsername());
String value = getFirstStringValue(request);
if (value == null || value.trim().length() == 0) {
System.err.println("Posted null value: " + request.getContentType());
@@ -343,11 +339,9 @@
return;
}
- System.out.println("do POST4 fart: value:"+value);
SpaceSimulator simulator = sim.getOrCreateSpaceSimulator(spaceRecord);
simulator.putSetting(pathElements[pathElements.length - 1], value);
sendStringResponse(value, "text/plain", response);
- System.out.println("do POST5 fart: value:"+value);
} catch (PersistException e) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return;
Modified: maven/trunk/ogoglio-server/src/main/resources/hibernate/hibernate.cfg.xml
===================================================================
--- maven/trunk/ogoglio-server/src/main/resources/hibernate/hibernate.cfg.xml 2007-08-30 00:59:14 UTC (rev 295)
+++ maven/trunk/ogoglio-server/src/main/resources/hibernate/hibernate.cfg.xml 2007-08-30 19:00:17 UTC (rev 296)
@@ -9,13 +9,10 @@
<hibernate-configuration>
<session-factory>
- <!-- to use JNDI to find the data source -->
- <!-- we expect this context (java:comp/env) to have been created by the abstract resource servlet AND we expect the
- particular value (jdbc/space) to have been created in the context.xml of the server -->
- <!--
- <property name="connection.datasource">java:comp/env/jdbc/space</property>
- <property name="show_sql">false</property>
+ <!-- only mysql supported now
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
+ <property name="show_sql">true</property>
-->
+
</session-factory>
</hibernate-configuration>
Modified: maven/trunk/ogoglio-server/src/test/resources/bootstrap.properties
===================================================================
--- maven/trunk/ogoglio-server/src/test/resources/bootstrap.properties 2007-08-30 00:59:14 UTC (rev 295)
+++ maven/trunk/ogoglio-server/src/test/resources/bootstrap.properties 2007-08-30 19:00:17 UTC (rev 296)
@@ -1,2 +1,4 @@
+allBootstrapUsers=${ogoglio.allBootstrapUsers}
+allBootstrapUsersPW=${ogoglio.allBootstrapUsersPW}
bootstrapUser=${ogoglio.bootstrapUser}
bootstrapUserPW=${ogoglio.bootstrapUserPW}
Modified: maven/trunk/ogoglio-server/src/test/resources/test-config.properties
===================================================================
--- maven/trunk/ogoglio-server/src/test/resources/test-config.properties 2007-08-30 00:59:14 UTC (rev 295)
+++ maven/trunk/ogoglio-server/src/test/resources/test-config.properties 2007-08-30 19:00:17 UTC (rev 296)
@@ -18,6 +18,8 @@
#for doing tests that need bootstrap
ogoglio.baseURL=${ogoglio.baseURL}
+ogoglio.allBootstrapUsers=${ogoglio.allBootstrapUsers}
+ogoglio.allBootstrapUsersPW=${ogoglio.allBootstrapUsersPW}
ogoglio.bootstrapUser=${ogoglio.bootstrapUser}
ogoglio.bootstrapUserPW=${ogoglio.bootstrapUserPW}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|