/* Copyright 2009 Ramnivas Laddad 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. */ package org.springframework.samples.jpetstore.service.client; import java.util.Iterator; import java.util.Map; import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.samples.jpetstore.domain.LineItem; import org.springframework.samples.jpetstore.domain.Order; import org.springframework.samples.jpetstore.domain.logic.OrderService; import org.springframework.util.StopWatch; /** * Demo client class for remote OrderServices, to be invoked as standalone * program from the command line, e.g. via "client.bat" or "run.xml". * * <p>You need to specify an order ID and optionally a number of calls, * e.g. for order ID 1000: 'client 1000' for a single call per service or * 'client 1000 10' for 10 calls each". * * <p>Reads in the application context from a "clientContext.xml" file in * the VM execution directory, calling all OrderService proxies defined in it. * See that file for details. * * @author Juergen Hoeller * @since 26.12.2003 * @see org.springframework.samples.jpetstore.domain.logic.OrderService */ public class OrderServiceClient { public static final String CLIENT_CONTEXT_CONFIG_LOCATION = "client/clientContext.xml"; private final ListableBeanFactory beanFactory; public OrderServiceClient(ListableBeanFactory beanFactory) { this.beanFactory = beanFactory; } public void invokeOrderServices(int orderId, int nrOfCalls) { StopWatch stopWatch = new StopWatch(nrOfCalls + " OrderService call(s)"); Map orderServices = this.beanFactory.getBeansOfType(OrderService.class); for (Iterator it = orderServices.keySet().iterator(); it.hasNext();) { String beanName = (String) it.next(); OrderService orderService = (OrderService) orderServices.get(beanName); System.out.println("Calling OrderService '" + beanName + "' with order ID " + orderId); stopWatch.start(beanName); Order order = null; for (int i = 0; i < nrOfCalls; i++) { order = orderService.getOrder(orderId); } stopWatch.stop(); if (order != null) { printOrder(order); } else { System.out.println("Order with ID " + orderId + " not found"); } System.out.println(); } System.out.println(stopWatch.prettyPrint()); } protected void printOrder(Order order) { System.out.println("Got order with order ID " + order.getOrderId() + " and order date " + order.getOrderDate()); System.out.println("Shipping address is: " + order.getShipAddress1()); for (Iterator lineItems = order.getLineItems().iterator(); lineItems.hasNext();) { LineItem lineItem = (LineItem) lineItems.next(); System.out.println("LineItem " + lineItem.getLineNumber() + ": " + lineItem.getQuantity() + " piece(s) of item " + lineItem.getItemId()); } } public static void main(String[] args) { if (args.length == 0 || "".equals(args[0])) { System.out.println( "You need to specify an order ID and optionally a number of calls, e.g. for order ID 1000: " + "'client 1000' for a single call per service or 'client 1000 10' for 10 calls each"); } else { int orderId = Integer.parseInt(args[0]); int nrOfCalls = 1; if (args.length > 1 && !"".equals(args[1])) { nrOfCalls = Integer.parseInt(args[1]); } ListableBeanFactory beanFactory = new ClassPathXmlApplicationContext(CLIENT_CONTEXT_CONFIG_LOCATION); OrderServiceClient client = new OrderServiceClient(beanFactory); client.invokeOrderServices(orderId, nrOfCalls); } } }