[infinispan-commits] Infinispan SVN: r358 - in trunk/core/src: test/java/org/infinispan/config/parsing and 2 other directories.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Thu May 28 17:31:22 EDT 2009
Author: galder.zamarreno at jboss.com
Date: 2009-05-28 17:31:22 -0400 (Thu, 28 May 2009)
New Revision: 358
Modified:
trunk/core/src/main/java/org/infinispan/marshall/MarshallerImpl.java
trunk/core/src/main/java/org/infinispan/marshall/VersionAwareMarshaller.java
trunk/core/src/test/java/org/infinispan/config/parsing/GlobalConfigurationParserTest.java
trunk/core/src/test/java/org/infinispan/marshall/MarshalledValueTest.java
trunk/core/src/test/java/org/infinispan/marshall/jboss/JBossMarshallerTest.java
Log:
[ISPN-84] Switched to JBoss Marshaller for default marshaller.
Modified: trunk/core/src/main/java/org/infinispan/marshall/MarshallerImpl.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/MarshallerImpl.java 2009-05-28 15:30:13 UTC (rev 357)
+++ trunk/core/src/main/java/org/infinispan/marshall/MarshallerImpl.java 2009-05-28 21:31:22 UTC (rev 358)
@@ -76,7 +76,13 @@
* @author <a href="mailto:manik at jboss.org">Manik Surtani (manik at jboss.org)</a>
* @author Galder Zamarreño
* @since 4.0
+ * @deprecated JBoss Marshaller based Marshaller is now use rather than this legacy
+ * home grown marshaller. This marshaller hasn't been removed yet so that we can
+ * can carry on comparing payload sizes between the different marshallers. This
+ * will specially help as JBoss Marshaller continues to provide more and more efficient
+ * payloads.
*/
+ at Deprecated
public class MarshallerImpl extends AbstractMarshaller {
// magic numbers
protected static final int MAGICNUMBER_GTX = 1;
Modified: trunk/core/src/main/java/org/infinispan/marshall/VersionAwareMarshaller.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/marshall/VersionAwareMarshaller.java 2009-05-28 15:30:13 UTC (rev 357)
+++ trunk/core/src/main/java/org/infinispan/marshall/VersionAwareMarshaller.java 2009-05-28 21:31:22 UTC (rev 358)
@@ -23,23 +23,22 @@
import org.infinispan.commands.RemoteCommandFactory;
import org.infinispan.factories.annotations.Inject;
+import org.infinispan.factories.annotations.Stop;
import org.infinispan.io.ByteBuffer;
import org.infinispan.io.ExposedByteArrayOutputStream;
+import org.infinispan.marshall.jboss.JBossMarshaller;
import org.infinispan.util.logging.Log;
import org.infinispan.util.logging.LogFactory;
-import org.jboss.util.stream.MarshalledValueInputStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInput;
-import java.io.ObjectInputStream;
import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
import java.io.OutputStream;
/**
- * A delegate to various other marshallers like {@link MarshallerImpl}. This delegating marshaller adds versioning
+ * A delegate to various other marshallers like {@link JBossMarshaller}. This delegating marshaller adds versioning
* information to the stream when marshalling objects and is able to pick the appropriate marshaller to delegate to
* based on the versioning information when unmarshalling objects.
*
@@ -54,15 +53,20 @@
private static final int VERSION_400 = 400;
private static final int CUSTOM_MARSHALLER = 999;
- private MarshallerImpl defaultMarshaller;
+ private JBossMarshaller defaultMarshaller;
ClassLoader defaultClassLoader;
@Inject
public void init(ClassLoader loader, RemoteCommandFactory remoteCommandFactory) {
- defaultMarshaller = new MarshallerImpl();
+ defaultMarshaller = new JBossMarshaller();
defaultMarshaller.init(loader, remoteCommandFactory);
}
+
+ @Stop
+ public void stop() {
+ defaultMarshaller.stop();
+ }
protected int getCustomMarshallerVersionInt() {
return CUSTOM_MARSHALLER;
@@ -70,35 +74,38 @@
public ByteBuffer objectToBuffer(Object obj) throws IOException {
ExposedByteArrayOutputStream baos = new ExposedByteArrayOutputStream(128);
- ObjectOutputStream out = new ObjectOutputStream(baos);
-
- out.writeShort(VERSION_400);
- log.trace("Wrote version {0}", VERSION_400);
-
- //now marshall the contents of the object
- defaultMarshaller.objectToObjectStream(obj, out);
- out.close();
-
- // and return bytes.
+ ObjectOutput out = startObjectOutput(baos);
+ try {
+ defaultMarshaller.objectToObjectStream(obj, out);
+ } finally {
+ finishObjectOutput(out);
+ }
return new ByteBuffer(baos.getRawBuffer(), 0, baos.size());
}
public Object objectFromByteBuffer(byte[] bytes, int offset, int len) throws IOException, ClassNotFoundException {
- int versionId;
- ObjectInputStream in = new MarshalledValueInputStream(new ByteArrayInputStream(bytes, offset, len));
+ ByteArrayInputStream is = new ByteArrayInputStream(bytes, offset, len);
+ ObjectInput in = startObjectInput(is);
+ Object o = null;
try {
- versionId = in.readShort();
- log.trace("Read version {0}", versionId);
+ o = defaultMarshaller.objectFromObjectStream(in);
+ } finally {
+ finishObjectInput(in);
}
- catch (Exception e) {
- log.error("Unable to read version id from first two bytes of stream, barfing.");
- throw new IOException("Unable to read version id from first two bytes of stream.");
- }
- return defaultMarshaller.objectFromObjectStream(in);
+ return o;
}
public ObjectOutput startObjectOutput(OutputStream os) throws IOException {
- return defaultMarshaller.startObjectOutput(os);
+ ObjectOutput out = defaultMarshaller.startObjectOutput(os);
+ try {
+ out.writeShort(VERSION_400);
+ if (trace) log.trace("Wrote version {0}", VERSION_400);
+ } catch (Exception e) {
+ finishObjectOutput(out);
+ log.error("Unable to read version id from first two bytes of stream, barfing.");
+ throw new IOException("Unable to read version id from first two bytes of stream.", e);
+ }
+ return out;
}
public void finishObjectOutput(ObjectOutput oo) {
@@ -106,13 +113,29 @@
}
public void objectToObjectStream(Object obj, ObjectOutput out) throws IOException {
- out.writeShort(VERSION_400);
- log.trace("Wrote version {0}", VERSION_400);
+ /* No need to write version here. Clients should either be calling either:
+ * - startObjectOutput() -> objectToObjectStream() -> finishObjectOutput()
+ * or
+ * - objectToBuffer() // underneath it calls start/finish
+ * So, there's only need to write version during the start.
+ * First option is preferred when multiple objects are gonna be written.
+ */
defaultMarshaller.objectToObjectStream(obj, out);
}
public ObjectInput startObjectInput(InputStream is) throws IOException {
- return defaultMarshaller.startObjectInput(is);
+ ObjectInput in = defaultMarshaller.startObjectInput(is);
+ int versionId;
+ try {
+ versionId = in.readShort();
+ if (trace) log.trace("Read version {0}", versionId);
+ }
+ catch (Exception e) {
+ finishObjectInput(in);
+ log.error("Unable to read version id from first two bytes of stream, barfing.");
+ throw new IOException("Unable to read version id from first two bytes of stream.", e);
+ }
+ return in;
}
public void finishObjectInput(ObjectInput oi) {
@@ -120,23 +143,24 @@
}
public Object objectFromObjectStream(ObjectInput in) throws IOException, ClassNotFoundException {
- int versionId;
- try {
- versionId = in.readShort();
- log.trace("Read version {0}", versionId);
- }
- catch (Exception e) {
- log.error("Unable to read version id from first two bytes of stream, barfing.");
- throw new IOException("Unable to read version id from first two bytes of stream.");
- }
+ /* No need to read version here. Clients should either be calling either:
+ * - startObjectInput() -> objectFromObjectStream() -> finishObjectInput()
+ * or
+ * - objectFromByteBuffer() // underneath it calls start/finish
+ * So, there's only need to read version during the start.
+ * First option is preferred when multiple objects are gonna be written.
+ */
return defaultMarshaller.objectFromObjectStream(in);
}
public byte[] objectToByteBuffer(Object obj) throws IOException {
- return defaultMarshaller.objectToByteBuffer(obj);
+ ByteBuffer b = objectToBuffer(obj);
+ byte[] bytes = new byte[b.getLength()];
+ System.arraycopy(b.getBuf(), b.getOffset(), bytes, 0, b.getLength());
+ return bytes;
}
public Object objectFromByteBuffer(byte[] buf) throws IOException, ClassNotFoundException {
- return defaultMarshaller.objectFromByteBuffer(buf);
+ return objectFromByteBuffer(buf, 0, buf.length);
}
}
\ No newline at end of file
Modified: trunk/core/src/test/java/org/infinispan/config/parsing/GlobalConfigurationParserTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/config/parsing/GlobalConfigurationParserTest.java 2009-05-28 15:30:13 UTC (rev 357)
+++ trunk/core/src/test/java/org/infinispan/config/parsing/GlobalConfigurationParserTest.java 2009-05-28 21:31:22 UTC (rev 358)
@@ -1,10 +1,10 @@
package org.infinispan.config.parsing;
-import org.infinispan.config.GlobalConfiguration;
+ import org.infinispan.config.GlobalConfiguration;
import org.infinispan.executors.DefaultExecutorFactory;
import org.infinispan.executors.DefaultScheduledExecutorFactory;
-import org.infinispan.marshall.MarshallerImpl;
import org.infinispan.marshall.VersionAwareMarshaller;
+import org.infinispan.marshall.jboss.JBossMarshaller;
import org.infinispan.remoting.transport.jgroups.JGroupsTransport;
import org.testng.annotations.Test;
import org.w3c.dom.Element;
@@ -77,14 +77,14 @@
public void testMarshalling() throws Exception {
XmlConfigurationParserImpl parser = new XmlConfigurationParserImpl();
- String xml = "<serialization marshallerClass=\"org.infinispan.marshall.MarshallerImpl\" version=\"9.2\"\n" +
+ String xml = "<serialization marshallerClass=\"org.infinispan.marshall.jboss.JBossMarshaller\" version=\"9.2\"\n" +
" objectInputStreamPoolSize=\"100\" objectOutputStreamPoolSize=\"100\"/>";
Element e = XmlConfigHelper.stringToElement(xml);
GlobalConfiguration gc = new GlobalConfiguration();
parser.configureSerialization(e, gc);
- assert gc.getMarshallerClass().equals(MarshallerImpl.class.getName());
+ assert gc.getMarshallerClass().equals(JBossMarshaller.class.getName());
assert gc.getMarshallVersionString().equals("9.2");
assert gc.getObjectInputStreamPoolSize() == 100;
assert gc.getObjectOutputStreamPoolSize() == 100;
Modified: trunk/core/src/test/java/org/infinispan/marshall/MarshalledValueTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/marshall/MarshalledValueTest.java 2009-05-28 15:30:13 UTC (rev 357)
+++ trunk/core/src/test/java/org/infinispan/marshall/MarshalledValueTest.java 2009-05-28 21:31:22 UTC (rev 358)
@@ -218,24 +218,24 @@
MarshalledValue mv = new MarshalledValue(pojo, true);
- MarshallerImpl marshaller = new MarshallerImpl();
+ VersionAwareMarshaller marshaller = new VersionAwareMarshaller();
+ marshaller.init(Thread.currentThread().getContextClassLoader(), null);
// start the test
ByteArrayOutputStream bout = new ByteArrayOutputStream();
- ObjectOutputStream out = new ObjectOutputStream(bout);
- marshaller.objectToObjectStream(mv, out);
- out.close();
+ ObjectOutput oo = marshaller.startObjectOutput(bout);
+ marshaller.objectToObjectStream(mv, oo);
+ marshaller.finishObjectOutput(oo);
bout.close();
// check that the rest just contains a byte stream which a MarshalledValue will be able to deserialize.
ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
- ObjectInputStream in = new ObjectInputStream(bin);
+ ObjectInput oi = marshaller.startObjectInput(bin);
+ MarshalledValue recreated = (MarshalledValue) marshaller.objectFromObjectStream(oi);
- MarshalledValue recreated = (MarshalledValue) marshaller.objectFromObjectStream(in);
-
// there should be nothing more
- assert in.available() == 0;
- in.close();
+ assert oi.available() == 0;
+ marshaller.finishObjectInput(oi);
bin.close();
assertSerialized(recreated);
Modified: trunk/core/src/test/java/org/infinispan/marshall/jboss/JBossMarshallerTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/marshall/jboss/JBossMarshallerTest.java 2009-05-28 15:30:13 UTC (rev 357)
+++ trunk/core/src/test/java/org/infinispan/marshall/jboss/JBossMarshallerTest.java 2009-05-28 21:31:22 UTC (rev 358)
@@ -48,6 +48,7 @@
import org.infinispan.container.entries.TransientMortalCacheValue;
import org.infinispan.loaders.bucket.Bucket;
import org.infinispan.marshall.MarshalledValue;
+import org.infinispan.marshall.VersionAwareMarshaller;
import org.infinispan.remoting.responses.ExtendedResponse;
import org.infinispan.remoting.responses.RequestIgnoredResponse;
import org.infinispan.remoting.responses.SuccessfulResponse;
@@ -77,7 +78,8 @@
@Test(groups = "functional", testName = "marshall.jboss.JBossMarshallerTest")
public class JBossMarshallerTest {
- private final JBossMarshaller marshaller = new JBossMarshaller();
+// private final JBossMarshaller marshaller = new JBossMarshaller();
+ private final VersionAwareMarshaller marshaller = new VersionAwareMarshaller();
@BeforeTest
public void setUp() {
More information about the infinispan-commits
mailing list