bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington/*
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Copyright (c) 2005 Sun Microsystems Inc. All Rights Reserved
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * The contents of this file are subject to the terms
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * of the Common Development and Distribution License
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * (the License). You may not use this file except in
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * compliance with the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * You can obtain a copy of the License at
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * opensso/legal/CDDLv1.0.txt
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * See the License for the specific language governing
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * permission and limitations under the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * When distributing Covered Code, include this CDDL
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Header Notice in each file and include the License file
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * at opensso/legal/CDDLv1.0.txt.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * If applicable, add the following below the CDDL Header,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * with the fields enclosed by brackets [] replaced by
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * your own identifying information:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * $Id: ServerGroup.java,v 1.5 2009/01/28 05:34:49 ww203982 Exp $
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * Portions Copyrighted 2011-2015 ForgeRock AS.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpackage com.iplanet.services.ldap;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport com.iplanet.services.util.GenericNode;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport com.iplanet.services.util.ParseOutput;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport com.iplanet.services.util.XMLException;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport com.iplanet.services.util.XMLParser;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport com.iplanet.ums.IUMSConstants;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.ArrayList;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Collection;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.HashMap;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Hashtable;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Vector;
9d1321897216c79ea0639b6d8e0f92d0565876b6Jason Lemayimport com.sun.identity.shared.Constants;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunningtonimport org.forgerock.opendj.ldap.DN;
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.List;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpublic class ServerGroup implements ParseOutput {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Not to be called. This is a method to be called by the parser to read the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * xml information.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public void process(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster XMLParser parser,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String name,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Vector elems,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Hashtable atts,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String Pcdata
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ) throws XMLException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (DSConfigMgr.debugger.messageEnabled()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster DSConfigMgr.debugger.message("in ServerGroup.process()");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (name.equals(DSConfigMgr.SERVERGROUP)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // get the group ID.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster groupName = (String) atts.get(DSConfigMgr.NAME);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Get the Servers
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < elems.size(); i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Object obj = elems.elementAt(i);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (DSConfigMgr.debugger.messageEnabled()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster DSConfigMgr.debugger.message("Object of type:"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster + obj.getClass().getName());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (obj instanceof Server) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (servers == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (DSConfigMgr.debugger.messageEnabled()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster DSConfigMgr.debugger
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .message("Initializing servers list.");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster servers = new ArrayList<Server>();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster servers.add((Server) obj);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (obj instanceof LDAPUser) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (users == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster users = new ArrayList();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster users.add(obj);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (obj instanceof GenericNode) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // if it is generic node, its probably the base dn.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster GenericNode x = (GenericNode) obj;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (x._name.equals(DSConfigMgr.BASE_DN)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (x._pcdata != null) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington if (DN.valueOf(x._pcdata).size() <= 0) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throw new XMLException(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster DSConfigMgr.getString(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster IUMSConstants.DSCFG_INVALID_BASE_DN)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster + x._pcdata);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington baseDN = DN.valueOf(x._pcdata).toString();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (x._name.equals(DSConfigMgr.MISC_CONFIG)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String attrName = (String) x._atts
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .get(DSConfigMgr.NAME);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String attrValue = (String) x._atts
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .get(DSConfigMgr.VALUE);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (name != null && name.length() > 0) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (miscConfig == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster miscConfig = new HashMap();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster miscConfig.put(attrName, attrValue);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (servers == null || baseDN == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String errorMsg = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (servers == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster errorMsg = "No server object found in the server group:"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster + groupName;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (baseDN == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster errorMsg = "No base DN string defined in the server group:"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster + groupName;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throw new XMLException(errorMsg);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Get the rest of the attributes
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String maxConnPoolStr = System.getProperty("max_conn_pool");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (maxConnPoolStr == null)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster maxConnPoolStr = (String) atts.get(DSConfigMgr.MAX_CONN_POOL);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String minConnPoolStr = System.getProperty("min_conn_pool");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (minConnPoolStr == null)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster minConnPoolStr = (String) atts.get(DSConfigMgr.MIN_CONN_POOL);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster maxConnPool = Integer.parseInt(maxConnPoolStr);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (NumberFormatException ex) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster maxConnPool = 10;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster minConnPool = Integer.parseInt(minConnPoolStr);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (NumberFormatException ex) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster minConnPool = 1;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
9d1321897216c79ea0639b6d8e0f92d0565876b6Jason Lemay String ldapHeartbeatStr = System.getProperty(Constants.LDAP_HEARTBEAT);
9d1321897216c79ea0639b6d8e0f92d0565876b6Jason Lemay if (ldapHeartbeatStr == null)
9d1321897216c79ea0639b6d8e0f92d0565876b6Jason Lemay ldapHeartbeatStr = (String) atts.get(Constants.LDAP_HEARTBEAT);
9d1321897216c79ea0639b6d8e0f92d0565876b6Jason Lemay
9d1321897216c79ea0639b6d8e0f92d0565876b6Jason Lemay try {
9d1321897216c79ea0639b6d8e0f92d0565876b6Jason Lemay ldapHeartbeat = Integer.parseInt(ldapHeartbeatStr);
9d1321897216c79ea0639b6d8e0f92d0565876b6Jason Lemay } catch (NumberFormatException ex) {
9d1321897216c79ea0639b6d8e0f92d0565876b6Jason Lemay ldapHeartbeat = 10;
9d1321897216c79ea0639b6d8e0f92d0565876b6Jason Lemay }
9d1321897216c79ea0639b6d8e0f92d0565876b6Jason Lemay
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throw new XMLException(DSConfigMgr
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .getString(IUMSConstants.DSCFG_SERVERGROUP_NODE_EXPECTED));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Put it in the list of groups.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster parser.getGroupContainer().put(groupName, this);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Get the server instance that's currently active.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param authType
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Defined in LDAPUser.java there are four types of users.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return ServerInstance The active instance is returned. If no instance is
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * active, null is returned.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @see LDAPUser.Type
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public ServerInstance getServerInstance(LDAPUser.Type authType) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Server serv = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < servers.size(); i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster serv = servers.get(i);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (serv != null && serv.getActiveStatus() == true) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster break;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster LDAPUser user = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < users.size(); i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster user = (LDAPUser) users.get(i);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (user != null && user.getAuthType().equals(authType)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster break;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((serv != null) && (user != null)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return new ServerInstance(this, serv, user);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public String serverGroupName() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return groupName;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public String toString() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster StringBuilder buf = new StringBuilder();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buf.append("Server Group Name=");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buf.append(groupName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < users.size(); i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buf.append('\n');
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buf.append(' ');
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buf.append(users.get(i).toString());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < servers.size(); i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buf.append('\n');
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buf.append(' ');
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buf.append(servers.get(i).toString());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buf.append("Min Connection Pool=");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buf.append(minConnPool);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buf.append(" Max Connection Pool=");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buf.append(maxConnPool);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return buf.toString();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * The list of servers that are defined in this server group.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington public Collection<Server> getServersList() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return servers;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
9d1321897216c79ea0639b6d8e0f92d0565876b6Jason Lemay public int getLdapHeartbeat() {
9d1321897216c79ea0639b6d8e0f92d0565876b6Jason Lemay return ldapHeartbeat;
9d1321897216c79ea0639b6d8e0f92d0565876b6Jason Lemay }
9d1321897216c79ea0639b6d8e0f92d0565876b6Jason Lemay
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String baseDN = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int maxConnPool = -1;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int minConnPool = -1;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster List<Server> servers = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster List users = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster HashMap miscConfig = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String groupName;
9d1321897216c79ea0639b6d8e0f92d0565876b6Jason Lemay
9d1321897216c79ea0639b6d8e0f92d0565876b6Jason Lemay private int ldapHeartbeat;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster}