KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > enterprise > connectors > work > monitor > ConnectorWorkMonitoringLevelListener


1 /*
2  * The contents of this file are subject to the terms
3  * of the Common Development and Distribution License
4  * (the License). You may not use this file except in
5  * compliance with the License.
6  *
7  * You can obtain a copy of the license at
8  * https://glassfish.dev.java.net/public/CDDLv1.0.html or
9  * glassfish/bootstrap/legal/CDDLv1.0.txt.
10  * See the License for the specific language governing
11  * permissions and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL
14  * Header Notice in each file and include the License file
15  * at glassfish/bootstrap/legal/CDDLv1.0.txt.
16  * If applicable, add the following below the CDDL Header,
17  * with the fields enclosed by brackets [] replaced by
18  * you own identifying information:
19  * "Portions Copyrighted [year] [name of copyright owner]"
20  *
21  * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
22  */

23 package com.sun.enterprise.connectors.work.monitor;
24
25 import java.security.AccessController JavaDoc;
26 import java.security.PrivilegedAction JavaDoc;
27 import java.util.logging.Level JavaDoc;
28 import java.util.logging.Logger JavaDoc;
29
30 import javax.management.j2ee.statistics.Stats JavaDoc;
31
32 import com.sun.enterprise.admin.monitor.registry.MonitoredObjectType;
33 import com.sun.enterprise.admin.monitor.registry.MonitoringLevel;
34 import com.sun.enterprise.admin.monitor.registry.MonitoringLevelListener;
35 import com.sun.enterprise.admin.monitor.registry.MonitoringRegistry;
36 import com.sun.enterprise.connectors.ActiveInboundResourceAdapter;
37 import com.sun.enterprise.connectors.ActiveResourceAdapter;
38 import com.sun.enterprise.connectors.ConnectorAdminServiceUtils;
39 import com.sun.enterprise.connectors.ConnectorConstants;
40 import com.sun.enterprise.connectors.ConnectorRegistry;
41 import com.sun.enterprise.server.ApplicationServer;
42 import com.sun.enterprise.server.ResourcesUtil;
43 import com.sun.enterprise.server.ServerContext;
44 import com.sun.logging.LogDomains;
45
46 /**
47  * Provides an implementation of the MonitoringLevelListener interface to
48  * receive callbacks from admin regarding change in the monitoring level.
49  * Though there are 3 monitoring levels defined by JSR77, we support
50  * only 2 levels - OFF and ON (HIGH/LOW). So essentially, HIGH and LOW
51  * for us is only ON
52  *
53  * @since s1aspe 8.1
54  * @author Sivakumar Thyagarajan
55  */

