1. /*
  2. * @(#)CorbaOutboundConnectionCacheImpl.java 1.5 04/06/21
  3. *
  4. * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package com.sun.corba.se.impl.transport;
  8. import java.util.Collection;
  9. import java.util.Hashtable;
  10. import java.util.Iterator;
  11. import com.sun.corba.se.pept.broker.Broker;
  12. import com.sun.corba.se.pept.transport.ContactInfo;
  13. import com.sun.corba.se.pept.transport.Connection;
  14. import com.sun.corba.se.pept.transport.OutboundConnectionCache;
  15. import com.sun.corba.se.spi.monitoring.LongMonitoredAttributeBase;
  16. import com.sun.corba.se.spi.monitoring.MonitoringConstants;
  17. import com.sun.corba.se.spi.monitoring.MonitoringFactories;
  18. import com.sun.corba.se.spi.monitoring.MonitoredObject;
  19. import com.sun.corba.se.spi.orb.ORB;
  20. import com.sun.corba.se.spi.transport.CorbaConnectionCache;
  21. import com.sun.corba.se.spi.transport.CorbaContactInfo;
  22. import com.sun.corba.se.impl.orbutil.ORBUtility;
  23. /**
  24. * @author Harold Carr
  25. */
  26. public class CorbaOutboundConnectionCacheImpl
  27. extends
  28. CorbaConnectionCacheBase
  29. implements
  30. OutboundConnectionCache
  31. {
  32. protected Hashtable connectionCache;
  33. public CorbaOutboundConnectionCacheImpl(ORB orb, ContactInfo contactInfo)
  34. {
  35. super(orb, contactInfo.getConnectionCacheType(),
  36. ((CorbaContactInfo)contactInfo).getMonitoringName());
  37. this.connectionCache = new Hashtable();
  38. }
  39. ////////////////////////////////////////////////////
  40. //
  41. // pept.transport.OutboundConnectionCache
  42. //
  43. public Connection get(ContactInfo contactInfo)
  44. {
  45. if (orb.transportDebugFlag) {
  46. dprint(".get: " + contactInfo + " " + contactInfo.hashCode());
  47. }
  48. synchronized (backingStore()) {
  49. dprintStatistics();
  50. return (Connection) connectionCache.get(contactInfo);
  51. }
  52. }
  53. public void put(ContactInfo contactInfo, Connection connection)
  54. {
  55. if (orb.transportDebugFlag) {
  56. dprint(".put: " + contactInfo + " " + contactInfo.hashCode() + " "
  57. + connection);
  58. }
  59. synchronized (backingStore()) {
  60. connectionCache.put(contactInfo, connection);
  61. connection.setConnectionCache(this);
  62. dprintStatistics();
  63. }
  64. }
  65. public void remove(ContactInfo contactInfo)
  66. {
  67. if (orb.transportDebugFlag) {
  68. dprint(".remove: " + contactInfo + " " + contactInfo.hashCode());
  69. }
  70. synchronized (backingStore()) {
  71. if (contactInfo != null) {
  72. connectionCache.remove(contactInfo);
  73. }
  74. dprintStatistics();
  75. }
  76. }
  77. ////////////////////////////////////////////////////
  78. //
  79. // Implementation
  80. //
  81. public Collection values()
  82. {
  83. return connectionCache.values();
  84. }
  85. protected Object backingStore()
  86. {
  87. return connectionCache;
  88. }
  89. protected void registerWithMonitoring()
  90. {
  91. // ORB
  92. MonitoredObject orbMO =
  93. orb.getMonitoringManager().getRootMonitoredObject();
  94. // CONNECTION
  95. MonitoredObject connectionMO =
  96. orbMO.getChild(MonitoringConstants.CONNECTION_MONITORING_ROOT);
  97. if (connectionMO == null) {
  98. connectionMO =
  99. MonitoringFactories.getMonitoredObjectFactory()
  100. .createMonitoredObject(
  101. MonitoringConstants.CONNECTION_MONITORING_ROOT,
  102. MonitoringConstants.CONNECTION_MONITORING_ROOT_DESCRIPTION);
  103. orbMO.addChild(connectionMO);
  104. }
  105. // OUTBOUND CONNECTION
  106. MonitoredObject outboundConnectionMO =
  107. connectionMO.getChild(
  108. MonitoringConstants.OUTBOUND_CONNECTION_MONITORING_ROOT);
  109. if (outboundConnectionMO == null) {
  110. outboundConnectionMO =
  111. MonitoringFactories.getMonitoredObjectFactory()
  112. .createMonitoredObject(
  113. MonitoringConstants.OUTBOUND_CONNECTION_MONITORING_ROOT,
  114. MonitoringConstants.OUTBOUND_CONNECTION_MONITORING_ROOT_DESCRIPTION);
  115. connectionMO.addChild(outboundConnectionMO);
  116. }
  117. // NODE FOR THIS CACHE
  118. MonitoredObject thisMO =
  119. outboundConnectionMO.getChild(getMonitoringName());
  120. if (thisMO == null) {
  121. thisMO =
  122. MonitoringFactories.getMonitoredObjectFactory()
  123. .createMonitoredObject(
  124. getMonitoringName(),
  125. MonitoringConstants.CONNECTION_MONITORING_DESCRIPTION);
  126. outboundConnectionMO.addChild(thisMO);
  127. }
  128. LongMonitoredAttributeBase attribute;
  129. // ATTRIBUTE
  130. attribute = new
  131. LongMonitoredAttributeBase(
  132. MonitoringConstants.CONNECTION_TOTAL_NUMBER_OF_CONNECTIONS,
  133. MonitoringConstants.CONNECTION_TOTAL_NUMBER_OF_CONNECTIONS_DESCRIPTION)
  134. {
  135. public Object getValue() {
  136. return new Long(CorbaOutboundConnectionCacheImpl.this.numberOfConnections());
  137. }
  138. };
  139. thisMO.addAttribute(attribute);
  140. // ATTRIBUTE
  141. attribute = new
  142. LongMonitoredAttributeBase(
  143. MonitoringConstants.CONNECTION_NUMBER_OF_IDLE_CONNECTIONS,
  144. MonitoringConstants.CONNECTION_NUMBER_OF_IDLE_CONNECTIONS_DESCRIPTION)
  145. {
  146. public Object getValue() {
  147. return new Long(CorbaOutboundConnectionCacheImpl.this.numberOfIdleConnections());
  148. }
  149. };
  150. thisMO.addAttribute(attribute);
  151. // ATTRIBUTE
  152. attribute = new
  153. LongMonitoredAttributeBase(
  154. MonitoringConstants.CONNECTION_NUMBER_OF_BUSY_CONNECTIONS,
  155. MonitoringConstants.CONNECTION_NUMBER_OF_BUSY_CONNECTIONS_DESCRIPTION)
  156. {
  157. public Object getValue() {
  158. return new Long(CorbaOutboundConnectionCacheImpl.this.numberOfBusyConnections());
  159. }
  160. };
  161. thisMO.addAttribute(attribute);
  162. }
  163. protected void dprint(String msg)
  164. {
  165. ORBUtility.dprint("CorbaOutboundConnectionCacheImpl", msg);
  166. }
  167. }
  168. // End of file.