/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 demo.throttling.server; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.ws.Endpoint; import com.codahale.metrics.MetricRegistry; import org.apache.cxf.Bus; import org.apache.cxf.bus.CXFBusFactory; import org.apache.cxf.message.Message; import org.apache.cxf.metrics.MetricsFeature; import org.apache.cxf.metrics.codahale.CodahaleMetricsProvider; import org.apache.cxf.phase.Phase; import org.apache.cxf.throttling.ThrottleResponse; import org.apache.cxf.throttling.ThrottlingFeature; import org.apache.cxf.throttling.ThrottlingManager; public class Server { Map<String, Customer> customers = new HashMap<>(); protected Server() throws Exception { System.out.println("Starting Server"); customers.put("Tom", new Customer.PremiumCustomer("Tom")); customers.put("Rob", new Customer.PreferredCustomer("Rob")); customers.put("Vince", new Customer.RegularCustomer("Vince")); customers.put("Malcolm", new Customer.CheapCustomer("Malcolm")); customers.put("Jonas", new Customer.TrialCustomer("Jonas")); Map<String, Object> properties = new HashMap<>(); properties.put("bus.jmx.usePlatformMBeanServer", Boolean.TRUE); properties.put("bus.jmx.enabled", Boolean.TRUE); Bus b = new CXFBusFactory().createBus(null, properties); MetricRegistry registry = new MetricRegistry(); CodahaleMetricsProvider.setupJMXReporter(b, registry); b.setExtension(registry, MetricRegistry.class); ThrottlingManager manager = new ThrottlingManager() { @Override public ThrottleResponse getThrottleResponse(String phase, Message m) { ThrottleResponse r = new ThrottleResponse(); if (m.get("THROTTLED") != null) { return null; } m.put("THROTTLED", true); Customer c = m.getExchange().get(Customer.class); c.throttle(r); return r; } @Override public List<String> getDecisionPhases() { return Collections.singletonList(Phase.PRE_STREAM); } }; b.getInInterceptors().add(new CustomerMetricsInterceptor(registry, customers)); Object implementor = new GreeterImpl(); String address = "http://localhost:9001/SoapContext/SoapPort"; Endpoint.publish(address, implementor, new MetricsFeature(), new ThrottlingFeature(manager)); } public static void main(String args[]) throws Exception { new Server(); System.out.println("Server ready..."); Thread.sleep(5 * 60 * 1000); System.out.println("Server exiting"); System.exit(0); } }