1 /* 2 * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.sun.corba.se.impl.transport; 27 28 import java.util.Collection; 29 import java.util.Hashtable; 30 import java.util.Iterator; 31 32 import com.sun.corba.se.pept.broker.Broker; 33 import com.sun.corba.se.pept.transport.ContactInfo; 34 import com.sun.corba.se.pept.transport.Connection; 35 import com.sun.corba.se.pept.transport.OutboundConnectionCache; 36 37 import com.sun.corba.se.spi.monitoring.LongMonitoredAttributeBase; 38 import com.sun.corba.se.spi.monitoring.MonitoringConstants; 39 import com.sun.corba.se.spi.monitoring.MonitoringFactories; 40 import com.sun.corba.se.spi.monitoring.MonitoredObject; 41 import com.sun.corba.se.spi.orb.ORB; 42 import com.sun.corba.se.spi.transport.CorbaConnectionCache; 43 import com.sun.corba.se.spi.transport.CorbaContactInfo; 44 45 import com.sun.corba.se.impl.orbutil.ORBUtility; 46 47 /** 48 * @author Harold Carr 49 */ 50 public class CorbaOutboundConnectionCacheImpl 51 extends 52 CorbaConnectionCacheBase 53 implements 54 OutboundConnectionCache 55 { 56 protected Hashtable connectionCache; 57 CorbaOutboundConnectionCacheImpl(ORB orb, ContactInfo contactInfo)58 public CorbaOutboundConnectionCacheImpl(ORB orb, ContactInfo contactInfo) 59 { 60 super(orb, contactInfo.getConnectionCacheType(), 61 ((CorbaContactInfo)contactInfo).getMonitoringName()); 62 this.connectionCache = new Hashtable(); 63 } 64 65 //////////////////////////////////////////////////// 66 // 67 // pept.transport.OutboundConnectionCache 68 // 69 get(ContactInfo contactInfo)70 public Connection get(ContactInfo contactInfo) 71 { 72 if (orb.transportDebugFlag) { 73 dprint(".get: " + contactInfo + " " + contactInfo.hashCode()); 74 } 75 synchronized (backingStore()) { 76 dprintStatistics(); 77 return (Connection) connectionCache.get(contactInfo); 78 } 79 } 80 put(ContactInfo contactInfo, Connection connection)81 public void put(ContactInfo contactInfo, Connection connection) 82 { 83 if (orb.transportDebugFlag) { 84 dprint(".put: " + contactInfo + " " + contactInfo.hashCode() + " " 85 + connection); 86 } 87 synchronized (backingStore()) { 88 connectionCache.put(contactInfo, connection); 89 connection.setConnectionCache(this); 90 dprintStatistics(); 91 } 92 } 93 remove(ContactInfo contactInfo)94 public void remove(ContactInfo contactInfo) 95 { 96 if (orb.transportDebugFlag) { 97 dprint(".remove: " + contactInfo + " " + contactInfo.hashCode()); 98 } 99 synchronized (backingStore()) { 100 if (contactInfo != null) { 101 connectionCache.remove(contactInfo); 102 } 103 dprintStatistics(); 104 } 105 } 106 107 //////////////////////////////////////////////////// 108 // 109 // Implementation 110 // 111 values()112 public Collection values() 113 { 114 return connectionCache.values(); 115 } 116 backingStore()117 protected Object backingStore() 118 { 119 return connectionCache; 120 } 121 registerWithMonitoring()122 protected void registerWithMonitoring() 123 { 124 // ORB 125 MonitoredObject orbMO = 126 orb.getMonitoringManager().getRootMonitoredObject(); 127 128 // CONNECTION 129 MonitoredObject connectionMO = 130 orbMO.getChild(MonitoringConstants.CONNECTION_MONITORING_ROOT); 131 if (connectionMO == null) { 132 connectionMO = 133 MonitoringFactories.getMonitoredObjectFactory() 134 .createMonitoredObject( 135 MonitoringConstants.CONNECTION_MONITORING_ROOT, 136 MonitoringConstants.CONNECTION_MONITORING_ROOT_DESCRIPTION); 137 orbMO.addChild(connectionMO); 138 } 139 140 // OUTBOUND CONNECTION 141 MonitoredObject outboundConnectionMO = 142 connectionMO.getChild( 143 MonitoringConstants.OUTBOUND_CONNECTION_MONITORING_ROOT); 144 if (outboundConnectionMO == null) { 145 outboundConnectionMO = 146 MonitoringFactories.getMonitoredObjectFactory() 147 .createMonitoredObject( 148 MonitoringConstants.OUTBOUND_CONNECTION_MONITORING_ROOT, 149 MonitoringConstants.OUTBOUND_CONNECTION_MONITORING_ROOT_DESCRIPTION); 150 connectionMO.addChild(outboundConnectionMO); 151 } 152 153 // NODE FOR THIS CACHE 154 MonitoredObject thisMO = 155 outboundConnectionMO.getChild(getMonitoringName()); 156 if (thisMO == null) { 157 thisMO = 158 MonitoringFactories.getMonitoredObjectFactory() 159 .createMonitoredObject( 160 getMonitoringName(), 161 MonitoringConstants.CONNECTION_MONITORING_DESCRIPTION); 162 outboundConnectionMO.addChild(thisMO); 163 } 164 165 LongMonitoredAttributeBase attribute; 166 167 // ATTRIBUTE 168 attribute = new 169 LongMonitoredAttributeBase( 170 MonitoringConstants.CONNECTION_TOTAL_NUMBER_OF_CONNECTIONS, 171 MonitoringConstants.CONNECTION_TOTAL_NUMBER_OF_CONNECTIONS_DESCRIPTION) 172 { 173 public Object getValue() { 174 return new Long(CorbaOutboundConnectionCacheImpl.this.numberOfConnections()); 175 } 176 }; 177 thisMO.addAttribute(attribute); 178 179 // ATTRIBUTE 180 attribute = new 181 LongMonitoredAttributeBase( 182 MonitoringConstants.CONNECTION_NUMBER_OF_IDLE_CONNECTIONS, 183 MonitoringConstants.CONNECTION_NUMBER_OF_IDLE_CONNECTIONS_DESCRIPTION) 184 { 185 public Object getValue() { 186 return new Long(CorbaOutboundConnectionCacheImpl.this.numberOfIdleConnections()); 187 } 188 }; 189 thisMO.addAttribute(attribute); 190 191 // ATTRIBUTE 192 attribute = new 193 LongMonitoredAttributeBase( 194 MonitoringConstants.CONNECTION_NUMBER_OF_BUSY_CONNECTIONS, 195 MonitoringConstants.CONNECTION_NUMBER_OF_BUSY_CONNECTIONS_DESCRIPTION) 196 { 197 public Object getValue() { 198 return new Long(CorbaOutboundConnectionCacheImpl.this.numberOfBusyConnections()); 199 } 200 }; 201 thisMO.addAttribute(attribute); 202 } 203 dprint(String msg)204 protected void dprint(String msg) 205 { 206 ORBUtility.dprint("CorbaOutboundConnectionCacheImpl", msg); 207 } 208 } 209 210 // End of file. 211