Index: trunk/src/tmcsim/client/CadDataTableTest.java
===================================================================
--- trunk/src/tmcsim/client/CadDataTableTest.java	(revision 476)
+++ trunk/src/tmcsim/client/CadDataTableTest.java	(revision 476)
@@ -0,0 +1,96 @@
+package tmcsim.client;
+
+import java.rmi.Naming;
+import java.rmi.RemoteException;
+import java.rmi.server.UnicastRemoteObject;
+import javax.swing.table.DefaultTableModel;
+import tmcsim.client.cadclientgui.enums.CADDataEnums;
+import tmcsim.common.SimulationException;
+import tmcsim.interfaces.CADClientInterface;
+import tmcsim.interfaces.CoordinatorInterface;
+
+/**
+ * Test Driver for getCadDataTable(CADDataEnums.TABLE.UNIT_STATUS);
+ * Usage: Start the CADServer, Sim Mgr, and CADClient. Be Unit Status window is visible.
+ *        Start this program and observe CADClient output window.
+ * @author jdalbey
+ */
+public class CadDataTableTest extends UnicastRemoteObject implements
+        CADClientInterface {
+
+    private CoordinatorInterface theCoorInt;
+    /** reference to itself to be used for disconnecting from CADSimulator   */
+    private CADClientInterface myself = this;
+    private int kIterationLimit = 500;
+    public static void main(String[] args) throws SimulationException, RemoteException
+    {
+        String host = "127.0.0.1";
+        if (args.length > 0)
+        {
+            host = args[0]; //192.168.251.116 for production machine
+        }
+        CadDataTableTest app = new CadDataTableTest();
+        app.start(host);
+        System.exit(0);
+    }
+    public CadDataTableTest() throws RemoteException { }
+    
+    public void start(String hostname) throws SimulationException, RemoteException {
+        String coorIntURL = "";
+
+        try {
+            coorIntURL = "rmi://" + hostname + ":" + "4446"
+                    + "/coordinator";
+            theCoorInt = (CoordinatorInterface) Naming.lookup(coorIntURL);
+            theCoorInt.registerForCallback(this);
+        } catch (Exception e) {
+            throw new SimulationException(SimulationException.CAD_SIM_CONNECT,"127.0.0.1",
+                    e);
+        }
+        try
+        {
+            // Call the Coordinator
+            DefaultTableModel mdl = theCoorInt.getCadDataTable(CADDataEnums.TABLE.UNIT_STATUS);
+            // Loop many times to simulate many clients accessing the CAD Data at once
+            System.out.println("Starting CAD Data Table test for "+kIterationLimit+" iterations.");
+            for (int count = 0; count < kIterationLimit; count++)
+            {
+                mdl = theCoorInt.getCadDataTable(CADDataEnums.TABLE.UNIT_STATUS);
+                try
+                {
+                    Thread.sleep(100); // pause briefly between accesses
+                }
+                catch(InterruptedException e)
+                { ; } 
+            }
+        } catch (RemoteException ex)
+        {
+            System.out.println("RemoteException in CADClientTest.java");
+            System.out.println(ex.getMessage());
+        }
+        System.out.println("Test Completed.");
+        ensureProperShutdown();        
+    }
+
+    @Override
+    public void refresh() throws RemoteException {
+        throw new UnsupportedOperationException("Not supported yet."); 
+    }
+
+    public void ensureProperShutdown()
+    {
+        Runtime.getRuntime().addShutdownHook(new Thread()
+        {
+            public void run()
+            {
+                try
+                {
+                    theCoorInt.unregisterForCallback(myself);
+                } catch (RemoteException e)
+                {
+                    e.printStackTrace();
+                }
+            }
+        });
+    }   
+}
Index: trunk/src/tmcsim/client/cadclientgui/data/CADDataSpike.java
===================================================================
--- trunk/src/tmcsim/client/cadclientgui/data/CADDataSpike.java	(revision 476)
+++ trunk/src/tmcsim/client/cadclientgui/data/CADDataSpike.java	(revision 476)
@@ -0,0 +1,37 @@
+
+import java.util.Vector;
+import javax.swing.table.DefaultTableModel;
+import tmcsim.client.cadclientgui.data.Unit;
+/** Spike to try to fix the concurrency error that shows up intermittently
+ *  as noted in ticket #87.
+ * @author jdalbey
+ */
+class CADDataSpike
+{
+    DefaultTableModel unitStatusTableModel;
+    Vector<String> unitStatusHeaders;
+    Vector<Unit> units;
+    /**
+     * Accessor to the Unit Status table model 
+     *
+     * @return DefaultTableModel for UnitStatus
+     */
+    public DefaultTableModel tableForUnitStatus()
+    {
+        Vector<Object> toUnitTableVector = new Vector<Object>();
+
+        // build a new unit table 
+        for (Unit unit: units)
+        {
+            toUnitTableVector.add(unit.toVector());
+        }
+        // Exception occurred here: http://pastebin.com/fvifM5i8
+        // Probably a distributed object concurrency problem.
+        // Assign the unit status table from the newly created vector
+        unitStatusTableModel
+                .setDataVector(toUnitTableVector, unitStatusHeaders);
+        // return a reference to the updated table
+        return unitStatusTableModel;
+    }
+
+}
