package com.cloudhopper.commons.util.demo; /* * #%L * ch-commons-util * %% * Copyright (C) 2012 Cloudhopper by Twitter * %% * 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. * #L% */ import com.cloudhopper.commons.util.windowing.WindowListener; import com.cloudhopper.commons.util.windowing.Window; import com.cloudhopper.commons.util.windowing.WindowFuture; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author joelauer (twitter: @jjlauer or <a href="http://twitter.com/jjlauer" target=window>http://twitter.com/jjlauer</a>) */ public class Window2Main { private static final Logger logger = LoggerFactory.getLogger(Window2Main.class); static public void main(String[] args) throws Exception { ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); WindowListener listener = new WindowListener<Integer,String,String>() { @Override public void expired(WindowFuture<Integer, String, String> entry) { logger.debug("The key=" + entry.getKey() + ", request=" + entry.getRequest() + " expired"); } }; Window<Integer,String,String> window = new Window<Integer,String,String>(2, executor, 5000, listener); Window<Integer,String,String> window2 = new Window<Integer,String,String>(2, executor, 5000, listener, "window2monitor"); WindowFuture<Integer,String,String> future0 = window.offer(0, "Request0", 1000, 4000); logger.info("Request0 offered at " + future0.getOfferTimestamp() + " and expires at " + future0.getExpireTimestamp()); //requestFuture.await(); System.out.println("Press any key to add another request..."); System.in.read(); WindowFuture<Integer,String,String> future1 = window2.offer(1, "Request1", 1000, 4000); logger.info("Request1 offered at " + future1.getOfferTimestamp() + " and expires at " + future1.getExpireTimestamp()); System.out.println("Press any key to add response..."); System.in.read(); logger.info("Adding Response1..."); WindowFuture<Integer,String,String> responseFuture1 = window.complete(1, "Response1"); if (responseFuture1 == null) { logger.info("Request1 was not present in window"); } else { logger.info(responseFuture1.getRequest()); logger.info(responseFuture1.getResponse()); } /** // add a response ResponseFuture<Integer,String,String> responseFuture0 = requestWindow.addResponse(0, "Response0"); logger.info(responseFuture0.getRequest()); logger.info(responseFuture0.getResponse()); logger.info("Processing Time: " + responseFuture0.getProcessingTime() + " ms"); // this should timeout dude... RequestFuture<Integer,String,String> requestFuture1 = requestWindow.addRequest(1, "Request1", 1000); logger.info("Request1 worked"); ResponseFuture<Integer,String,String> responseFuture1 = requestWindow.addResponse(1, "Response1"); logger.info(responseFuture1.getRequest()); logger.info(responseFuture1.getResponse()); logger.info("Processing Time: " + responseFuture1.getProcessingTime() + " ms"); */ System.out.println("Press any key to get rid of our reference to Window"); System.in.read(); window.destroy(); window2.destroy(); window = null; window2 = null; System.gc(); System.out.println("Press any key to exit..."); System.in.read(); executor.shutdown(); } }