Hi,
(Sending this to wider audience on
Siraj's suggestion)
I've modified GlassFish administration to
use pluggable feature factory to load a new monitoring manager. This
monitoring manager can be used to define custom register/unregister
methods for any new monitoring objects.
SailFin monitoring support will be
enabled using this feature.
Please review and let me know your
comments.
Thanks & Regards,
-Yamini
?
admin-core/admin/src/java/com/sun/enterprise/admin/pluggable/MonitoringManager.java
?
admin-core/admin/src/java/com/sun/enterprise/admin/pluggable/MonitoringManagerImpl.java
Index:
admin/monitor/src/java/com/sun/enterprise/admin/monitor/registry/spi/DottedNameFactory.java
===================================================================
RCS file:
/cvs/glassfish/admin/monitor/src/java/com/sun/enterprise/admin/monitor/registry/spi/DottedNameFactory.java,v
retrieving revision 1.4
diff -u -r1.4 DottedNameFactory.java
---
admin/monitor/src/java/com/sun/enterprise/admin/monitor/registry/spi/DottedNameFactory.java 5 May 2007
05:24:19 -0000 1.4
+++
admin/monitor/src/java/com/sun/enterprise/admin/monitor/registry/spi/DottedNameFactory.java 11 Oct 2007
09:01:51 -0000
@@ -68,7 +68,7 @@
*
@revision $Revision: 1.4 $
*/
-class DottedNameFactory {
+public final class DottedNameFactory {
private
static final Logger logger =
Logger.getLogger(AdminConstants.kLoggerName);
private
static final StringManager sm =
StringManager.getManager(DottedNameFactory.class);
private
static String instanceName =null;
@@ -379,4 +379,11 @@
}
//
JVM1.5 related changes - END
+ public
static String getDottedName(String name){
+
return getInstanceName() + DELIMITER + name;
+ }
+
+ public
static String getDottedName(String name, String type){
+
return getDottedName(type) + DELIMITER +
DottedName.escapePart(name);
+ }
}
Index:
admin/monitor/src/java/com/sun/enterprise/admin/monitor/registry/spi/MonitoringObjectNames.java
===================================================================
RCS file:
/cvs/glassfish/admin/monitor/src/java/com/sun/enterprise/admin/monitor/registry/spi/MonitoringObjectNames.java,v
retrieving revision 1.13
diff -u -r1.13 MonitoringObjectNames.java
---
admin/monitor/src/java/com/sun/enterprise/admin/monitor/registry/spi/MonitoringObjectNames.java 5 May 2007
05:24:19 -0000 1.13
+++
admin/monitor/src/java/com/sun/enterprise/admin/monitor/registry/spi/MonitoringObjectNames.java 11 Oct 2007
09:01:51 -0000
@@ -67,7 +67,7 @@
*
@since S1AS8.0
*
@version $Revision: 1.13 $
*/
-final class MonitoringObjectNames {
+public final class MonitoringObjectNames
{
private
static final String SERVER_ID =
ApplicationServer.getServerContext().getInstanceName();
private
static final Logger logger =
Logger.getLogger(AdminConstants.kLoggerName);
@@ -628,4 +628,17 @@
return(formObjectName(t));
}
//
JVM1.5 related changes - END
+
+ public
static ObjectName getMonitoredObjectName(String type) {
+
final Hashtable t = new Hashtable();
+
t.put("type", type);
+
return ( formObjectName(t) );
+ }
+
+ public
static ObjectName getMonitoredObjectName(String name, String type) {
+
final Hashtable t = new Hashtable();
+
t.put("type", type);
+
t.put("name", name);
+
return ( formObjectName(t) );
+ }
}
Index:
admin/monitor/src/java/com/sun/enterprise/admin/monitor/registry/spi/MonitoringRegistrationHelper.java
===================================================================
RCS file:
/cvs/glassfish/admin/monitor/src/java/com/sun/enterprise/admin/monitor/registry/spi/MonitoringRegistrationHelper.java,v
retrieving revision 1.14
diff -u -r1.14
MonitoringRegistrationHelper.java
---
admin/monitor/src/java/com/sun/enterprise/admin/monitor/registry/spi/MonitoringRegistrationHelper.java 5 May 2007
05:24:19 -0000 1.14
+++
admin/monitor/src/java/com/sun/enterprise/admin/monitor/registry/spi/MonitoringRegistrationHelper.java 11 Oct 2007
09:01:52 -0000
@@ -68,6 +68,11 @@
import
com.sun.enterprise.admin.monitor.registry.spi.reconfig.DynamicReconfigurator;
import
com.sun.enterprise.admin.monitor.registry.spi.reconfig.MonitoringConfigChangeListener;
import
com.sun.enterprise.server.stats.JVMStatsImpl;
+
+import
com.sun.enterprise.admin.server.core.AdminService;
+//import
com.sun.enterprise.server.ApplicationServer;
+import
com.sun.enterprise.admin.pluggable.MonitoringManager;
+
/**
*
Enables components to register their Stats implementation for
monitoring.
*
This implementation provides a way for a JSR77 Managed Component's
monitoring
@@ -995,6 +1000,7 @@
initializeJmsService();
initializeJndi();
//((StatsHolderImpl)rootStatsHolder).write();
+
initializeModuleMonitoring();
}
private
void initializeRoot() {
@@ -1864,4 +1870,11 @@
public
StatsHolder getRootStatsHolder() {
return rootStatsHolder;
}
+
+ private
void initializeModuleMonitoring() {
+
MonitoringManager mm = AdminService.getMonitoringFeature();
+//
MonitoringManager mm =
ApplicationServer.getServerContext().getPluggableFeatureFactory().getMonitoringManager();
+
+
mm.registerAllStats(rootStatsHolder);
+ }
}
Index:
admin-core/monitor/src/java/com/sun/enterprise/admin/monitor/registry/MonitoredObjectType.java
===================================================================
RCS file:
/cvs/glassfish/admin-core/monitor/src/java/com/sun/enterprise/admin/monitor/registry/MonitoredObjectType.java,v
retrieving revision 1.4
diff -u -r1.4 MonitoredObjectType.java
---
admin-core/monitor/src/java/com/sun/enterprise/admin/monitor/registry/MonitoredObjectType.java 5 May 2007
05:25:46 -0000 1.4
+++
admin-core/monitor/src/java/com/sun/enterprise/admin/monitor/registry/MonitoredObjectType.java 11 Oct 2007
09:01:55 -0000
@@ -299,4 +299,8 @@
MonitoredObjectType.HTTP_SERVICE,
MonitoredObjectType.HTTP_LISTENER,
MonitoredObjectType.VIRTUAL_SERVER};
+
+ public
static MonitoredObjectType newMonitoredObjectType(String name, boolean
isSingleton ) {
+
return (new MonitoredObjectType(name, isSingleton));
+ }
}
Index:
appserv-core/src/java/com/sun/enterprise/admin/server/core/AdminService.java
===================================================================
RCS file:
/cvs/glassfish/appserv-core/src/java/com/sun/enterprise/admin/server/core/AdminService.java,v
retrieving revision 1.31.2.1
diff -u -r1.31.2.1 AdminService.java
---
appserv-core/src/java/com/sun/enterprise/admin/server/core/AdminService.java 24 Sep 2007
06:20:47 -0000 1.31.2.1
+++
appserv-core/src/java/com/sun/enterprise/admin/server/core/AdminService.java 11 Oct 2007
09:02:14 -0000
@@ -102,6 +102,9 @@
//web
service
import
com.sun.enterprise.webservice.WsUtil;
+//monitoring manager
+import
com.sun.enterprise.admin.pluggable.MonitoringManager;
+
import
com.sun.enterprise.admin.AdminContext;
import
com.sun.enterprise.admin.meta.MBeanRegistry;
import
com.sun.enterprise.admin.meta.MBeanRegistryFactory;
@@ -199,6 +202,7 @@
private
final AutoDeployStarter autoDeployStarter = new AutoDeployStarter();
+ private
static MonitoringManager mManager = null;
/**
* private constructor. AdminService instance should be
initialized
@@ -237,11 +241,15 @@
if (ac instanceof AdminContextImpl) {
((AdminContextImpl)ac).setServerContext((ServerContextImpl)sc);
}
+
mManager =
sc.getPluggableFeatureFactory().getMonitoringManager();
as.setAdminContext(ac);
setAdminService(as);
return as;
}
+ public
static MonitoringManager getMonitoringFeature() {
+
return mManager;
+ }
/**
* Instantiate admin service. This method verifies that
specified type
* is a known type and then creates an admin service object
initialized
Index:
appserv-core/src/java/com/sun/enterprise/server/pluggable/PluggableFeatureFactory.java
===================================================================
RCS file:
/cvs/glassfish/appserv-core/src/java/com/sun/enterprise/server/pluggable/PluggableFeatureFactory.java,v
retrieving revision 1.8.6.1
diff -u -r1.8.6.1
PluggableFeatureFactory.java
---
appserv-core/src/java/com/sun/enterprise/server/pluggable/PluggableFeatureFactory.java 24 Sep 2007
06:24:14 -0000 1.8.6.1
+++
appserv-core/src/java/com/sun/enterprise/server/pluggable/PluggableFeatureFactory.java 11 Oct 2007
09:02:15 -0000
@@ -46,6 +46,8 @@
import
com.sun.enterprise.server.ss.ASLazyKernel;
import
com.sun.enterprise.autotxrecovery.TransactionRecovery;
import
com.sun.enterprise.diagnostics.DiagnosticAgent;
+
+import
com.sun.enterprise.admin.pluggable.MonitoringManager;
/**
*
The interface to provide access to supported Pluggable Features. The
*
various editions of the product may provide varied implementation for
@@ -162,4 +164,9 @@
*/
public
AdminExtensionFeature getAdminExtensionFeature();
+ /**
+
* Monitoring Extension Feature
+
*/
+ public
MonitoringManager getMonitoringManager();
+
}
/*
*
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
*
Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
*
*
The contents of this file are subject to the terms of either the GNU
*
General Public License Version 2 only ("GPL") or the Common Development
*
and Distribution License("CDDL") (collectively, the "License"). You
*
may not use this file except in compliance with the License. You can
obtain
*
or glassfish/bootstrap/legal/LICENSE.txt. See the License for the
specific
*
language governing permissions and limitations under the License.
*
*
When distributing the software, include this License Header Notice in
each
*
file and include the License file at
glassfish/bootstrap/legal/LICENSE.txt.
*
Sun designates this particular file as subject to the "Classpath"
exception
*
as provided by Sun in the GPL Version 2 section of the License file that
*
accompanied this code. If
applicable, add the following below the License
*
Header, with the fields enclosed by brackets [] replaced by your own
*
identifying information: "Portions Copyrighted [year]
*
[name of copyright owner]"
*
*
Contributor(s):
*
*
If you wish your version of this file to be governed by only the CDDL or
*
only the GPL Version 2, indicate your decision by adding "[Contributor]
*
elects to include this software in this distribution under the [CDDL or
GPL
*
Version 2] license." If
you don't indicate a single choice of license, a
*
recipient has the option to distribute your version of this file under
*
either the CDDL, the GPL Version 2 or to extend the choice of license to
*
its licensees as provided above. However,
if you add GPL Version 2 code
*
and therefore, elected the GPL Version 2 license, then the option
applies
*
only if the new code is made subject to such option by the copyright
*
holder.
*/
package
com.sun.enterprise.admin.pluggable;
import
com.sun.enterprise.admin.monitor.registry.StatsHolder;
/**
*
Interface for adding monitoring extensions
*
*/
public interface MonitoringManager {
/*
*
Implement this to register any stats implementation classes
*/
public
void registerAllStats(StatsHolder rootStatsHolder);
}
/*
*
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
*
Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
*
*
The contents of this file are subject to the terms of either the GNU
*
General Public License Version 2 only ("GPL") or the Common Development
*
and Distribution License("CDDL") (collectively, the "License"). You
*
may not use this file except in compliance with the License. You can
obtain
*
or glassfish/bootstrap/legal/LICENSE.txt. See the License for the
specific
*
language governing permissions and limitations under the License.
*
*
When distributing the software, include this License Header Notice in
each
*
file and include the License file at
glassfish/bootstrap/legal/LICENSE.txt.
*
Sun designates this particular file as subject to the "Classpath"
exception
*
as provided by Sun in the GPL Version 2 section of the License file that
*
accompanied this code. If
applicable, add the following below the License
*
Header, with the fields enclosed by brackets [] replaced by your own
*
identifying information: "Portions Copyrighted [year]
*
[name of copyright owner]"
*
*
Contributor(s):
*
*
If you wish your version of this file to be governed by only the CDDL or
*
only the GPL Version 2, indicate your decision by adding "[Contributor]
*
elects to include this software in this distribution under the [CDDL or
GPL
*
Version 2] license." If
you don't indicate a single choice of license, a
*
recipient has the option to distribute your version of this file under
*
either the CDDL, the GPL Version 2 or to extend the choice of license to
*
its licensees as provided above. However,
if you add GPL Version 2 code
*
and therefore, elected the GPL Version 2 license, then the option
applies
*
only if the new code is made subject to such option by the copyright
*
holder.
*/
package
com.sun.enterprise.admin.pluggable;
import
com.sun.enterprise.admin.monitor.registry.StatsHolder;
/**
*
Default implementation for adding monitoring extensions
*
*/
public class MonitoringManagerImpl
implements MonitoringManager {
/*
*
Dummy implementation
*/
public
void registerAllStats(StatsHolder rootStatsHolder) {
//
no-op
}
}
---------------------------------------------------------------------