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
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
00102
00103 logger.log(BasicLevel.DEBUG, "Cannot get MBean server, client mode ? no jmx registration");
00104 } catch (Error err) {
00105
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
00198 String xml = securityService.toXML();
00199 ReconfiguredXml reconfiguredXml = new ReconfiguredXml(xml);
00200
00201
00202 sendReconfigNotification(getSequenceNumber(), name, reconfiguredXml);
00203 sendSaveNotification(getSequenceNumber(), name);
00204
00205
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 }