[jboss-cvs] JBossAS SVN: r59985 - in projects/microcontainer/trunk/managed/src: tests/org/jboss/test/managed/mock and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Jan 25 01:29:11 EST 2007


Author: scott.stark at jboss.org
Date: 2007-01-25 01:29:11 -0500 (Thu, 25 Jan 2007)
New Revision: 59985

Modified:
   projects/microcontainer/trunk/managed/src/main/org/jboss/managed/plugins/ManagedPropertyImpl.java
   projects/microcontainer/trunk/managed/src/tests/org/jboss/test/managed/mock/MockTest.java
Log:
JBMICROCONT-145, Update the serialization to break the circular dependency between ManagedProperty and ManagedObject.

Modified: projects/microcontainer/trunk/managed/src/main/org/jboss/managed/plugins/ManagedPropertyImpl.java
===================================================================
--- projects/microcontainer/trunk/managed/src/main/org/jboss/managed/plugins/ManagedPropertyImpl.java	2007-01-24 22:31:37 UTC (rev 59984)
+++ projects/microcontainer/trunk/managed/src/main/org/jboss/managed/plugins/ManagedPropertyImpl.java	2007-01-25 06:29:11 UTC (rev 59985)
@@ -22,8 +22,9 @@
 package org.jboss.managed.plugins;
 
 import java.io.IOException;
+import java.io.InvalidObjectException;
 import java.io.ObjectInputStream;
-import java.io.ObjectStreamField;
+import java.io.ObjectOutputStream;
 import java.io.Serializable;
 import java.util.Set;
 
@@ -43,15 +44,15 @@
 public class ManagedPropertyImpl implements ManagedProperty
 {
    /** The serialVersionUID */
-   private static final long serialVersionUID = 2268454772998030799L;
-   
-   /** The serialized form */
-   private static final ObjectStreamField[] serialPersistentFields =
-      new ObjectStreamField[]
-      {
-         new ObjectStreamField("managedObject", ManagedObject.class),
-         new ObjectStreamField("fields", Fields.class),
-      };
+   private static final long serialVersionUID = 2;
+   /* writeObject format:
+    * - int version
+    * - Fields fields
+    * - ManagedObject managedObject
+    */
+   private static final int VERSION1 = 1;
+   /** The serialization version used by writeObject */
+   private static final int STREAM_VERSION = VERSION1;
 
    /** The managed object */
    private ManagedObject managedObject;
@@ -299,18 +300,40 @@
     * @throws IOException for IO problem
     * @throws ClassNotFoundException for a classloading problem
     */
-   private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
+   private void readObject(ObjectInputStream in)
+      throws IOException, ClassNotFoundException
    {
-      ObjectInputStream.GetField getField = in.readFields();
-      ManagedObject managedObject = (ManagedObject) getField.get("managedObject", null);
-      Fields fields = (Fields) getField.get("fields", null);
-      try
-      {
-         init(managedObject, fields);
-      }
-      catch (Exception e)
-      {
-         throw new RuntimeException("Error deserializing managed property", e);
-      }
+      int version = in.readInt();
+      if( version == VERSION1 )
+         readVersion1(in);
+      else
+         throw new InvalidObjectException("Unknown version="+version);
    }
+   /**
+    * Write out the property fields
+    * @param out
+    * @throws IOException
+    */
+   private void writeObject(ObjectOutputStream out)
+      throws IOException
+   {
+      out.writeInt(STREAM_VERSION);
+      out.writeObject(fields);
+      out.writeObject(managedObject);
+   }
+
+   /**
+    * The VERSION1 expected format: 
+    * - Fields fields
+    * - ManagedObject managedObject
+    */
+   private void readVersion1(ObjectInputStream in)
+      throws IOException, ClassNotFoundException
+   {
+      fields = (Fields) in.readObject();
+      name = getField(Fields.NAME, String.class);
+      if (name == null)
+         throw new IOException("No " + Fields.NAME + " in fields");
+      managedObject = (ManagedObject) in.readObject();      
+   }
 }

Modified: projects/microcontainer/trunk/managed/src/tests/org/jboss/test/managed/mock/MockTest.java
===================================================================
--- projects/microcontainer/trunk/managed/src/tests/org/jboss/test/managed/mock/MockTest.java	2007-01-24 22:31:37 UTC (rev 59984)
+++ projects/microcontainer/trunk/managed/src/tests/org/jboss/test/managed/mock/MockTest.java	2007-01-25 06:29:11 UTC (rev 59985)
@@ -21,6 +21,8 @@
 */
 package org.jboss.test.managed.mock;
 
+import java.util.HashMap;
+
 import junit.framework.Test;
 
 import org.jboss.managed.api.Fields;
@@ -109,7 +111,39 @@
       assertEquals("user", "Scott", mo2.getProperty("user").getValue());
       assertEquals("password", "Tiger", mo2.getProperty("password").getValue());
    }
+   public void testManagedPropertyMapSerialization()
+      throws Exception
+   {
+      MockDataSourceManagedObject mock = new MockDataSourceManagedObject();
+      ManagedObject mo = WrapperAdvice.wrapManagedObject(mock);
 
+      ManagedProperty jndiName = mo.getProperty("jndi-name");
+      jndiName.setValue("DefaultDS");
+      ManagedProperty user = mo.getProperty("user");
+      user.setValue("Scott");
+      ManagedProperty password = mo.getProperty("password");
+      password.setValue("Tiger");
+      jndiName.setValue("ChangedDS");
+
+      HashMap<String, ManagedProperty> props = new HashMap<String, ManagedProperty>();
+      props.put(jndiName.getName(), jndiName);
+      props.put(user.getName(), user);
+      props.put(password.getName(), password);
+      
+      byte[] data = super.serialize(props);
+      HashMap<String, ManagedProperty> props2 =
+         (HashMap<String, ManagedProperty>) super.deserialize(data);
+
+      ManagedProperty jndiName2 = props2.get("jndi-name");
+      assertEquals("jndiName", "ChangedDS", jndiName2.getValue());
+      ManagedProperty jndiName3 = jndiName2.getManagedObject().getProperty("jndi-name");
+      assertEquals("jndiName", "ChangedDS", jndiName3.getValue());
+      ManagedProperty user2 = props2.get("user");
+      assertEquals("user", "Scott", user2.getValue());
+      ManagedProperty password2 = props2.get("password");
+      assertEquals("password", "Tiger", password.getValue());
+   }
+
    protected void configureLogging()
    {
       enableTrace("org.jboss.managed.plugins.advice");




More information about the jboss-cvs-commits mailing list