JResource.java

00001 
00027 package org.objectweb.jonas.security.realm.factory;
00028 
00029 import java.io.Serializable;
00030 import java.util.ArrayList;
00031 import java.util.Hashtable;
00032 import javax.management.MBeanServer;
00033 import javax.naming.Context;
00034 import javax.naming.InitialContext;
00035 import javax.naming.NamingException;
00036 import javax.naming.Reference;
00037 import javax.naming.Referenceable;
00038 
00039 import org.objectweb.jonas.security.SecurityService;
00040 import org.objectweb.jonas.service.ServiceManager;
00041 import org.objectweb.jonas.management.ReconfigDispatcher;
00042 import org.objectweb.jonas.management.ReconfiguredXml;
00043 
00044 //import objectweb.util
00045 import org.objectweb.util.monolog.api.Logger;
00046 import org.objectweb.util.monolog.api.BasicLevel;
00047 
00048 import org.objectweb.jonas.common.Log;
00049 import org.objectweb.jonas.jmx.JmxService;
00050 import org.objectweb.jonas.security.realm.principals.User;
00051 
00057 public abstract class JResource extends ReconfigDispatcher implements Serializable, Referenceable, JResourceMBean {
00058 
00062     private String name = null;
00063 
00067     private static Logger logger = Log.getLogger(Log.JONAS_SECURITY_PREFIX);
00068 
00072     private Hashtable users = null;
00073 
00077     private long sequenceNumber;
00078 
00082     private SecurityService securityService = null;
00083 
00087     private MBeanServer mbeanServer = null;
00088 
00093     public JResource() throws Exception {
00094         users = new Hashtable();
00095         sequenceNumber = 0;
00096         try {
00097             ServiceManager sm = ServiceManager.getInstance();
00098             securityService = (SecurityService) sm.getSecurityService();
00099             mbeanServer = ((JmxService) sm.getJmxService()).getJmxServer();
00100         } catch (Exception e) {
00101             // no save available
00102             // no MBeans
00103             logger.log(BasicLevel.DEBUG, "Cannot get MBean server, client mode ? no jmx registration");
00104         } catch (Error err) {
00105             // ServiceManager with JProp class not found
00106             logger.log(BasicLevel.DEBUG, "No services can be retrieved, client mode ?");
00107         }
00108 
00109     }
00110 
00115     public void setName(String name) {
00116         this.name = name;
00117     }
00118 
00123     public String getName() {
00124         return name;
00125     }
00126 
00131     protected MBeanServer getMBeanServer() {
00132         return mbeanServer;
00133     }
00134 
00143     public abstract Reference getReference() throws NamingException;
00144 
00149     public abstract void removeMBeans() throws JResourceException;
00150 
00157     public abstract User findUser(String name) throws JResourceException;
00158 
00165     public abstract boolean isValidUser(User user, String credentials);
00166 
00173     public abstract ArrayList getArrayListCombinedRoles(User user) throws JResourceException;
00174 
00179     public Hashtable getUsers() {
00180         return users;
00181     }
00182 
00187     protected long getSequenceNumber() {
00188         return ++sequenceNumber;
00189     }
00190 
00194     public void saveConfig() {
00195 
00196         if (securityService != null) {
00197             // Retrieve the xml value by the Security service
00198             String xml = securityService.toXML();
00199             ReconfiguredXml reconfiguredXml = new ReconfiguredXml(xml);
00200 
00201             // Send a reconfiguration notification to the listener MBean
00202             sendReconfigNotification(getSequenceNumber(), name, reconfiguredXml);
00203             sendSaveNotification(getSequenceNumber(), name);
00204 
00205             // rebind this resource into the jndi
00206             try {
00207                 Context ictx = new InitialContext();
00208                 ictx.rebind(getName(), this);
00209                 logger.log(BasicLevel.DEBUG, "jResource " + getName() + " is rebind into the registry.");
00210             } catch (NamingException e) {
00211                 logger.log(BasicLevel.ERROR, "Cannot rebind factory to the jndi : '" + e.getMessage() + "'");
00212             }
00213 
00214         }
00215     }
00216 
00220     public static Logger getLogger() {
00221         return logger;
00222     }
00226     public static void setLogger(Logger logger) {
00227         JResource.logger = logger;
00228     }
00232     public void setUsers(Hashtable users) {
00233         this.users = users;
00234     }
00235 
00239     public void clearCache() {
00240         setUsers(new Hashtable());
00241     }
00242 }

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