Package de.netseeker.ejoe.test

Source Code of de.netseeker.ejoe.test.AdapterSpeedLog

/*********************************************************************
* AdapterSpeedLog.java
* created on 29.07.2006 by netseeker
* $Id: AdapterSpeedLog.java,v 1.10 2007/05/28 12:42:37 netseeker Exp $
* $Log: AdapterSpeedLog.java,v $
* Revision 1.10  2007/05/28 12:42:37  netseeker
* *** empty log message ***
*
* Revision 1.9  2007/05/27 22:13:09  netseeker
* *** empty log message ***
*
* Revision 1.8  2007/03/22 21:01:34  netseeker
* *** empty log message ***
*
* Revision 1.7  2007/02/11 15:42:29  netseeker
* *** empty log message ***
*
* Revision 1.6  2006/11/05 16:59:50  netseeker
* *** empty log message ***
*
* Revision 1.5  2006/10/11 22:40:32  netseeker
* *** empty log message ***
*
* Revision 1.4  2006/08/15 16:48:42  netseeker
* *** empty log message ***
*
* Revision 1.3  2006/08/09 20:13:54  netseeker
* *** empty log message ***
*
* Revision 1.2  2006/08/02 23:03:34  netseeker
* *** empty log message ***
*
* Revision 1.1  2006/07/31 22:29:50  netseeker
* *** empty log message ***
*
*
* ====================================================================
*
*  Copyright 2005-2006 netseeker aka Michael Manske
*
*  Licensed under the Apache License, Version 2.0 (the "License");
*  you may not use this file except in compliance with the License.
*  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
* ====================================================================
*
* This file is part of the EJOE framework.
* For more information on the author, please see
* <http://www.manskes.de/>.
*
*********************************************************************/
package de.netseeker.ejoe.test;

import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.GZIPOutputStream;

import de.netseeker.ejoe.EJClient;
import de.netseeker.ejoe.EJConstants;
import de.netseeker.ejoe.EJServer;
import de.netseeker.ejoe.adapter.AdapterFactory;
import de.netseeker.ejoe.adapter.CastorAdapter;
import de.netseeker.ejoe.adapter.HessianAdapter;
import de.netseeker.ejoe.adapter.JavaBeansXmlAdapter;
import de.netseeker.ejoe.adapter.JavolutionAdapter;
import de.netseeker.ejoe.adapter.ObjectStreamAdapter;
import de.netseeker.ejoe.adapter.SerializeAdapter;
import de.netseeker.ejoe.adapter.SkaringaAdapter;
import de.netseeker.ejoe.adapter.SojoAdapter;
import de.netseeker.ejoe.adapter.XStreamAdapter;
import de.netseeker.ejoe.adapter.json.JsonToolsAdapter;

/**
* @author netseeker
* @since 0.3.9.1
*/
public class AdapterSpeedLog
{

    private static SerializeAdapter[] adapters = new SerializeAdapter[] { new JavaBeansXmlAdapter(),
            new ObjectStreamAdapter(), new XStreamAdapter(), new HessianAdapter(), new JavolutionAdapter(),
            new JsonToolsAdapter(), createCastorAdapter(), new SojoAdapter(), new SkaringaAdapter() };

    private static CastorAdapter createCastorAdapter()
    {
        try
        {
            return new CastorAdapter( AdapterSpeedLog.class.getResource( "castor-mapping.xml" ) );
        }
        catch ( Exception e )
        {
            e.printStackTrace();
        }
        return new CastorAdapter();
    }

    private static String dFormat = "yyyy-MM-dd HH:mm:ss.SSS";

