⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractasynchronousloanbrokertestcase.java

📁 提供ESB 应用mule源代码 提供ESB 应用mule源代码
💻 JAVA
字号:
/* * $Id: AbstractAsynchronousLoanBrokerTestCase.java 11445 2008-03-20 11:03:00Z tcarlson $ * -------------------------------------------------------------------------------------- * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com * * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */package org.mule.example.loanbroker.tests;import org.mule.api.MuleException;import org.mule.api.MuleMessage;import org.mule.example.loanbroker.messages.Customer;import org.mule.example.loanbroker.messages.CustomerQuoteRequest;import org.mule.example.loanbroker.messages.LoanQuote;import org.mule.module.client.MuleClient;import org.mule.transport.NullPayload;import org.mule.util.ExceptionHolder;import org.mule.util.StringMessageUtils;import java.beans.ExceptionListener;import edu.emory.mathcs.backport.java.util.concurrent.CountDownLatch;import org.apache.commons.lang.time.StopWatch;/** * Tests the Loan Broker application asynchronously.  Note that a simple thread delay is used to wait for the * incoming responses to arrive.  This may or may not be sufficient depending on external factors (processor * speed, logging detail, etc.).  To make the tests reliable, a more accurate mechanism should be employed * (notifications, thread-safe counter, etc.) */public abstract class AbstractAsynchronousLoanBrokerTestCase extends AbstractLoanBrokerTestCase{    @Override    protected int getNumberOfRequests()    {        return 100;    }    /** Milliseconds to wait after sending each message in order for the thread to "catch up" with the test. */    protected int getDelay()    {        return 10000;    }    protected int getWarmUpMessages()    {        return 50;    }    @Override    public void testSingleLoanRequest() throws Exception    {        MuleClient client = new MuleClient();        Customer c = new Customer("Ross Mason", 1234);        CustomerQuoteRequest request = new CustomerQuoteRequest(c, 100000, 48);        // Send asynchronous request        client.dispatch("CustomerRequests", request, null);        // Wait for asynchronous response        MuleMessage result = client.request("CustomerResponses", getDelay());        assertNotNull("Result is null", result);        assertFalse("Result is null", result.getPayload() instanceof NullPayload);        assertTrue("Result should be LoanQuote but is " + result.getPayload().getClass().getName(),                result.getPayload() instanceof LoanQuote);        LoanQuote quote = (LoanQuote) result.getPayload();        assertTrue(quote.getInterestRate() > 0);    }    @Override    public void testLotsOfLoanRequests() throws Exception    {        final MuleClient client = new MuleClient();        Customer c = new Customer("Ross Mason", 1234);        CustomerQuoteRequest[] requests = new CustomerQuoteRequest[3];        requests[0] = new CustomerQuoteRequest(c, 100000, 48);        requests[1] = new CustomerQuoteRequest(c, 1000, 12);        requests[2] = new CustomerQuoteRequest(c, 10, 24);        final StopWatch stopWatch = new StopWatch();        final int numRequests = getNumberOfRequests() + getWarmUpMessages();        int i = 0;        int numberOfThreads = 1;        CountDownLatch latch = new CountDownLatch(numberOfThreads);        ExceptionHolder exceptionHolder = new ExceptionHolder();        try        {            for (int x = 0; x < numberOfThreads; x++)            {                Thread thread = new Thread(new ClientReceiver(latch, numRequests / numberOfThreads, exceptionHolder));                thread.start();            }            for (i = 0; i < numRequests; i++)            {                if (i == getWarmUpMessages())                {                    stopWatch.start();                }                client.dispatch("CustomerRequests", requests[i % 3], null);            }        }        finally        {            latch.await();            stopWatch.stop();            System.out.println("Total running time was: " + stopWatch.getTime() + "ms");            System.out.println("Requests processed was: " + i);            int mps = (int) (numRequests / ((double) stopWatch.getTime() / (double) 1000));            System.out.println("Msg/sec: " + mps + " (warm up msgs = " + getWarmUpMessages() + ")");            if(exceptionHolder.isExceptionThrown())            {                exceptionHolder.print();                fail("Exceptions thrown during async processing");            }        }    }    private class ClientReceiver implements Runnable    {        private CountDownLatch latch;        private int numberOfRequests;        private ExceptionListener exListener;        public ClientReceiver(CountDownLatch latch, int numberOfRequests, ExceptionListener exListener)        {            this.latch = latch;            this.numberOfRequests = numberOfRequests;            this.exListener = exListener;        }        public void run()        {            int i = 0;            try            {                MuleClient client = new MuleClient();                MuleMessage result = null;                for (i = 0; i < numberOfRequests; i++)                {                    try                    {                        result = client.request("CustomerResponses", getDelay());                    }                    catch (MuleException e)                    {                        exListener.exceptionThrown(e);                        break;                    }                    //System.out.println("Received: " + i);                    assertNotNull("Result is null", result);                    assertFalse("Result is null", result.getPayload() instanceof NullPayload);                    assertTrue("Result should be LoanQuote but is " + result.getPayload().getClass().getName(),                            result.getPayload() instanceof LoanQuote);                    LoanQuote quote = (LoanQuote) result.getPayload();                    assertTrue(quote.getInterestRate() > 0);                }            }            catch (Throwable e)            {                //e.printStackTrace();                System.out.println(StringMessageUtils.getBoilerPlate("Processed Messages=" + i));                if(e instanceof Error)                {                    //throw (Error)e;                    exListener.exceptionThrown(new Exception(e));                }                else                {                    exListener.exceptionThrown((Exception)e);                }            }            finally            {                latch.countDown();            }        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -