|
From: <ian...@us...> - 2007-09-24 19:01:28
|
Revision: 437
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=437&view=rev
Author: iansmith
Date: 2007-09-24 12:01:30 -0700 (Mon, 24 Sep 2007)
Log Message:
-----------
Added support for having sim run on a different machine.
Modified Paths:
--------------
maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/servlet/AbstractResourceServlet.java
maven/trunk/ogoglio-integration-test/src/test/java/com/ogoglio/client/test/AppletTestWindow.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/AccountsForTesting.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/ServiceInitializationPersistTasks.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/SimPersistTasks.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/Sim.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/site/SimServlet.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/SpaceServlet.java
maven/trunk/ogoglio-server/src/main/webapp/META-INF/context.xml
maven/trunk/ogoglio-server/src/test/java/com/ogoglio/persist/test/PersistTest.java
Modified: maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/servlet/AbstractResourceServlet.java
===================================================================
--- maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/servlet/AbstractResourceServlet.java 2007-09-24 18:34:16 UTC (rev 436)
+++ maven/trunk/ogoglio-appdev/src/main/java/com/ogoglio/appdev/servlet/AbstractResourceServlet.java 2007-09-24 19:01:30 UTC (rev 437)
@@ -224,7 +224,7 @@
outputStream.flush();
outputStream.close();
}
-
+ System.out.println("FART ABOUT TOSET STATUS:"+connection.getResponseCode());
response.setStatus(connection.getResponseCode());
Map headers = connection.getHeaderFields();
Modified: maven/trunk/ogoglio-integration-test/src/test/java/com/ogoglio/client/test/AppletTestWindow.java
===================================================================
--- maven/trunk/ogoglio-integration-test/src/test/java/com/ogoglio/client/test/AppletTestWindow.java 2007-09-24 18:34:16 UTC (rev 436)
+++ maven/trunk/ogoglio-integration-test/src/test/java/com/ogoglio/client/test/AppletTestWindow.java 2007-09-24 19:01:30 UTC (rev 437)
@@ -21,7 +21,6 @@
import java.awt.Frame;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
-import java.lang.management.ManagementFactory;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -34,7 +33,6 @@
import com.ogoglio.util.ArgumentUtils;
import com.ogoglio.util.PropStorage;
import com.ogoglio.viewer.applet.ViewerApplet;
-import com.sun.tools.javac.util.List;
public class AppletTestWindow extends Frame {
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-09-24 18:34:16 UTC (rev 436)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/migrate/AccountsForTesting.java 2007-09-24 19:01:30 UTC (rev 437)
@@ -59,7 +59,6 @@
ServiceInitializationPersistTasks.initializeBootstrapAccount(sessionFactory, uri.getHost(), userList[i], pwList[i], cookiesList[i]);
}
- ServiceInitializationPersistTasks.initializeLocalSim(uri, sessionFactory);
ServiceInitializationPersistTasks.initializeServiceState(sessionFactory);
return true;
} catch (Exception e) {
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-09-24 18:34:16 UTC (rev 436)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/ServiceInitializationPersistTasks.java 2007-09-24 19:01:30 UTC (rev 437)
@@ -29,7 +29,7 @@
public static final String DEFAULT_DOOR_DISPLAY_NAME = "Default Door";
- public static void initializeLocalSim(URI serviceURI, SessionFactory sessionFactory) throws PersistException {
+ public static void DEAD_CODE_initializeLocalSim(URI serviceURI, SessionFactory sessionFactory) throws PersistException {
SimRecord[] simRecords = SimPersistTasks.findSims(sessionFactory);
URI ourURI=WebAPIUtil.appendToURI(serviceURI, "sim/");
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/SimPersistTasks.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/SimPersistTasks.java 2007-09-24 18:34:16 UTC (rev 436)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/SimPersistTasks.java 2007-09-24 19:01:30 UTC (rev 437)
@@ -25,8 +25,11 @@
public class SimPersistTasks {
public static final String SIM_BY_URI = "com.ogoglio.persist.simByURI";
+
public static final String SIM_BY_ID = "com.ogoglio.persist.simBySimID";
+
public static final String SIMS_BY_ACTIVE = "com.ogoglio.persist.simsByActive";
+
public static final String SIMS = "com.ogoglio.persist.sims";
public static SimRecord[] findSims(SessionFactory sessionFactory) throws PersistException {
@@ -40,7 +43,6 @@
return (SimRecord[]) task.execute();
}
-
public static SimRecord findSimsBySimURI(final URI simURI, SessionFactory sessionFactory) throws PersistException {
HibernateTask task = new HibernateTask() {
public Object run(Session hibernateSession) {
@@ -76,7 +78,6 @@
task.execute();
}
-
public static void delete(final SimRecord simRecord, SessionFactory sessionFactory) throws PersistException {
HibernateTask task = new HibernateTask() {
public Object run(Session hibernateSession) {
@@ -87,4 +88,16 @@
task.setSessionFactory(sessionFactory);
task.execute();
}
+
+ public static SimRecord findSimByID(final long simID, SessionFactory sessionFactory) throws PersistException {
+ HibernateTask task = new HibernateTask() {
+ public Object run(Session hibernateSession) {
+ Query query = hibernateSession.getNamedQuery(SIM_BY_ID);
+ query.setLong("simID", simID);
+ return query.uniqueResult();
+ }
+ };
+ task.setSessionFactory(sessionFactory);
+ return (SimRecord) task.execute();
+ }
}
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/Sim.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/Sim.java 2007-09-24 18:34:16 UTC (rev 436)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/Sim.java 2007-09-24 19:01:30 UTC (rev 437)
@@ -272,7 +272,7 @@
simulator = new SpaceSimulator(spaceDoc, spaceSimulatorListener);
spaceSimulators.put(new Long(record.getSpaceID()), simulator);
simulator.startSim();
- Log.info("Starting space sim " + record.getSpaceID() + ": " + record.getDisplayName());
+ Log.info("Starting space sim " + record.getSpaceID() + ": " + record.getDisplayName() + "( on sim "+ record.getSimID()+")");
return simulator;
}
}
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-09-24 18:34:16 UTC (rev 436)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/site/SimServlet.java 2007-09-24 19:01:30 UTC (rev 437)
@@ -21,6 +21,8 @@
import java.util.HashMap;
import java.util.Map;
+import javax.naming.Context;
+import javax.naming.NamingException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@@ -32,8 +34,8 @@
import com.ogoglio.appdev.servlet.SiteResource;
import com.ogoglio.client.DecoratedInputStream;
import com.ogoglio.media.MediaService;
-import com.ogoglio.persist.AccountPersistTasks;
import com.ogoglio.persist.AccountRecord;
+import com.ogoglio.persist.ServiceInitializationPersistTasks;
import com.ogoglio.persist.SimPersistTasks;
import com.ogoglio.persist.SimRecord;
import com.ogoglio.persist.SpacePersistTasks;
@@ -72,28 +74,45 @@
public void init(ServletConfig config) throws ServletException {
super.init(config);
+ System.out.println("IN INIT:"+config.getServletName()+","+config.getServletContext().getServletContextName());
try {
- simURI = new URI(getSiteInfo().getBaseUrl() + "sim/");
+ Context envCtx = (Context) initCtx.lookup("java:comp/env");
+ simURI = new URI((String) envCtx.lookup("ogoglio/baseSimURL"));
+
SimRecord simRecord = SimPersistTasks.findSimsBySimURI(simURI, getSessionFactory());
- if (simRecord == null) {
- throw new ServletException("Configuration error, no sim record for " + simURI);
+ if (simRecord != null) {
+ //error
+ Log.warn("Restarting the sim server @ "+simRecord.getSimURI()+" but it was already in the database! Ignored.");
+ } else {
+ Log.info("Starting up sim @ " +simURI);
+ simRecord = SimPersistTasks.createSim(ServiceInitializationPersistTasks.LOCAL_SIM_DISPLAY_NAME, simURI, SimRecord.DEFAULT_EVENT_PORT, true, getSessionFactory());
+ sim = new Sim(simRecord, getMediaService(), getSessionFactory());
+ localIP = InetAddress.getByName(simURI.getHost()).getHostAddress();
}
- sim = new Sim(simRecord, getMediaService(), getSessionFactory());
- localIP = InetAddress.getByName(simURI.getHost()).getHostAddress();
- } catch (ServletException e) {
- throw e; //lame
+ } catch (NamingException e) {
+ throw new ServletException("Couldn't find the baseSimURL:"+e.getMessage(),e);
} catch (Exception e) {
- e.printStackTrace();
- throw new ServletException("SimServlet error: " + e);
- }
+ throw new ServletException("Couldn't start sim servlet:"+e.getMessage(),e);
+ }
ScriptContextFactory.setTimedContextAsGlobalContext();
}
public void destroy() {
- super.destroy();
- sim.cleanup();
- Log.info("Destroy called on SimServlet. Cleaning up sim...");
+ try {
+ super.destroy();
+ sim.cleanup();
+ SimRecord rec=SimPersistTasks.findSimsBySimURI(simURI, getSessionFactory());
+ if (rec==null) {
+ System.out.println("FART: CAN'T FIND SIM REC!");
+ } else {
+ System.out.println("FART: DESTROYING SIM REC!");
+ SimPersistTasks.delete(rec, getSessionFactory());
+ }
+ Log.info("Cleaned up sim record in database:"+simURI);
+ } catch (PersistException e) {
+ Log.error("Can't clean up Sim record in database:"+e.getMessage(),e);
+ }
}
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
@@ -108,6 +127,7 @@
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
return;
}
+ System.out.println("FART: SERVICE:"+request.getPathInfo());
super.service(request, response);
}
@@ -232,8 +252,10 @@
public void doGet(HttpServletRequest request, HttpServletResponse response, String[] pathElements) throws ServletException, IOException {
long spaceID = Long.parseLong(pathElements[2]);
try {
+
SpaceRecord spaceRecord = SpacePersistTasks.findSpaceBySpaceID(spaceID, getSessionFactory());
if (spaceRecord == null) {
+ System.out.println("FART: no space!");
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
@@ -244,6 +266,7 @@
return;
}
+ System.out.println("FART: authed:"+authedAccount.getUsername());
SpaceSimulator simulator = sim.getOrCreateSpaceSimulator(spaceRecord);
Map settings = simulator.getSettings();
@@ -267,8 +290,10 @@
public void doGet(HttpServletRequest request, HttpServletResponse response, String[] pathElements) throws ServletException, IOException {
long spaceID = Long.parseLong(pathElements[2]);
+ System.out.println("FART: do get:"+spaceID);
try {
SpaceRecord spaceRecord = SpacePersistTasks.findSpaceBySpaceID(spaceID, getSessionFactory());
+ System.out.println("FART: do get:"+spaceID+" w/"+spaceRecord.getSimID());
if (spaceRecord == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
@@ -330,6 +355,7 @@
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
+ System.out.println("FART: do post:"+spaceID+","+spaceRecord.getSimID());
AccountRecord authedAccount = AuthServlet.getAuthedAccountRecord(request, getSessionFactory());
if (authedAccount != null && !authedAccount.getUsername().equals(spaceRecord.getOwnerUsername())) {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
@@ -456,7 +482,6 @@
return;
}
-
AccountRecord authedAccount = AuthServlet.getAuthedAccountRecord(request, getSessionFactory());
if (!SpacePersistTasks.canReadSpace(authedAccount, spaceID, getSessionFactory())) {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
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-09-24 18:34:16 UTC (rev 436)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/SpaceServlet.java 2007-09-24 19:01:30 UTC (rev 437)
@@ -481,8 +481,10 @@
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
return;
}
+ System.out.println("FART: PROXY authed:"+authedAccount.getUsername());
SimRecord simRecord = SpacePersistTasks.findOrAssignSim(spaceRecord, getSessionFactory());
+ System.out.println("FART PROXY: "+simRecord.getSimID()+","+simRecord.getSimURI());
if (simRecord == null) {
Log.error("Could not assign a sim to space " + spaceRecord.getSpaceID());
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
@@ -494,6 +496,7 @@
proxyURI += pathElements[i] + "/";
}
+ System.out.println("FART: PROXY URI ABOUT TO GO:"+proxyURI);
proxy(new URI(proxyURI), method, request, response);
} catch (PersistException e) {
Modified: maven/trunk/ogoglio-server/src/main/webapp/META-INF/context.xml
===================================================================
--- maven/trunk/ogoglio-server/src/main/webapp/META-INF/context.xml 2007-09-24 18:34:16 UTC (rev 436)
+++ maven/trunk/ogoglio-server/src/main/webapp/META-INF/context.xml 2007-09-24 19:01:30 UTC (rev 437)
@@ -8,6 +8,7 @@
<ResourceLink name="ogoglio/mediaURL" global="mediaURL" type="java.lang.String"/>
<ResourceLink name="ogoglio/baseURL" global="baseURL" type="java.lang.String"/>
+ <ResourceLink name="ogoglio/baseSimURL" global="baseSimURL" type="java.lang.String"/>
<ResourceLink name="ogoglio/oktoZapDB" global="oktoZapDB" type="java.lang.String"/>
<ResourceLink name="ogoglio/okMigrateDB" global="oktoMigrateDB" type="java.lang.String"/>
Modified: maven/trunk/ogoglio-server/src/test/java/com/ogoglio/persist/test/PersistTest.java
===================================================================
--- maven/trunk/ogoglio-server/src/test/java/com/ogoglio/persist/test/PersistTest.java 2007-09-24 18:34:16 UTC (rev 436)
+++ maven/trunk/ogoglio-server/src/test/java/com/ogoglio/persist/test/PersistTest.java 2007-09-24 19:01:30 UTC (rev 437)
@@ -126,7 +126,7 @@
verifyTemplateProps(templateName1, templateRec1);
SpaceRecord spaceRecord1 = checkSpaceAndSimTasks();
-
+
BodyRecord bodyRec1 = BodyPersistTasks.createBody(displayName1, "bogosity", sessionFactory);
assertNull("created body with bogus username", bodyRec1);
bodyRec1 = BodyPersistTasks.createBody(displayName1, username1, sessionFactory);
@@ -151,6 +151,19 @@
assertNotNull(possRecs1);
assertEquals(username1, possRecs1[0].getOwnerUsername());
+
+ //clean up
+ long runningOnSimID=spaceRecord1.getSimID();
+ SpacePersistTasks.deleteSpace(spaceRecord1, sessionFactory);
+ SimRecord condemnedSim = SimPersistTasks.findSimByID(runningOnSimID,sessionFactory);
+ assertNotNull(condemnedSim);
+ SimPersistTasks.delete(condemnedSim, sessionFactory);
+
+ //sanity
+ assertEquals(0, SpacePersistTasks.findAllSpaces(sessionFactory).length);
+ assertEquals(0, SimPersistTasks.findSims(sessionFactory).length);
+
+
} catch (PersistException e) {
e.printStackTrace();
fail();
@@ -218,6 +231,7 @@
SimRecord assignedSimRecord = SpacePersistTasks.findOrAssignSim(spaceRecord2, sessionFactory);
assertNotNull(assignedSimRecord);
+
//System.out.println("XXX ASSIGNED TO SIM:"
// + assignedSimRecord.getSimID() + ","
// + assignedSimRecord.getSimURI() + " -->\n" + "space was "
@@ -237,7 +251,10 @@
* assignedSimRecord.getSimID()); assertEquals(simRecord1,
* assignedSimRecord);
*/
- return spaceRecord1;
+
+ //subtle: need to return 2 ... because these differ in the assignment of the simid
+ //since we assigned the spaceRecord2 version to a sim
+ return spaceRecord2;
}
private void verifySimProps(SimRecord rec, String name, URI uri, int not_id, int port) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|