/* * OpenCredo-Esper - simplifies adopting Esper in Java applications. * Copyright (C) 2010 OpenCredo Ltd. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.opencredo.esper.samples.noodlebar.main; import org.opencredo.esper.samples.noodlebar.domain.NoodleBar; import org.opencredo.esper.samples.noodlebar.domain.NoodleOrder; import org.opencredo.esper.samples.noodlebar.domain.OrderStatus; import org.opencredo.esper.samples.noodlebar.domain.throughput.NoodleOrderThroughputMonitor; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Asynchronously submits a number of orders to a {@link NoodleBar} * * @author Russ Miles (russ.miles@opencredo.com) * */ public class AsyncNoodleOrderGenerator { private static final int NUMBER_OF_ORDERS = 1000; private static final String NOODLE_BAR_BEAN_NAME = "noodleBar"; private static final String NOODLE_ORDER_THROUGHPUT_MONITOR_BEAN_NAME = "noodleOrderThroughputMonitor"; private static NoodleBar noodleBar; private static NoodleOrderThroughputMonitor noodleOrderThroughputMonitor; public static void main(String[] args) { System.out.println("Initializing Dependencies..."); initializeDependencies(); long startTime = System.currentTimeMillis(); System.out.println("Sending orders into the Noodle Bar..."); sendSomeOrders(); long stopTime = System.currentTimeMillis(); long timeTaken = stopTime - startTime; System.out.println("Simple timer calculated at end " + timeTaken + " milliseconds for " + NUMBER_OF_ORDERS + " orders"); System.out.println("The Noodle Bar is actually accepting " + noodleOrderThroughputMonitor.getAverageThroughput() + " orders per second according to continuous Esper Monitoring"); System.exit(0); } private static void sendSomeOrders() { NoodleOrder[] orders = new NoodleOrder[NUMBER_OF_ORDERS]; // Create and send events for (int x = 0; x < NUMBER_OF_ORDERS; x++) { orders[x] = new NoodleOrder(); noodleBar.placeOrder(orders[x]); // Sleep a little bit between orders try { Thread.sleep(5l); } catch (InterruptedException e) { e.printStackTrace(); } } boolean processing = true; while (processing) { processing = false; for (NoodleOrder order : orders) { if (order.getStatus() == OrderStatus.COMPLETE) { System.out.println("Order Completed!"); } else { processing = true; } } try { Thread.sleep(20l); } catch (InterruptedException e) { e.printStackTrace(); } } } private static void initializeDependencies() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext( "classpath:async-noodlebar-context.xml"); noodleBar = (NoodleBar) applicationContext.getBean(NOODLE_BAR_BEAN_NAME); noodleOrderThroughputMonitor = (NoodleOrderThroughputMonitor) applicationContext .getBean(NOODLE_ORDER_THROUGHPUT_MONITOR_BEAN_NAME); } }