CorbaInboundConnectionCacheImpl.java revision 744:a98f572e2ceb
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
26package com.sun.corba.se.impl.transport;
27
28import java.util.ArrayList;
29import java.util.Collection;
30
31import com.sun.corba.se.pept.broker.Broker;
32import com.sun.corba.se.pept.transport.Acceptor;
33import com.sun.corba.se.pept.transport.Connection;
34import com.sun.corba.se.pept.transport.InboundConnectionCache;
35
36import com.sun.corba.se.spi.monitoring.LongMonitoredAttributeBase;
37import com.sun.corba.se.spi.monitoring.MonitoringConstants;
38import com.sun.corba.se.spi.monitoring.MonitoringFactories;
39import com.sun.corba.se.spi.monitoring.MonitoredObject;
40import com.sun.corba.se.spi.orb.ORB;
41import com.sun.corba.se.spi.transport.CorbaConnectionCache;
42import com.sun.corba.se.spi.transport.CorbaAcceptor;
43
44import com.sun.corba.se.impl.orbutil.ORBUtility;
45
46/**
47 * @author Harold Carr
48 */
49public class CorbaInboundConnectionCacheImpl
50    extends
51        CorbaConnectionCacheBase
52    implements
53        InboundConnectionCache
54{
55    protected Collection connectionCache;
56
57    private Acceptor acceptor;
58
59    public CorbaInboundConnectionCacheImpl(ORB orb, Acceptor acceptor)
60    {
61        super(orb, acceptor.getConnectionCacheType(),
62              ((CorbaAcceptor)acceptor).getMonitoringName());
63        this.connectionCache = new ArrayList();
64        this.acceptor = acceptor;
65        if (orb.transportDebugFlag) {
66            dprint(": " + acceptor );
67        }
68    }
69
70    ////////////////////////////////////////////////////
71    //
72    // pept.transport.InboundConnectionCache
73    //
74
75    public void close () {
76
77        super.close();
78        if (orb.transportDebugFlag) {
79            dprint(".close: " + acceptor );
80        }
81        this.acceptor.close();
82
83    }
84
85    public Connection get(Acceptor acceptor)
86    {
87        throw wrapper.methodShouldNotBeCalled();
88    }
89
90    public Acceptor getAcceptor () {
91        return acceptor;
92    }
93
94    public void put(Acceptor acceptor, Connection connection)
95    {
96        if (orb.transportDebugFlag) {
97            dprint(".put: " + acceptor + " " + connection);
98        }
99        synchronized (backingStore()) {
100            connectionCache.add(connection);
101            connection.setConnectionCache(this);
102            dprintStatistics();
103        }
104    }
105
106    public void remove(Connection connection)
107    {
108        if (orb.transportDebugFlag) {
109            dprint(".remove: " +  connection);
110        }
111        synchronized (backingStore()) {
112            connectionCache.remove(connection);
113            dprintStatistics();
114        }
115    }
116
117    ////////////////////////////////////////////////////
118    //
119    // Implementation
120    //
121
122    public Collection values()
123    {
124        return connectionCache;
125    }
126
127    protected Object backingStore()
128    {
129        return connectionCache;
130    }
131
132    protected void registerWithMonitoring()
133    {
134        // ORB
135        MonitoredObject orbMO =
136            orb.getMonitoringManager().getRootMonitoredObject();
137
138        // REVISIT - add ORBUtil mkdir -p like operation for this.
139
140        // CONNECTION
141        MonitoredObject connectionMO =
142            orbMO.getChild(MonitoringConstants.CONNECTION_MONITORING_ROOT);
143        if (connectionMO == null) {
144            connectionMO =
145                MonitoringFactories.getMonitoredObjectFactory()
146                    .createMonitoredObject(
147                        MonitoringConstants.CONNECTION_MONITORING_ROOT,
148                        MonitoringConstants.CONNECTION_MONITORING_ROOT_DESCRIPTION);
149            orbMO.addChild(connectionMO);
150        }
151
152        // INBOUND CONNECTION
153        MonitoredObject inboundConnectionMO =
154            connectionMO.getChild(
155                MonitoringConstants.INBOUND_CONNECTION_MONITORING_ROOT);
156        if (inboundConnectionMO == null) {
157            inboundConnectionMO =
158                MonitoringFactories.getMonitoredObjectFactory()
159                    .createMonitoredObject(
160                        MonitoringConstants.INBOUND_CONNECTION_MONITORING_ROOT,
161                        MonitoringConstants.INBOUND_CONNECTION_MONITORING_ROOT_DESCRIPTION);
162            connectionMO.addChild(inboundConnectionMO);
163        }
164
165        // NODE FOR THIS CACHE
166        MonitoredObject thisMO =
167            inboundConnectionMO.getChild(getMonitoringName());
168        if (thisMO == null) {
169            thisMO =
170                MonitoringFactories.getMonitoredObjectFactory()
171                    .createMonitoredObject(
172                        getMonitoringName(),
173                        MonitoringConstants.CONNECTION_MONITORING_DESCRIPTION);
174            inboundConnectionMO.addChild(thisMO);
175        }
176
177        LongMonitoredAttributeBase attribute;
178
179        // ATTRIBUTE
180        attribute = new
181            LongMonitoredAttributeBase(
182                MonitoringConstants.CONNECTION_TOTAL_NUMBER_OF_CONNECTIONS,
183                MonitoringConstants.CONNECTION_TOTAL_NUMBER_OF_CONNECTIONS_DESCRIPTION)
184            {
185                public Object getValue() {
186                    return new Long(CorbaInboundConnectionCacheImpl.this.numberOfConnections());
187                }
188            };
189        thisMO.addAttribute(attribute);
190
191        // ATTRIBUTE
192        attribute = new
193            LongMonitoredAttributeBase(
194                MonitoringConstants.CONNECTION_NUMBER_OF_IDLE_CONNECTIONS,
195                MonitoringConstants.CONNECTION_NUMBER_OF_IDLE_CONNECTIONS_DESCRIPTION)
196            {
197                public Object getValue() {
198                    return new Long(CorbaInboundConnectionCacheImpl.this.numberOfIdleConnections());
199                }
200            };
201        thisMO.addAttribute(attribute);
202
203        // ATTRIBUTE
204        attribute = new
205            LongMonitoredAttributeBase(
206                MonitoringConstants.CONNECTION_NUMBER_OF_BUSY_CONNECTIONS,
207                MonitoringConstants.CONNECTION_NUMBER_OF_BUSY_CONNECTIONS_DESCRIPTION)
208            {
209                public Object getValue() {
210                    return new Long(CorbaInboundConnectionCacheImpl.this.numberOfBusyConnections());
211                }
212            };
213        thisMO.addAttribute(attribute);
214    }
215
216    protected void dprint(String msg)
217    {
218        ORBUtility.dprint("CorbaInboundConnectionCacheImpl", msg);
219    }
220}
221
222// End of file.
223