blob: d762711099331153315a8015bc20ddca3d7b2a2b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2012 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial impl
******************************************************************************/
package example;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
//import oracle.toplink.exalogic.serializers.POFReflectionSerializer;
//import org.eclipse.persistence.expressions.ExpressionBuilder;
//import org.eclipse.persistence.queries.ReadAllQuery;
//import com.tangosol.io.pof.PortableObjectSerializer;
//import com.tangosol.io.pof.SimplePofContext;
import model.Order;
import model.OrderLine;
/**
* Test the performance of various different serialization formats and objects.
* @author James Sutherland
*/
public class Test extends PerformanceTest {
public static interface Factory {
Object create();
}
public static void main(String[] args) throws Exception {
try {
Test test = new Test();
test.test();
} catch (Exception error) {
error.printStackTrace();
}
}
public void test() {
Factory factory = new Factory() {
public Object create() {
Order order = new Order();
//for (int index = 0; index < 100; index++) {
order.addOrderLine(new OrderLine());
//order.getOrderLines().add(new OrderLine());
//}
return order;
//ReadAllQuery query = new ReadAllQuery(Order.class);
//query.setSelectionCriteria(new ExpressionBuilder().get("id").equal(100));
//return query;
}
};
//SimplePofContext simpleContext = new SimplePofContext();
//simpleContext.registerUserType(1, Order.class, new POFReflectionSerializer(Order.class));
//simpleContext.registerUserType(2, OrderLine.class, new POFReflectionSerializer(OrderLine.class));
//simpleContext.setReferenceEnabled(true);
//POFSerializer pofReflect = new POFSerializer(simpleContext);
byte[] bytes = null;
Object object = null;
//POFSerializer pof = new POFSerializer();
//bytes = pof.serialize(factory.create());
//object = pof.deserialize(bytes);
KryoSerializer kyro = new KryoSerializer();
bytes = kyro.serialize(factory.create());
object = kyro.deserialize(bytes);
JSONSerializer json = new JSONSerializer();
bytes = json.serialize(factory.create());
object = json.deserialize(bytes);
XMLSerializer xml = new XMLSerializer();
bytes = xml.serialize(factory.create());
object = xml.deserialize(bytes);
JavaSerializer java = new JavaSerializer();
bytes = java.serialize(factory.create());
object = java.deserialize(bytes);
//DatabaseSerializer db = new DatabaseSerializer();
//bytes = db.serialize(factory.create());
//object = db.deserialize(bytes);
//JOptionPane.showMessageDialog(null, "Start");
List<List> results = new ArrayList<List>();
//results.add(testSerialization("order-POF-reflect", factory, pofReflect));
//results.add(testSerialization("order-POF", factory, pof));
results.add(testSerialization("order-JSON", factory, json));
results.add(testSerialization("order-XML", factory, xml));
//results.add(testSerialization("order-Database", factory, db));
results.add(testSerialization("order-Kryo", factory, kyro));
results.add(testSerialization("order-Java", factory, java));
//testSerialization("empty-HashMap", new HashMap(), new JavaSerializer());
//testSerialization("empty-ArrayList", new ArrayList(), new JavaSerializer());
//testSerialization("Class", JFormattedTextField.class, new JavaSerializer());
//JOptionPane.showMessageDialog(null, "Finish");
for (List result : results) {
for (int index = 0; index < result.size(); index = index + 3) {
System.out.println("");
System.out.println(((PerformanceResult)result.get(index)).testName + " : " + ((PerformanceResult)result.get(index)).average);
System.out.println(((PerformanceResult)result.get(index+ 1)).testName + " : " + ((PerformanceResult)result.get(index + 1)).average);
System.out.println("Size: " + result.get(index + 2));
}
}
}
public List testSerialization(String testName, final Factory factory, final Serializer serializer) {
List result = new ArrayList();
System.out.println("\n\nbegin test " + testName);
result.add(this.executeRun(testName + "-serialize", new Runnable() {
public void run() {
serializer.serialize(factory.create());
}
}));
final byte[] bytes = serializer.serialize(factory.create());
result.add(this.executeRun(testName + "-deserialize", new Runnable() {
public void run() {
serializer.deserialize(bytes);
}
}));
result.add(bytes.length);
System.out.println("serialization size: " + bytes.length + " bytes");
StringWriter writer = new StringWriter();
for (int index = 0; index < bytes.length; index++) {
char c = (char)bytes[index];
if (c == '<') {
writer.write("&lt;");
} else if (c == '>') {
writer.write("&gt;");
} else if (c < 32 || c > 126) {
writer.write('-');
} else {
writer.write(c);
}
}
System.out.println("\nserialization bytes:\n" + writer.toString());
System.out.println("\nfinish test " + testName);
return result;
}
}