56 public class ConnectorWorkMonitoringLevelListener implements
57                     MonitoringLevelListener {
58
59     private static Logger JavaDoc _logger = LogDomains.getLogger(
60                     LogDomains.RSR_LOGGER );
61     private MonitoringRegistry registry_;
62
63     /**
64      * @see com.sun.enterprise.admin.monitor.registry.MonitoringLevelListener#setLevel(com.sun.enterprise.admin.monitor.registry.MonitoringLevel)
65      * @deprecated
66      */

67     public void setLevel(MonitoringLevel level) {
68     }
69
70     /**
71      * @see com.sun.enterprise.admin.monitor.registry.MonitoringLevelListener#changeLevel(com.sun.enterprise.admin.monitor.registry.MonitoringLevel, com.sun.enterprise.admin.monitor.registry.MonitoringLevel, javax.management.j2ee.statistics.Stats)
72      * @deprecated
73      */

74     public void changeLevel(MonitoringLevel from, MonitoringLevel to,
75                     Stats JavaDoc handback) {
76     }
77
78     public void changeLevel(MonitoringLevel from, MonitoringLevel to,
79                     MonitoredObjectType type) {
80         if ( from == to ) {
81             //Its a no-op, so return
82
return;
83         }
84
85         AccessController.doPrivileged(new PrivilegedAction JavaDoc() {
86             public Object JavaDoc run() {
87                 ServerContext ctxt = ApplicationServer.getServerContext();
88                 if (ctxt != null ) {
89                     registry_ = ctxt.getMonitoringRegistry();
90                 }
91                 return null;
92             }
93        });
94
95         if (from == MonitoringLevel.OFF ) {
96             if (to == MonitoringLevel.HIGH || to == MonitoringLevel.LOW ) {
97                 switchOnMonitoring();
98             }
99         }
100
101         if (from == MonitoringLevel.HIGH || from == MonitoringLevel.LOW ) {
102             if ( to == MonitoringLevel.OFF ) {
103                 switchOffMonitoring();
104             }
105         }
106     }
107
108     /**
109      * Switch OFF Monitoring for Connector work management
110      */

111     private void switchOffMonitoring() {
112         if ( _logger.isLoggable(Level.FINE) ) {
113            _logger.fine("Switching level form ON to OFF");
114         }
115         
116         //deregister
117
AccessController.doPrivileged( new PrivilegedAction JavaDoc() {
118             public Object JavaDoc run() {
119                 ActiveResourceAdapter[] allRAs = ConnectorRegistry.
120                             getInstance().getAllActiveResourceAdapters();
121                 if ( allRAs == null ) {
122                     return null;
123                 }
124
125                 ActiveInboundResourceAdapter inboundRA = null;
126                 for (int i = 0; i < allRAs.length; i++ ) {
127                     if ( allRAs[i] != null
128                                     && allRAs[i] instanceof ActiveInboundResourceAdapter) {
129                         try{
130                             inboundRA = (ActiveInboundResourceAdapter)allRAs[i];
131                             String JavaDoc moduleName = inboundRA.getModuleName();
132                             
133                             registry_.unregisterConnectorWorkMgmtStats(
134                                             ConnectorAdminServiceUtils.getApplicationName(moduleName),
135                                             ConnectorAdminServiceUtils.getConnectorModuleName(moduleName),
136                                             ConnectorAdminServiceUtils.isJMSRA(moduleName));
137
138                             //disable work mgmt monitoring
139
setWorkManagementMonitoring(inboundRA, false);
140                         } catch( Exception JavaDoc mre ) {
141                             _logger.log( Level.INFO, "poolmon.cannot_unreg");
142                         }
143                     }
144                 }
145                 return null;
146             }
147         });
148     }
149
150     /**
151      * Switch on Monitoring for Connector work management
152      */

153     private void switchOnMonitoring() {
154         if ( _logger.isLoggable(Level.FINE) ) {
155            _logger.fine("Switching level form OFF to ON");
156         }
157         
158         AccessController.doPrivileged( new PrivilegedAction JavaDoc() {
159             public Object JavaDoc run() {
160                 ActiveResourceAdapter[] allRAs = ConnectorRegistry.
161                             getInstance().getAllActiveResourceAdapters();
162                 if ( allRAs == null ) {
163                     return null;
164                 }
165                 
166                 ActiveInboundResourceAdapter inboundRA = null;
167
168                 for (int i = 0; i < allRAs.length; i++ ) {
169                         if ( allRAs[i] != null
170                                         && allRAs[i] instanceof ActiveInboundResourceAdapter) {
171                             try{
172                                 
173                                 inboundRA = (ActiveInboundResourceAdapter)allRAs[i];
174                                 ConnectorWorkMgmtStatsImpl workstatsimpl =
175                                     new ConnectorWorkMgmtStatsImpl(inboundRA);
176                                 String JavaDoc moduleName = inboundRA.getModuleName();
177
178                                 //@todo :: after MBeans are modified
179
//Dont register system RARs as of now until MBean changes are complete.
180
if (ResourcesUtil.getInstance().belongToSystemRar(moduleName)) {
181                                     if (!ConnectorAdminServiceUtils.isJMSRA(moduleName)) {
182                                         continue;
183                                     }
184                                 }
185                                 
186                                 //enable work mgmt monitoring
187
setWorkManagementMonitoring(inboundRA, true);
188                                 
189                                 registry_.registerConnectorWorkMgmtStats(
190                                            workstatsimpl,
191                                            ConnectorAdminServiceUtils.getApplicationName(moduleName),
192                                            ConnectorAdminServiceUtils.getConnectorModuleName(moduleName),
193                                            ConnectorAdminServiceUtils.isJMSRA(moduleName),
194                                            null);
195                               
196                             } catch (Exception JavaDoc mre) {
197                                 _logger.log( Level.WARNING, "poolmon.cannot_reg",
198                                                 mre.getMessage() );
199                             }
200                         }
201                 }
202                 return null;
203             }
204         });
205     }
206
207     private void setWorkManagementMonitoring(ActiveInboundResourceAdapter
208                     adapter, boolean isEnabled) {
209         MonitorableWorkManager mwm = (MonitorableWorkManager)adapter.
210                                         getBootStrapContext().getWorkManager();
211         mwm.setMonitoringEnabled(isEnabled);
212     }
213     
214 }
215
Popular Tags