    /**
     * @param args
     */
    public static void main( String[] args )
    {
        int port = EJConstants.EJOE_PORT;
        // register our custom Castor Adapter in the Server
        AdapterFactory.registerAdapter( createCastorAdapter() );

        String header = "Adapter;start time;end time;duration in ms;average single duration in ms; size of serialized object in bytes; errors";

        int loops = 1000;

        for ( int runs = 0; runs < 4; runs++ )
        {
            String fileName = "adapterReport";
            fileName += runs < 2 ? "_NIO" : "_BIO";
            fileName += (runs == 1 || runs == 3) ? "_GZIP" : "";
            fileName += ".";
            fileName += loops;
            fileName += ".csv";
            List results = new ArrayList();

            EJServer server = new EJServer( new TestHandler(), port );
            server.setMaxReadProcessors( 1 );
            server.setMaxWriteProcessors( 1 );
            server.enablePersistentConnections( true );
            server.enableNonBlockingIO( runs < 2 );
            server.enableCompression( runs == 1 || runs == 3 );
            server.enablePersistentConnections( true );

            try
            {
                System.out.println( "Starting EJServer..." );
                server.start();
                System.out.println( "Waiting 3 seconds..." );
                Thread.sleep( 3000 );
                System.out.println( "Running warmup for each adapter..." );

                for ( int i = 0; i < adapters.length; i++ )
                {
                    System.out.println( "Running warmup for " + adapters[i] );
                    EJClient client = new EJClient( "localhost", port, adapters[i] );
                    client.enablePersistentConnection( true );
                    client.enableCompression( runs == 1 || runs == 3 );
                    client.setInJVM( true );
                    try
                    {
                        for ( int t = 0; t < 5; t++ )
                            client.execute( new ObjectBean() );
                    }
                    finally
                    {
                        client.close();
                    }
                }
            }
            catch ( Exception e1 )
            {
                e1.printStackTrace();
                System.exit( -1 );
            }

            System.out.println( "Waiting 3 seconds..." );
            try
            {
                Thread.sleep( 3000 );
            }
            catch ( InterruptedException e1 )
            {
                e1.printStackTrace();
                System.exit( -1 );
            }

            Object result = null;

            String[] msgs = new String[3];

            for ( int i = 0; i < adapters.length; i++ )
            {
                EJClient client = new EJClient( "localhost", port, adapters[i] );
                client.enablePersistentConnection( true );
                client.enableCompression( runs == 1 || runs == 3 );
                client.setInJVM( true );

                System.out.println( "Running test on " + adapters[i] + " with target " + fileName );

                Date start = new Date();

                try
                {
                    for ( int go = 0; go < loops; go++ )
                    {
                        try
                        {
                            result = client.execute( new ObjectBean() );
                        }
                        catch ( Throwable e )
                        {
                            msgs[2] = "Exception occured while processing the request!" + e + ':' + e.getMessage();
                            go = runs;
                            break;
                        }
                    }
                }
                finally
                {
                    client.close();
                }

                Date end = new Date();
                long duration = end.getTime() - start.getTime();
                DateFormat df = new SimpleDateFormat( dFormat );
                BigDecimal resultF = BigDecimal.valueOf( (duration * 1.00) / (loops * 1.00) )
                        .setScale( 2, BigDecimal.ROUND_HALF_UP );
                DecimalFormat dcf = new DecimalFormat( "###.##" );

                msgs[0] = adapters[i].getClass().getName() + ';' + df.format( start ) + ';' + df.format( end ) + ';'
                        + duration + ";" + dcf.format( resultF );
                msgs[1] = "-1";

                if ( result == null || !(result instanceof ObjectBean)
                        || !((ObjectBean) result).getTheString().equals( "Accepted" ) )
                {
                    msgs[2] = "Errors during (de)serialization! Server returned: "
                            + (result != null ? (result.getClass().getName() + ':' + result) : "null");
                }
                else
                {
                    ByteArrayOutputStream bOut = new ByteArrayOutputStream();
                    SerializeAdapter adpt = adapters[i];
                    try
                    {
                        if ( runs == 1 || runs == 3 )
                        {
                            DeflaterOutputStream sOut = new GZIPOutputStream( bOut, EJConstants.BUFFERED_STREAM_SIZE )
                                {
                                    {
                                        def.setLevel( EJConstants.DEFAULT_COMPRESSION_LEVEL );
                                    }
                                };
                            adpt.write( new ObjectBean(), sOut );
                            sOut.finish();
                            sOut.close();
                        }
                        else
                        {
                            adpt.write( new ObjectBean(), bOut );
                        }
                        msgs[1] = String.valueOf( bOut.size() );
                    }
                    catch ( Exception e )
                    {
                        e.printStackTrace();
                    }
                }

                results.add( msgs[0] + ';' + msgs[1] + ";" + (msgs[2] != null ? msgs[2] : "") );

                msgs[0] = null;
                msgs[1] = null;
                msgs[2] = null;
            }

            try
            {
                System.out.println( "Creating file " + fileName );
                BufferedWriter out = new BufferedWriter( new FileWriter( fileName ) );
                out.write( header );
                out.write( "\r\n" );
                for ( Iterator it = results.iterator(); it.hasNext(); )
                {
                    out.write( (String) it.next() );
                    out.write( "\r\n" );
                }
                out.close();
            }
            catch ( IOException e )
            {
                e.printStackTrace();
            }

            System.out.println( "Stopping server..." );
            server.stop();
            port++;

            if ( runs < 3 )
            {
                try
                {
                    System.out.println( "Waiting for 5s before starting the next test..." );
                    Thread.sleep( 5000 );
                }
                catch ( InterruptedException e )
                {
                    e.printStackTrace();
                }
            }
        }

        System.exit( 0 );
    }
}
TOP

Related Classes of de.netseeker.ejoe.test.AdapterSpeedLog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.