Package de.netseeker.ejoe.test

Source Code of de.netseeker.ejoe.test.MassiveObjectStreamTest$ClientThread

/*********************************************************************
* MassiveRemoteTest.java
* created on 15.08.2004 by netseeker
* $Source: /cvsroot/ejoe/EJOE/test/de/netseeker/ejoe/test/MassiveObjectStreamTest.java,v $
* $Date: 2007/05/28 12:42:37 $
* $Revision: 1.41 $
*********************************************************************/

package de.netseeker.ejoe.test;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
import java.util.logging.Logger;

import junit.framework.TestCase;
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.SerializeAdapter;
import de.netseeker.ejoe.adapter.XStreamAdapter;
import de.netseeker.ejoe.handler.ServerHandler;

/**
* @author netseeker aka Michael Manske
*/
public class MassiveObjectStreamTest extends TestCase
{
    private Logger        log             = Logger.getLogger( getClass().getName() );

    EJServer              server;

    EJClient              client;

    int                   threads         = 8, readers = 4, writers = 2;

    private int           port            = EJConstants.EJOE_PORT;

    AtomicInteger         successCount    = new AtomicInteger( 0 );

    AtomicInteger         activeCount;

    boolean               compression;

    boolean               blocking;

    boolean               persistent;

    boolean               useSingleClient = false;

    boolean               useCustomTypes  = true;

    boolean               inJvm           = false;

    ServerHandler         handler         = new TestHandler();

    SerializeAdapter      adapter         = new XStreamAdapter( true );

    // SerializeAdapter adapter = new JavolutionAdapter();

    /*
     * (non-Javadoc)
     *
     * @see junit.framework.TestCase#setUp()
     */
    protected void setUp() throws Exception
    {
        super.setUp();

        BaseTest.stopAllServers();
       
        if ( getClass().equals( MassiveObjectStreamTest.class ) )
        {
            if ( useSingleClient ) persistent = true;
            handler = new TestHandler();
            inJvm = false;
            compression = false;
            blocking = false;
        }

        port = BaseTest.randomizer.nextInt( 20000 );
        if ( port < 5000 ) port += 5000;

        AdapterFactory.registerAdapter( adapter );

        server = new EJServer( handler, port );
        System.out.println( "using handler" + handler.getClass().getName() );
        if ( compression ) server.enableCompression( true );
        if ( !blocking ) server.enableNonBlockingIO( true );
        if ( inJvm )
        {
            readers = 1;
            writers = 1;
        }

        server.setMaxReadProcessors( readers );
        server.setMaxWriteProcessors( writers );
        server.enablePersistentConnections( persistent );
        server.start();

        activeCount = new AtomicInteger( threads );

        if ( useSingleClient )
        {
            client = new EJClient( "127.0.0.1", port, adapter );
            client.enableCompression( compression );
            client.enablePersistentConnection( persistent );
            if ( inJvm ) client.setInJVM( true );
        }

        Thread.sleep( 1000 );
    }

    /*
     * (non-Javadoc)
     *
     * @see junit.framework.TestCase#tearDown()
     */
    protected void tearDown() throws Exception
    {
        server.stop();
        Thread.sleep( 1000 );
        handler = new TestHandler();
        compression = false;
        blocking = false;
        persistent = false;
        useSingleClient = false;
        useCustomTypes = true;
        inJvm = false;
        AdapterFactory.clear();
        super.tearDown();
    }

    public void testExecute()
    {
        log.log( Level.INFO, "Starting " + threads + " client threads..." );

        for ( int i = 1; i <= threads; i++ )
        {
            new ClientThread( adapter, i ).start();
        }

        long start = System.currentTimeMillis();

        while ( activeCount.get() > 0 )
        {
            log.log( Level.INFO, "active threads: " + activeCount );
            try
            {
                Thread.sleep( 50 );
            }
            catch ( InterruptedException e )
            {
                // do nothing
            }
        }

        if ( useSingleClient ) client.close();

        log.log( Level.INFO, successCount + " clients returned successfully..." );
        System.out.println( "Clients processing time " + (System.currentTimeMillis() - start) + " ms." );
        assertEquals( threads, successCount.get() );
    }

    class ClientThread extends Thread
    {
        private int              number;

        private SerializeAdapter adapter;

        public ClientThread(SerializeAdapter adapter, int number)
        {
            super( "EJOE Clientthread: " + number );
            this.number = number;
            this.adapter = adapter;
        }

        public void run()
        {
            log.log( Level.INFO, System.currentTimeMillis() + " -- ClientThread" + number + " started" );
            EJClient ejclient = null;

            if ( !useSingleClient )
            {
                ejclient = new EJClient( "127.0.0.1", port, adapter );
                ejclient.enableCompression( compression );
                ejclient.enablePersistentConnection( persistent );
                ejclient.setConnectionTimeout( 60000 );
                if ( inJvm ) ejclient.setInJVM( true );
            }
            else
            {
                ejclient = client;
            }

            Map result = null;
            Map input = new HashMap();
            input.put( "KEY1", "Hello" );
            input.put( "KEY2", Integer.valueOf( 101 ) );
            input.put( "KEY3", BigDecimal.valueOf( 102 ) );
            if ( useCustomTypes )
            {
                input.put( "KEY4", new ObjectBean() );
            }

            try
            {
                result = (Map) ejclient.execute( input );

                assertNotNull( result );
                if ( useCustomTypes )
                {
                    assertNotNull( result.get( "KEY4" ) );
                    Object objBean = result.get( "KEY4" );
                    assertTrue( objBean instanceof ObjectBean );
                }

                log.log( Level.INFO, System.currentTimeMillis() + " -- ClientThread" + number + " return map contains "
                        + result.size() + " entries." );
            }
            catch ( Exception e )
            {
                log.log( Level.SEVERE, "Test failed!", e );
            }
            finally
            {
                if ( result != null )
                {
                    successCount.getAndIncrement();
                }
                activeCount.getAndDecrement();

                if ( !useSingleClient ) ejclient.close();
            }

            log.log( Level.INFO, System.currentTimeMillis() + " -- ClientThread" + number + " finished" );
        }
    }
}
TOP

Related Classes of de.netseeker.ejoe.test.MassiveObjectStreamTest$ClientThread

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.