You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2003/03/17 20:22:07 UTC
cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core StandardServer.java StandardService.java mbeans-descriptors.xml
costin 2003/03/17 11:22:07
Modified: catalina/src/share/org/apache/catalina/core
StandardServer.java StandardService.java
mbeans-descriptors.xml
Log:
Get the server, service self-register.
Add "serviceNames" attribute in server - this should be used instead of casting and
calling the methods directly.
In order for /admin to be used for clusters it is essential to _stop_ using any
internal tomcat class in the admin. Just do a grep o.a.catalina in admin -
it shouldn't find any import. Only JMX should be used !
The names should be stable.
Revision Changes Path
1.13 +78 -10 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardServer.java
Index: StandardServer.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardServer.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- StandardServer.java 3 Feb 2003 23:05:48 -0000 1.12
+++ StandardServer.java 17 Mar 2003 19:22:07 -0000 1.13
@@ -87,8 +87,18 @@
import java.util.Random;
import javax.naming.directory.DirContext;
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanException;
+import javax.management.RuntimeOperationsException;
+import javax.management.ObjectName;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.MBeanRegistration;
import org.apache.commons.beanutils.PropertyUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.modeler.Registry;
import org.apache.catalina.Connector;
import org.apache.catalina.Container;
@@ -137,8 +147,10 @@
*/
public final class StandardServer
- implements Lifecycle, Server {
-
+ implements Lifecycle, Server, MBeanRegistration
+ {
+ private static Log log = LogFactory.getLog(StandardServer.class);
+
// -------------------------------------------------------------- Constants
@@ -619,6 +631,16 @@
return (services);
}
+
+ /** @jmx:attribute List services
+ */
+ public ObjectName[] getServiceNames() {
+ ObjectName onames[]=new ObjectName[ services.length ];
+ for( int i=0; i<services.length; i++ ) {
+ onames[i]=((StandardService)services[i]).getObjectName();
+ }
+ return onames;
+ }
/**
@@ -2331,21 +2353,67 @@
}
+ public void init() throws Exception {
+ initialize();
+ }
+
/**
* Invoke a pre-startup initialization. This is used to allow connectors
* to bind to restricted ports under Unix operating environments.
*/
public void initialize()
- throws LifecycleException {
- if (initialized)
- throw new LifecycleException (
- sm.getString("standardServer.initialize.initialized"));
+ throws LifecycleException
+ {
+ if (initialized) {
+ log.info(sm.getString("standardServer.initialize.initialized"));
+ return;
+ }
initialized = true;
+ if( oname==null ) {
+ try {
+ oname=new ObjectName( "Catalina:type=Server");
+ Registry.getRegistry().registerComponent(this, oname, null );
+ } catch (Exception e) {
+ log.error("Error registering ",e);
+ }
+ }
+
// Initialize our defined Services
for (int i = 0; i < services.length; i++) {
services[i].initialize();
}
}
+
+ protected String type;
+ protected String domain;
+ protected String suffix;
+ protected ObjectName oname;
+ protected MBeanServer mserver;
+ public ObjectName getObjectName() {
+ return oname;
+ }
+
+ public String getDomain() {
+ return domain;
+ }
+
+ public ObjectName preRegister(MBeanServer server,
+ ObjectName name) throws Exception {
+ oname=name;
+ mserver=server;
+ domain=name.getDomain();
+ return name;
+ }
+
+ public void postRegister(Boolean registrationDone) {
+ }
+
+ public void preDeregister() throws Exception {
+ }
+
+ public void postDeregister() {
+ }
+
}
1.3 +87 -16 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardService.java
Index: StandardService.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardService.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- StandardService.java 31 Jan 2003 21:02:08 -0000 1.2
+++ StandardService.java 17 Mar 2003 19:22:07 -0000 1.3
@@ -67,18 +67,23 @@
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
+import javax.management.MBeanRegistration;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
import org.apache.catalina.Connector;
import org.apache.catalina.Container;
import org.apache.catalina.Engine;
import org.apache.catalina.Lifecycle;
-import org.apache.catalina.LifecycleEvent;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.LifecycleListener;
import org.apache.catalina.Server;
import org.apache.catalina.Service;
+import org.apache.catalina.ServerFactory;
import org.apache.catalina.util.LifecycleSupport;
import org.apache.catalina.util.StringManager;
-import javax.management.ObjectName;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.modeler.Registry;
/**
@@ -91,8 +96,10 @@
*/
public class StandardService
- implements Lifecycle, Service {
-
+ implements Lifecycle, Service, MBeanRegistration
+ {
+ private static Log log = LogFactory.getLog(StandardService.class);
+
// ----------------------------------------------------- Instance Variables
@@ -497,15 +504,16 @@
// Validate and update our current component state
if (started) {
- throw new LifecycleException
- (sm.getString("standardService.start.started"));
+ log.info(sm.getString("standardService.start.started"));
}
+
+ if( ! initialized )
+ init();
// Notify our interested LifecycleListeners
lifecycle.fireLifecycleEvent(BEFORE_START_EVENT, null);
- System.out.println
- (sm.getString("standardService.start.name", this.name));
+ log.info(sm.getString("standardService.start.name", this.name));
lifecycle.fireLifecycleEvent(START_EVENT, null);
started = true;
@@ -586,18 +594,81 @@
* to bind to restricted ports under Unix operating environments.
*/
public void initialize()
- throws LifecycleException {
- if (initialized)
- throw new LifecycleException (
- sm.getString("standardService.initialize.initialized"));
+ throws LifecycleException
+ {
+ // Service shouldn't be used with embeded, so it doesn't matter
+ if (initialized) {
+ log.info(sm.getString("standardService.initialize.initialized"));
+ return;
+ }
initialized = true;
+ if( oname==null ) {
+ try {
+ // Hack - Server should be deprecated...
+ Container engine=this.getContainer();
+ domain=engine.getName();
+ oname=new ObjectName(domain + ":type=Service");
+ Registry.getRegistry().registerComponent(this, oname, null);
+ } catch (Exception e) {
+ log.error("Error registering ",e);
+ }
+
+
+ }
+ if( server==null ) {
+ // Register with the server
+ // HACK: ServerFactory should be removed...
+
+ ServerFactory.getServer().addService(this);
+ }
+
+
// Initialize our defined Connectors
synchronized (connectors) {
for (int i = 0; i < connectors.length; i++) {
connectors[i].initialize();
}
}
+ }
+
+ public void init() {
+ try {
+ initialize();
+ } catch( Throwable t ) {
+ t.printStackTrace();
+ }
+ }
+
+ protected String type;
+ protected String domain;
+ protected String suffix;
+ protected ObjectName oname;
+ protected MBeanServer mserver;
+
+ public ObjectName getObjectName() {
+ return oname;
+ }
+
+ public String getDomain() {
+ return domain;
+ }
+
+ public ObjectName preRegister(MBeanServer server,
+ ObjectName name) throws Exception {
+ oname=name;
+ mserver=server;
+ domain=name.getDomain();
+ return name;
+ }
+
+ public void postRegister(Boolean registrationDone) {
+ }
+
+ public void preDeregister() throws Exception {
+ }
+
+ public void postDeregister() {
}
}
1.2 +5 -0 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/mbeans-descriptors.xml
Index: mbeans-descriptors.xml
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/mbeans-descriptors.xml,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- mbeans-descriptors.xml 17 Mar 2003 06:45:32 -0000 1.1
+++ mbeans-descriptors.xml 17 Mar 2003 19:22:07 -0000 1.2
@@ -499,10 +499,15 @@
description="Shutdown password"
type="java.lang.String"/>
+ <attribute name="serviceNames"
+ description="Object names of all services we know about"
+ type="[Ljavax.management.ObjectName;"/>
+
<operation name="store"
description="Save current state to server.xml file"
impact="ACTION"
returnType="void">
+
</operation>
</mbean>
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org