/* * @(#)CorbaOutboundConnectionCacheImpl.java 1.5 04/06/21 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ 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.