diff options
Diffstat (limited to 'src/java.corba/share/classes/com/sun/corba/se/impl/transport/CorbaOutboundConnectionCacheImpl.java')
-rw-r--r-- | src/java.corba/share/classes/com/sun/corba/se/impl/transport/CorbaOutboundConnectionCacheImpl.java | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/src/java.corba/share/classes/com/sun/corba/se/impl/transport/CorbaOutboundConnectionCacheImpl.java b/src/java.corba/share/classes/com/sun/corba/se/impl/transport/CorbaOutboundConnectionCacheImpl.java new file mode 100644 index 0000000..b248de0 --- /dev/null +++ b/src/java.corba/share/classes/com/sun/corba/se/impl/transport/CorbaOutboundConnectionCacheImpl.java @@ -0,0 +1,210 @@ +/* + * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.sun.corba.se.impl.transport; + +import java.util.Collection; +import java.util.Hashtable; +import java.util.Iterator; + +import com.sun.corba.se.pept.broker.Broker; +import com.sun.corba.se.pept.transport.ContactInfo; +import com.sun.corba.se.pept.transport.Connection; +import com.sun.corba.se.pept.transport.OutboundConnectionCache; + +import com.sun.corba.se.spi.monitoring.LongMonitoredAttributeBase; +import com.sun.corba.se.spi.monitoring.MonitoringConstants; +import com.sun.corba.se.spi.monitoring.MonitoringFactories; +import com.sun.corba.se.spi.monitoring.MonitoredObject; +import com.sun.corba.se.spi.orb.ORB; +import com.sun.corba.se.spi.transport.CorbaConnectionCache; +import com.sun.corba.se.spi.transport.CorbaContactInfo; + +import com.sun.corba.se.impl.orbutil.ORBUtility; + +/** + * @author Harold Carr + */ +public class CorbaOutboundConnectionCacheImpl + extends + CorbaConnectionCacheBase + implements + OutboundConnectionCache +{ + protected Hashtable connectionCache; + + public CorbaOutboundConnectionCacheImpl(ORB orb, ContactInfo contactInfo) + { + super(orb, contactInfo.getConnectionCacheType(), + ((CorbaContactInfo)contactInfo).getMonitoringName()); + this.connectionCache = new Hashtable(); + } + + //////////////////////////////////////////////////// + // + // pept.transport.OutboundConnectionCache + // + + public Connection get(ContactInfo contactInfo) + { + if (orb.transportDebugFlag) { + dprint(".get: " + contactInfo + " " + contactInfo.hashCode()); + } + synchronized (backingStore()) { + dprintStatistics(); + return (Connection) connectionCache.get(contactInfo); + } + } + + public void put(ContactInfo contactInfo, Connection connection) + { + if (orb.transportDebugFlag) { + dprint(".put: " + contactInfo + " " + contactInfo.hashCode() + " " + + connection); + } + synchronized (backingStore()) { + connectionCache.put(contactInfo, connection); + connection.setConnectionCache(this); + dprintStatistics(); + } + } + + public void remove(ContactInfo contactInfo) + { + if (orb.transportDebugFlag) { + dprint(".remove: " + contactInfo + " " + contactInfo.hashCode()); + } + synchronized (backingStore()) { + if (contactInfo != null) { + connectionCache.remove(contactInfo); + } + dprintStatistics(); + } + } + + //////////////////////////////////////////////////// + // + // Implementation + // + + public Collection values() + { + return connectionCache.values(); + } + + protected Object backingStore() + { + return connectionCache; + } + + protected void registerWithMonitoring() + { + // ORB + MonitoredObject orbMO = + orb.getMonitoringManager().getRootMonitoredObject(); + + // CONNECTION + MonitoredObject connectionMO = + orbMO.getChild(MonitoringConstants.CONNECTION_MONITORING_ROOT); + if (connectionMO == null) { + connectionMO = + MonitoringFactories.getMonitoredObjectFactory() + .createMonitoredObject( + MonitoringConstants.CONNECTION_MONITORING_ROOT, + MonitoringConstants.CONNECTION_MONITORING_ROOT_DESCRIPTION); + orbMO.addChild(connectionMO); + } + + // OUTBOUND CONNECTION + MonitoredObject outboundConnectionMO = + connectionMO.getChild( + MonitoringConstants.OUTBOUND_CONNECTION_MONITORING_ROOT); + if (outboundConnectionMO == null) { + outboundConnectionMO = + MonitoringFactories.getMonitoredObjectFactory() + .createMonitoredObject( + MonitoringConstants.OUTBOUND_CONNECTION_MONITORING_ROOT, + MonitoringConstants.OUTBOUND_CONNECTION_MONITORING_ROOT_DESCRIPTION); + connectionMO.addChild(outboundConnectionMO); + } + + // NODE FOR THIS CACHE + MonitoredObject thisMO = + outboundConnectionMO.getChild(getMonitoringName()); + if (thisMO == null) { + thisMO = + MonitoringFactories.getMonitoredObjectFactory() + .createMonitoredObject( + getMonitoringName(), + MonitoringConstants.CONNECTION_MONITORING_DESCRIPTION); + outboundConnectionMO.addChild(thisMO); + } + + LongMonitoredAttributeBase attribute; + + // ATTRIBUTE + attribute = new + LongMonitoredAttributeBase( + MonitoringConstants.CONNECTION_TOTAL_NUMBER_OF_CONNECTIONS, + MonitoringConstants.CONNECTION_TOTAL_NUMBER_OF_CONNECTIONS_DESCRIPTION) + { + public Object getValue() { + return new Long(CorbaOutboundConnectionCacheImpl.this.numberOfConnections()); + } + }; + thisMO.addAttribute(attribute); + + // ATTRIBUTE + attribute = new + LongMonitoredAttributeBase( + MonitoringConstants.CONNECTION_NUMBER_OF_IDLE_CONNECTIONS, + MonitoringConstants.CONNECTION_NUMBER_OF_IDLE_CONNECTIONS_DESCRIPTION) + { + public Object getValue() { + return new Long(CorbaOutboundConnectionCacheImpl.this.numberOfIdleConnections()); + } + }; + thisMO.addAttribute(attribute); + + // ATTRIBUTE + attribute = new + LongMonitoredAttributeBase( + MonitoringConstants.CONNECTION_NUMBER_OF_BUSY_CONNECTIONS, + MonitoringConstants.CONNECTION_NUMBER_OF_BUSY_CONNECTIONS_DESCRIPTION) + { + public Object getValue() { + return new Long(CorbaOutboundConnectionCacheImpl.this.numberOfBusyConnections()); + } + }; + thisMO.addAttribute(attribute); + } + + protected void dprint(String msg) + { + ORBUtility.dprint("CorbaOutboundConnectionCacheImpl", msg); + } +} + +// End of file. |