[jboss-svn-commits] JBL Code SVN: r31250 - in labs/jbosstm/trunk/ArjunaCore/arjuna: classes/com/arjuna/ats/arjuna/objectstore/type and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jan 27 07:52:59 EST 2010


Author: jhalliday
Date: 2010-01-27 07:52:59 -0500 (Wed, 27 Jan 2010)
New Revision: 31250

Added:
   labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/ObjectStoreTypeManagerTest.java
Modified:
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/objectstore/ObjectStoreType.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/objectstore/type/ObjectStoreTypeManager.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/objectstore/type/ObjectStoreTypeMap.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/DisposeRecord.java
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/PersistenceRecord.java
Log:
Make ObjectStoreTypeManager threadsafe and typesafe. Add unit test coverage. JBTM-690


Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/objectstore/ObjectStoreType.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/objectstore/ObjectStoreType.java	2010-01-27 12:21:27 UTC (rev 31249)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/objectstore/ObjectStoreType.java	2010-01-27 12:52:59 UTC (rev 31250)
@@ -118,7 +118,7 @@
      */
 
     @SuppressWarnings("unchecked")
-    public final static Class typeToClass (int rt)
+    public final static Class<? extends ObjectStore> typeToClass (int rt)
     {
         switch (rt)
         {

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/objectstore/type/ObjectStoreTypeManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/objectstore/type/ObjectStoreTypeManager.java	2010-01-27 12:21:27 UTC (rev 31249)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/objectstore/type/ObjectStoreTypeManager.java	2010-01-27 12:52:59 UTC (rev 31250)
@@ -34,6 +34,7 @@
 import java.util.ArrayList;
 
 import com.arjuna.ats.arjuna.coordinator.RecordType;
+import com.arjuna.ats.arjuna.objectstore.ObjectStore;
 
 /**
  * This allows users to define a mapping between record type integers
@@ -42,8 +43,7 @@
 
 public class ObjectStoreTypeManager
 {
-    @SuppressWarnings("unchecked")
-    public Class getObjectStoreClass (int type)
+    public synchronized Class<? extends ObjectStore> getObjectStoreClass (int type)
     {
         /*
          * Stop at first hit.
@@ -58,8 +58,7 @@
         return null;
     }
     
-    @SuppressWarnings("unchecked")
-    public int getType (Class c)
+    public synchronized int getType (Class<? extends ObjectStore> c)
     {
         for (int i = 0; i < _map.size(); i++)
         {
@@ -70,7 +69,7 @@
         return RecordType.UNTYPED;
     }
     
-    public void add (ObjectStoreTypeMap map)
+    public synchronized void add (ObjectStoreTypeMap map)
     {
         _map.add(map);
     }
@@ -85,12 +84,7 @@
         _map = new ArrayList<ObjectStoreTypeMap>();
     }
     
-    private ArrayList<ObjectStoreTypeMap> _map;
+    private final ArrayList<ObjectStoreTypeMap> _map;
     
     private static final ObjectStoreTypeManager _instance = new ObjectStoreTypeManager();
-    
-    static
-    {
-        // trawl through properties to find bindings
-    }
 }

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/objectstore/type/ObjectStoreTypeMap.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/objectstore/type/ObjectStoreTypeMap.java	2010-01-27 12:21:27 UTC (rev 31249)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/objectstore/type/ObjectStoreTypeMap.java	2010-01-27 12:52:59 UTC (rev 31250)
@@ -31,15 +31,16 @@
 
 package com.arjuna.ats.arjuna.objectstore.type;
 
+import com.arjuna.ats.arjuna.objectstore.ObjectStore;
+
 /**
  * This allows users to define a mapping between record type integers
  * and specific Class-es. This replaces Gandiva from previous releases.
  */
 
 public interface ObjectStoreTypeMap
-{ 
-    @SuppressWarnings("unchecked")
-    public Class getObjectStoreClass ();
+{
+    public Class<? extends ObjectStore> getObjectStoreClass ();
     
     public int getType ();
 }

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/DisposeRecord.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/DisposeRecord.java	2010-01-27 12:21:27 UTC (rev 31249)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/DisposeRecord.java	2010-01-27 12:52:59 UTC (rev 31250)
@@ -259,7 +259,6 @@
 	return res;
     }
     
-    @SuppressWarnings("unchecked")
     public boolean restore_state (InputObjectState os, int ot)
     {
 	boolean res = true;
@@ -271,9 +270,9 @@
 		
 	    if (ObjectStoreType.valid(objStoreType))
 	    {
-		Class osc = ObjectStoreType.typeToClass(objStoreType);
+		Class<? extends ObjectStore> osc = ObjectStoreType.typeToClass(objStoreType);
 			
-		store = (ObjectStore) osc.newInstance();
+		store = osc.newInstance();
 		store.unpack(os);
 			
 		objectUid = UidHelper.unpackFrom(os);

Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/PersistenceRecord.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/PersistenceRecord.java	2010-01-27 12:21:27 UTC (rev 31249)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/abstractrecords/PersistenceRecord.java	2010-01-27 12:52:59 UTC (rev 31250)
@@ -430,7 +430,6 @@
 		return true;
 	}
 
-	@SuppressWarnings("unchecked")
     public boolean restore_state (InputObjectState os, int ot)
 	{
 		if (tsLogger.arjLogger.isDebugEnabled())
@@ -460,9 +459,9 @@
 
 				if (store == null)
 				{
-				    Class oc = ObjectStoreType.typeToClass(objStoreType);
+				    Class<? extends ObjectStore> oc = ObjectStoreType.typeToClass(objStoreType);
 				    
-				    store = (ObjectStore) oc.newInstance();
+				    store = oc.newInstance();
 				}
 
 				store.unpack(os);

Added: labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/ObjectStoreTypeManagerTest.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/ObjectStoreTypeManagerTest.java	                        (rev 0)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/tests/classes/com/hp/mwtests/ts/arjuna/objectstore/ObjectStoreTypeManagerTest.java	2010-01-27 12:52:59 UTC (rev 31250)
@@ -0,0 +1,75 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and/or its affiliates,
+ * and individual contributors as indicated by the @author tags.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * (C) 2010,
+ * @author JBoss, by Red Hat.
+ */
+package com.hp.mwtests.ts.arjuna.objectstore;
+
+import com.arjuna.ats.arjuna.coordinator.RecordType;
+import com.arjuna.ats.arjuna.objectstore.ObjectStore;
+import com.arjuna.ats.arjuna.objectstore.ObjectStoreType;
+import com.arjuna.ats.arjuna.objectstore.type.ObjectStoreTypeManager;
+import com.arjuna.ats.arjuna.objectstore.type.ObjectStoreTypeMap;
+import com.arjuna.ats.internal.arjuna.objectstore.VolatileStore;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+public class ObjectStoreTypeManagerTest
+{
+    @Test
+    public void testObjectStoreTypeManager()
+    {
+        Class<? extends ObjectStore> clazz = ObjectStoreType.typeToClass(ObjectStoreType.VOLATILE);
+        int typeCode = ObjectStoreType.classToType(clazz);
+
+        assertEquals(ObjectStoreType.VOLATILE, typeCode);
+
+        ObjectStoreTypeManager manager = ObjectStoreTypeManager.manager();
+
+        assertNull(manager.getObjectStoreClass(1001));
+        assertEquals(RecordType.UNTYPED, manager.getType(DummyObjectStoreImpl.class));
+
+        assertNull(ObjectStoreType.typeToClass(1001));
+        assertEquals(RecordType.UNTYPED, ObjectStoreType.classToType(DummyObjectStoreImpl.class));
+
+        manager.add(new DummyObjectStoreTypeMap());
+
+        assertEquals(DummyObjectStoreImpl.class, manager.getObjectStoreClass(1001));
+        assertEquals(1001, manager.getType(DummyObjectStoreImpl.class));
+
+        assertEquals(DummyObjectStoreImpl.class, ObjectStoreType.typeToClass(1001));
+        assertEquals(1001, ObjectStoreType.classToType(DummyObjectStoreImpl.class));
+    }
+
+    class DummyObjectStoreTypeMap implements ObjectStoreTypeMap
+    {
+        @Override
+        public Class<? extends ObjectStore> getObjectStoreClass()
+        {
+            return DummyObjectStoreImpl.class;
+        }
+
+        @Override
+        public int getType()
+        {
+            return 1001;
+        }
+    }
+
+    class DummyObjectStoreImpl extends VolatileStore{}
+}



More information about the jboss-svn-commits mailing list