ServiceBase.java revision a82d04bc19fee9d5e34b41ccd7641da1f62ab634
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Copyright (c) 2008 Sun Microsystems Inc. All Rights Reserved
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The contents of this file are subject to the terms
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * of the Common Development and Distribution License
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * (the License). You may not use this file except in
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * compliance with the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * You can obtain a copy of the License at
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * See the License for the specific language governing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * permission and limitations under the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * When distributing Covered Code, include this CDDL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Header Notice in each file and include the License file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * If applicable, add the following below the CDDL Header,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * with the fields enclosed by brackets [] replaced by
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * your own identifying information:
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * $Id: ServiceBase.java,v 1.2 2009/01/28 05:34:58 ww203982 Exp $
ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpotts * Portions Copyrighted 2012-2015 ForgeRock AS.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpackage com.sun.identity.diagnostic.plugin.services.common;
ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpottsimport static org.forgerock.opendj.ldap.LDAPConnectionFactory.*;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.common.HttpURLConnectionManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.diagnostic.base.core.common.ToolConstants;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.idm.AMIdentityRepository;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.security.AdminTokenAction;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.opendj.ldap.ConnectionFactory;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.opendj.ldap.LDAPConnectionFactory;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.opendj.ldap.SSLContextBuilder;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.opendj.ldif.ConnectionEntryReader;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This is the base class for Server related functionality.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Any class that needs server specific methods can use this base
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic abstract class ServiceBase implements ToolConstants, ServiceConstants {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Helper method to return Admin token when the configuration
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * properties is initialized.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return Admin Token.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster adminToken = (SSOToken)AccessController.doPrivileged(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Helper method to load the config using the boot file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param bootPath filename location of the boot file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return properties of the configured server.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected Properties loadConfigFromBootfile(String bootPath)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.loadConfigFromBootfile : " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (isServerBootable((Map)getBootServers(bootPath))) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Helper method to retrive the boot servers from the boot file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param path filename location of the boot file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return map of the boot directory servers
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected Map<String, Map> getBootServers(String path)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws IOException, UnsupportedEncodingException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Helper method to retrive the boot instance from the boot list
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param bServers Map of available boot servers
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if server is bootable
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected boolean isServerBootable(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean match = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map <String, String> dsInstance = new HashMap<String, String>();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (Iterator<String> it = bServers.keySet().iterator();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws IOException, UnsupportedEncodingException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster BootstrapData bootstrapData = new BootstrapData(path);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (Iterator<String> i = list.iterator(); i.hasNext(); ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String instanceName = URLDecoder.decode(url.getPath(), "UTF-8");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsPort = Integer.toString(url.getPort());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster StringTokenizer st = new StringTokenizer(str, "&");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster map.put(s.substring(0, idx), URLDecoder.decode(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Method to check if the server instance is running
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param sName server instance name
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if server instance is running
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected static boolean isServerRunning(String sName) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean isSvrRunning = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster URLConnection uc = HttpURLConnectionManager.getConnection(new URL(sName)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster BufferedReader in = new BufferedReader(new InputStreamReader(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.isServerRunning : " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.isServerRunning : " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Method to check if the server instance is running
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param url server instance URL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if server instance is running
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected static boolean isServerRunning(URL url) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean isSvrRunning = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster URLConnection uc = HttpURLConnectionManager.getConnection(url);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster BufferedReader in = new BufferedReader(new InputStreamReader(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.isServerRunning : " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.isServerRunning : " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Method to connect to server instance
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param svrName server instance name
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if server instance can be connected
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected boolean connectToServer(String svrName)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws javax.net.ssl.SSLHandshakeException, Exception {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean connect = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster URLConnection svrConn = HttpURLConnectionManager.getConnection(u);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if (u.getProtocol().equalsIgnoreCase("https")) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster BufferedReader in = new BufferedReader(new InputStreamReader(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (javax.net.ssl.SSLHandshakeException ssle) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Helper method to construct the URL from properties.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param prop properties of the server instance
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return string representing the URL of the instance
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected String getURLStrFromProperties(Properties prop) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String hostname = prop.getProperty(AM_SERVER_HOST);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String port = prop.getProperty(AM_SERVER_PORT);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String protocol = prop.getProperty(AM_SERVER_PROTOCOL);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String uri = prop.getProperty(AM_SERVICES_DEPLOYMENT_DESCRIPTOR);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster propURL = protocol + "://" + hostname + ":" + port + uri;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Helper method to construct the URL from properties.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param mProp map of server instance properties
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return string representing the URL of the instance
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public String getURLStrFromProperties(Map mProp) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String hostname = (String)mProp.get(AM_SERVER_HOST);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String port = (String)mProp.get(AM_SERVER_PORT);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String protocol = (String)mProp.get(AM_SERVER_PROTOCOL);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String uri = (String)mProp.get(AM_SERVICES_DEPLOYMENT_DESCRIPTOR);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster propURL = protocol + "://" + hostname + ":" + port + uri;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Read the properties file and initialize the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Map with the properties.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param pName name of resource bundle to load the properties
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return map of properties loaded from a resource bundle
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected static Map loadPropertiesToMap(String pName) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map<String, String> propMap = new HashMap<String, String>();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ResourceBundle rb = ResourceBundle.getBundle(pName);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (Enumeration e = rb.getKeys(); e.hasMoreElements(); ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Read the properties file and initialize the
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Map with the properties.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param prop object containing properties
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return map of properties loaded from properties object
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected static Map loadPropertiesToMap(Properties prop) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map<String, String> propMap = new HashMap<String, String>();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (Enumeration e = prop.propertyNames(); e.hasMoreElements(); ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster propMap.put(key, (String)prop.getProperty(key));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Method to check if the host name is valid
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param hName name of the host
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if host name can be resolved
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean valid = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.isValidHost: " + e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Method to check if the port is valid
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param port Port of the host
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if host name can be resolved
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean valid = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Helper method to clear the cache
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static boolean doRefresh(SSOToken ssoToken) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean valid = true;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ServiceManager svcMgr = new ServiceManager(ssoToken);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns a LDAP connection to the directory host.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param dsHostName name of the sever where DS is installed
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param dsPort port at which the directory server is listening
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param dsProtocol protocol used by directory server
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param dsManager admin user name for directory server
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param dsAdminPwd admin password used by admin user name
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return LDAP connection
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected static Connection getLDAPConnection(String dsHostName, int dsPort, String dsProtocol, String dsManager,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // All connections will use authentication
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster .set(CONNECT_TIMEOUT, new Duration((long)3, TimeUnit.SECONDS))
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster .set(AUTHN_BIND_REQUEST, LDAPRequests.newSimpleBindRequest(dsManager, dsAdminPwd.toCharArray()));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster options = options.set(SSL_CONTEXT, new SSLContextBuilder().getSSLContext());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ConnectionFactory factory = new LDAPConnectionFactory(dsHostName, dsPort, options);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Returns a LDAP connection to the directory host.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param paramMap Map containing directory specific information
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return LDAP connection
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Connection getLDAPConnection(Map paramMap) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsHost = (String) paramMap.get(DS_HOST);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsPort = (String) paramMap.get(DS_PORT);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsProtocol = (String) paramMap.get(DS_PROTOCOL);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster dsPwd = Crypt.decode(dsPwd, Crypt.getHardcodedKeyEncryptor());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return getLDAPConnection(dsHost, getPort(dsPort), dsProtocol, dsMgr, dsPwd);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Check if Directory Server has the suffix.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if specified suffix exists.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected static boolean connectDSwithDN(Connection ld, String suffix) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try (ConnectionEntryReader reader = ld.search(LDAPRequests.newSearchRequest(suffix, SearchScope.BASE_OBJECT,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Check if Directory Server is running.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if directory is running.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected static boolean isDSServerUp(String dsHostName, int dsPort, String dsProtocol, String dsManager,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try (Connection conn = getLDAPConnection(dsHostName, dsPort, dsProtocol, dsManager, dsAdminPwd)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return true;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Check if config Directory Server is running.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if config directory is running.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected boolean isDSRunning(Map instanceMap) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsHost = (String)instanceMap.get(DS_HOST);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsPort = (String)instanceMap.get(DS_PORT);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsMgr = (String)instanceMap.get(DS_MGR);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsPwd = (String)instanceMap.get(DS_PWD);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String dsProto = (String)instanceMap.get(DS_PWD);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean dsRunning = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!isDSServerUp(dsHost, getPort(dsPort), dsProto, dsMgr,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Crypt.decode(dsPwd, Crypt.getHardcodedKeyEncryptor()))) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.isDSRunning : " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Cannot connect to Directory Server :" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Check if Directory Server has the given suffix.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return <code>true</code> if suffix is valid.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected boolean isValidSuffix(Map instanceMap) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean validSuffix = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try (Connection conn = getLDAPConnection(instanceMap)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (connectDSwithDN(conn, (String) instanceMap.get(DS_BASE_DN))) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.isValidateSuffix : " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Cannot connect to Directory Server :" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Validates the directory server port and returns as an int value.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return port of directory server.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ServiceBase.getPort: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Exception in getting port information", e);