/* * 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 org.apache.ode.bpel.engine; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.ode.bpel.iapi.Endpoint; import org.apache.ode.bpel.iapi.EndpointReference; /** * An in-memory map from the endpoints provided by various processes in * the server to their corresponding endpoint references. * * @author $author$ * @version $Revision$ */ public class SharedEndpoints { // Map of every endpoint provided by the server private static Map<Endpoint, EndpointReference> _eprs = new HashMap<Endpoint, EndpointReference>(); private static List<Endpoint> _referenceCounts = new ArrayList<Endpoint>(); /** * Creates a new SharedEndpoints object. */ public SharedEndpoints() { init(); } /** * This is called when the server is initializing */ public void init() { _eprs.clear(); _referenceCounts.clear(); } /** * Add an endpoint along with its corresponding EPR * * @param endpoint endpoint * @param epr epr */ public void addEndpoint(Endpoint endpoint, EndpointReference epr) { _eprs.put(endpoint, epr); } /** * Remove an endpoint along with its EPR * This is called when there are no more references * to this endpoint from any BPEL process * (which provides a service at this endpoint) * * @param endpoint endpoint */ public void removeEndpoint(Endpoint endpoint) { _eprs.remove(endpoint); } /** * Get the EPR for an endpoint * * @param endpoint endpoint * * @return type */ public EndpointReference getEndpointReference(Endpoint endpoint) { return _eprs.get(endpoint); } /** * Increment the number of BPEL processes who provide * a service specifically at this endpoint. * * @param endpoint endpoint */ public void incrementReferenceCount(Endpoint endpoint) { _referenceCounts.add(endpoint); } /** * Decrement the number of BPEL processes who provide * a service specifically at this endpoint. * * @param endpoint endpoint * * @return type */ public boolean decrementReferenceCount(Endpoint endpoint) { return _referenceCounts.remove(endpoint); } public int getReferenceCount(EndpointReference epr) { int referenceCount = 0; for (Endpoint endpoint : _eprs.keySet()) { if (_eprs.get(endpoint).equals(epr)) { for (Endpoint reference : _referenceCounts) { if (reference.equals(endpoint)) { ++referenceCount; } } } } return referenceCount; } }