DiscoveryManager.java

00001 
00022 package org.objectweb.jonas.discovery;
00023 
00027 import javax.management.JMException;
00028 import javax.management.MBeanRegistration;
00029 import javax.management.MBeanServer;
00030 import javax.management.MBeanServerNotification;
00031 import javax.management.Notification;
00032 import javax.management.NotificationListener;
00033 import javax.management.ObjectName;
00034 import javax.management.remote.JMXServiceURL;
00035 
00036 import org.objectweb.jonas.jmx.J2eeObjectName;
00037 
00045 public class DiscoveryManager implements
00046     DiscoveryManagerMBean,
00047     MBeanRegistration,
00048     NotificationListener {
00049 
00053     private int           listeningPort;
00057     private String        listeningIp;
00062     private DiscoveryComm dc;
00066     private Thread        commDaemon;
00070     private MBeanServer   mbeanServer;
00071     private ObjectName    myOn;
00072     private int           ttl = 1;
00073 
00074     private String jonasName = null;
00075     private String domainName = null;
00076     private String[] urls = null;
00077 
00081     public DiscoveryManager(int listeningPort, String listeningIp) {
00082       this.listeningIp = listeningIp;
00083       this.listeningPort = listeningPort;
00084     }
00085 
00086     /*
00087      * (non-Javadoc)
00088      *
00089      * @see org.objectweb.jonas.server.discovery.DiscoveryManagerMBean#start()
00090      */
00091 
00092     public void start() {
00093 
00094         // creates an instance of the Discovery communication class
00095         dc = new DiscoveryComm(this);
00096         dc.setJonasName(jonasName);
00097         dc.setDomainName(domainName);
00098         dc.setUrls(urls);
00099 
00100         if (commDaemon == null)
00101             commDaemon = new Thread(dc, "commDaemon");
00102         commDaemon.start();
00103     }
00104 
00109     public int getListeningPort() {
00110         return listeningPort;
00111     }
00112 
00118     public void setListeningPort(int listeningPort) {
00119         this.listeningPort = listeningPort;
00120 
00121     }
00122 
00126     public String getListeningIp() {
00127         return listeningIp;
00128     }
00129 
00134     public void setListeningIp(String listeningIp) {
00135         this.listeningIp = listeningIp;
00136 
00137     }
00138 
00143     public void setTimeToLive(int ttl) {
00144         this.ttl = ttl;
00145     }
00146 
00150     public int getTimeToLive() {
00151         return this.ttl;
00152     }
00153 
00158     public ObjectName preRegister(MBeanServer mbeanServer, ObjectName on) throws Exception {
00159         // set mbeanServer
00160         this.mbeanServer = mbeanServer;
00161         this.myOn = on;
00162 
00163         return myOn;
00164     }
00165 
00170     public void postRegister(Boolean arg0) {
00171       // Add discovery manager as a listener of the delegate object to receive unregistration notification of the j2EEServer.
00172       ObjectName delegate;
00173       try {
00174         delegate = new ObjectName("JMImplementation:type=MBeanServerDelegate");
00175         mbeanServer.addNotificationListener(delegate, this, null, null);
00176       } catch (JMException e) {
00177         e.printStackTrace();
00178       }
00179     }
00180 
00184     public void preDeregister() throws Exception {
00185         // stop the communication Daemon
00186         dc.stop();
00187     }
00188 
00192     public void postDeregister() {
00193 
00194     }
00195 
00201     public void handleNotification(Notification notification, Object handback) {
00202         if (notification.getType().equals(MBeanServerNotification.UNREGISTRATION_NOTIFICATION)) {
00203             ObjectName notificationSender = ((MBeanServerNotification) notification).getMBeanName();
00204             ObjectName j2eeServerName = J2eeObjectName.J2EEServer(domainName, jonasName);
00205             if (notificationSender.equals(j2eeServerName)) {
00206                 dc.stop();
00207             }
00208         }
00209     }
00210 
00214     protected void setJonasName(String jonasName) {
00215         this.jonasName = jonasName;
00216     }
00220     protected void setDomainName(String domainNamle) {
00221         this.domainName = domainNamle;
00222     }
00226     protected void setUrls(String[] urls) {
00227         this.urls = urls;
00228     }
00229 
00233     public void stop() {
00234         dc.stop();
00235     }
00236 }

Generated on Tue Feb 15 15:05:15 2005 for JOnAS by  doxygen 1.3.9.1