[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