/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can obtain
* a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
* or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
* Sun designates this particular file as subject to the "Classpath" exception
* as provided by Sun in the GPL Version 2 section of the License file that
* accompanied this code. If applicable, add the following below the License
* Header, with the fields enclosed by brackets [] replaced by your own
* identifying information: "Portions Copyrighted [year]
* [name of copyright owner]"
*
* Contributor(s):
*
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
/*
* ServerConfigLookup.java
*
* Created on June 7, 2002, 11:47 AM
*/
package com.sun.enterprise.web;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Logger;
import java.util.logging.Level;
import com.sun.logging.LogDomains;
import com.sun.enterprise.config.ConfigContext;
import com.sun.enterprise.config.ConfigBean;
import com.sun.enterprise.config.ConfigException;
import com.sun.enterprise.server.ApplicationServer;
import com.sun.enterprise.server.ServerContext;
import com.sun.enterprise.util.SystemPropertyConstants;
import com.sun.enterprise.web.session.PersistenceType;
import com.sun.enterprise.config.serverbeans.Applications;
import com.sun.enterprise.config.serverbeans.AvailabilityService;
import com.sun.enterprise.config.serverbeans.Cluster;
import com.sun.enterprise.config.serverbeans.ClusterHelper;
import com.sun.enterprise.config.serverbeans.Config;
import com.sun.enterprise.config.serverbeans.Domain;
import com.sun.enterprise.config.serverbeans.ElementProperty;
import com.sun.enterprise.config.serverbeans.HttpService;
import com.sun.enterprise.config.serverbeans.J2eeApplication;
import com.sun.enterprise.config.serverbeans.JdbcResource;
import com.sun.enterprise.config.serverbeans.JdbcConnectionPool;
import com.sun.enterprise.config.serverbeans.ManagerProperties;
import com.sun.enterprise.config.serverbeans.RequestProcessing;
import com.sun.enterprise.config.serverbeans.Resources;
import com.sun.enterprise.config.serverbeans.Server;
import com.sun.enterprise.config.serverbeans.ServerHelper;
import com.sun.enterprise.config.serverbeans.ServerBeansFactory;
import com.sun.enterprise.config.serverbeans.SessionConfig;
import com.sun.enterprise.config.serverbeans.SessionManager;
import com.sun.enterprise.config.serverbeans.SessionProperties;
import com.sun.enterprise.config.serverbeans.StoreProperties;
import com.sun.enterprise.config.serverbeans.WebContainerAvailability;
import com.sun.enterprise.util.uuid.UuidGenerator;
import com.sun.enterprise.util.uuid.UuidGeneratorImpl;
public class ServerConfigLookup {
/**
* The prefix for the HADB connection url
*/
protected static final String HADB_CONNECTION_URL_PREFIX = "jdbc:sun:hadb:";
/**
* The property name into domain.xml to obtain
* the cluster-id string
* Note: all instances in a cluster must have the same
* cluster-id defined at this location in server.xml
* 7.0 xpath was "/server/availability-service/persistence-store/property[@name='cluster-id']";
*/
protected static final String CLUSTER_ID_PROPERTY_NAME =
"cluster-id";
/**
* The property name into domain.xml to obtain
* the stale-session-checking-enabled string
*/
protected static final String STALE_SESSION_CHECKING_ENABLED_PROPERTY_NAME =
"stale-session-checking-enabled";
/**
* The default cluster-id if none is defined in domain.xml
* Note: the default is ok if only one cluster is being serviced
* by an instance of HADB; if not then each cluster needs its
* own unique cluster-id and each instance must have it correctly
* defined in its server.xml
*/
protected static final String DEFAULT_CLUSTER_ID = "cluster1";
/**
* The xpath expression into domain.xml to obtain
* the hadb-store-pool-jndi-name string
* 7.0 xpath was "/server/availability-service/persistence-store/property[@name='store-pool-jndi-name']";
*/
protected static final String HADB_STORE_POOL_JNDI_NAME_PROPERTY_NAME =
"store-pool-jndi-name";
/**
* The default store-pool-jndi-name (used by Web Container for
* HTTP Persistence to HADB
*/
protected static final String DEFAULT_STORE_POOL_JNDI_NAME = "jdbc/hastore";
/**
* The xpath expression into server.xml to obtain
* the hadb-mgmt-env-path string
* 7.0 xpath was "/server/availability-service/persistence-store/property[@name='hadb-mgmt-env-path']"
*/
protected static final String HADB_MGMT_ENV_PATH_PROPERTY_NAME =
"hadb-mgmt-env-path";
/**
* The property name in domain.xml to obtain
* the hadb-database-name string
* 7.0 xpath was "/server/availability-service/persistence-store/property[@name='hadb-database-name']";
*/
protected static final String HADB_DATABASE_NAME_PROPERTY_NAME =
"hadb-database-name";
/**
* The property name into domain.xml to obtain
* the UuidGenerator impl class name
*/
protected static final String UUID_GENERATOR_CLASS_PROPERTY_NAME =
"uuid-impl-class";
/**
* The default UuidGenerator class (fully qualified name)
*/
protected static final String DEFAULT_UUID_GENERATOR_CLASS = "com.sun.enterprise.util.uuid.UuidGeneratorImpl";
/**
* The property name in domain.xml to obtain
* the EE builder path - this property is not expected
* now to change and if it ever did, then the directory
* and package structure for the builder classes would
* have to change also
* 7.0 xpath was "/server/availability-service/persistence-store/property[@name='ee-builder-path']"
*/
protected static final String EE_BUILDER_PATH_PROPERTY_NAME =
"ee-builder-path";
/**
* The default path to the EE persistence strategy builders
*/
protected static final String DEFAULT_EE_BUILDER_PATH = "com.sun.enterprise.ee.web.initialization";
/**
* The property name in domain.xml to obtain
* the hadb-health-check string
* 7.0 xpath was "/server/availability-service/persistence-store/property[@name='hadb-health-check-enabled']";
*/
protected static final String HADB_HEALTH_CHECK_ENABLED_PROPERTY_NAME =
"hadb-health-check-enabled";
/**
* The default value of hadb-healthcheck-interval-in-seconds
*/
protected static final int DEFAULT_HA_STORE_HEALTHCHECK_INTERVAL_IN_SECONDS = 5;
/**
* The property name in domain.xml to obtain
* the user name string in hadb jdbc-connection pool (for http session
* persistence)
*/
protected static final String USER_NAME = "User";
/**
* The property name in domain.xml to obtain
* the password string in hadb jdbc-connection pool (for http session
* persistence)
*/
protected static final String PASSWORD = "Password";
/**
* The property name in domain.xml to obtain
* the HADB agent password (used for connecting to HADB agent)
*/
protected static final String HADB_AGENT_PASSWORD = "ha-agent-password";
private static final String NATIVE_REPLICATION_ENABLED = "native_replication_enabled";
private static final String CLUSTER_MEMBERS = "cluster_members";
private static final String NUMBER_OF_PIPES = "number_of_pipes";
private static final String LATENCY_COUNT = "replication_ack_enabled";
private static final String MAX_SESSION_UNLOAD_TIME_IN_SECONDS = "max_session_unload_time_in_seconds";
private static final String REPLICATION_MEASUREMENT_ENABLED = "replication_measurement_enabled";
private static final String REPLICATION_MEASUREMENT_INTERVAL = "replication_measurement_interval";
private static final String WAIT_FOR_ACK_PROPERTY = "wait_for_ack_property";
private static final String WAIT_FOR_FAST_ACK_PROPERTY = "wait_for_fast_ack_property";
/**
* The default value of thread-count
*/
protected static final int DEFAULT_REQUEST_PROCESSING_THREAD_COUNT = 20;
/**
* The config context passed in via constructor
* used when a dynamic config context is needed
* rather than usual run-time config context e.g. deployment
*/
protected ConfigContext _configContext = null;
/** Creates a new instance of ServerConfigLookup */
public ServerConfigLookup() {
}
/**
* Creates a new instance of ServerConfigLookup
* @param configContext
*/
public ServerConfigLookup(ConfigContext configContext) {
this();
_configContext = configContext;
}
//+++++++++++++++++++++++++START NEW METHODS++++++++++++++++++++++
/**
* Get the ServerContext for this server
* return null if not found
*/
protected ServerContext getServerContext() {
return ApplicationServer.getServerContext();
}
/**
* Get the ConfigContext for this server
* return null if not found
*/
protected ConfigContext getConfigContextDynamic() {
if (_configContext != null) {
return _configContext;
} else {
return getConfigContext();
}
}
/**
* Get the ConfigContext for this server
* return null if not found
*/
protected ConfigContext getConfigContext() {
ServerContext serverCtx = this.getServerContext();
if(serverCtx == null) {
return null;
}
return serverCtx.getConfigContext();
}
/**
* Get the server element from domain.xml.
* return null if not found
*/
private Server getServerBean() {
Server serverBean = null;
/*
ServerContext serverCtx = ApplicationServer.getServerContext();
ConfigContext configCtx = serverCtx.getConfigContext();
*/
ConfigContext configCtx = this.getConfigContext();
try {
serverBean = ServerBeansFactory.getServerBean(configCtx);
} catch (ConfigException ex) {}
return serverBean;
}
/**
* determine if this instance is the DAS
*/
public boolean isDAS() {
boolean result = true;
Server serverBean = this.getServerBean();
ConfigContext configCtx = this.getConfigContext();
if(serverBean != null && configCtx != null) {
try {
result = ServerHelper.isDAS(configCtx, serverBean);
} catch (ConfigException ex) {}
}
return result;
}
/**
* Get the server name from domain.xml.
* return null if not found
*/
public String getServerName() {
String result = null;
Server serverBean = this.getServerBean();
if(serverBean != null) {
result = serverBean.getName();
}
return result;
}
/**
* Get the cluster name from domain.xml for this server.
* return null if not found
*/
public String getClusterName() {
String result = null;
/*
ServerContext serverCtx = ApplicationServer.getServerContext();
ConfigContext configCtx = serverCtx.getConfigContext();
*/
ConfigContext configCtx = this.getConfigContext();
String serverName = this.getServerName();
if(serverName == null) {
return result;
}
boolean isClustered = false;
try {
isClustered = ServerHelper.isServerClustered(configCtx, serverName);
} catch (ConfigException ex) {}
if(!isClustered) {
result = serverName + "_nc"; //non-clustered example: server1_nc
return result;
}
Cluster cluster = null;
try {
cluster = ClusterHelper.getClusterForInstance(configCtx, serverName);
} catch (ConfigException ex) {}
if(cluster != null) {
result = cluster.getName();
}
return result;
}
public ArrayList getServerNamesInCluster() {
ArrayList result = new ArrayList();
ConfigContext configCtx = this.getConfigContext();
String serverName = this.getServerName();
//this should not happen
if(serverName == null) {
//displayArrayList(result);
return result;
}
boolean isClustered = false;
try {
isClustered = ServerHelper.isServerClustered(configCtx, serverName);
} catch (ConfigException ex) {}
//if not clustered try to find the property else just return
//our own name alone
if(!isClustered) {
//from property under availability-service for stand-alones
ArrayList instanceNamesArray = this.getClusterInstanceNamesList();
if(!instanceNamesArray.isEmpty()) {
result = instanceNamesArray;
} else {
result.add(serverName);
}
//displayArrayList(result);
return result;
}
// if clustered instance then get list of cluster members names
String clusterName = this.getClusterName();
Server[] serversArray = null;
try {
serversArray = ServerHelper.getServersInCluster(configCtx, clusterName);
} catch (ConfigException ex) {}
for(int i=0; i<serversArray.length; i++) {
Server nextServer = serversArray[i];
/* FIXME this appears wrong
if(i > 0) {
result.add(nextServer.getName());
}
*/
result.add(nextServer.getName().trim());
}
//displayArrayList(result);
return result;
}
ArrayList getClusterInstanceNamesList() {
ArrayList instanceNames = new ArrayList();
ServerConfigLookup lookup = new ServerConfigLookup();
String instanceNamesString =
lookup.getAvailabilityServicePropertyString(CLUSTER_MEMBERS);
if(instanceNamesString == null) {
return instanceNames;
}
String[] instancesArray = instanceNamesString.split(",");
List instancesList = Arrays.asList(instancesArray);
for(int i=0; i<instancesList.size(); i++) {
//System.out.println("getClusterInstanceNamesList:elem" + i + " = " + ((String)instancesList.get(i)).trim() );
instanceNames.add( ((String)instancesList.get(i)).trim() );
}
return instanceNames;
}
private void displayArrayList(ArrayList list) {
System.out.println("DISPLAY CLUSTER MEMBERS");
for(int i=0; i<list.size(); i++) {
System.out.println("clusterMember[" + i + "] = " + list.get(i));
}
}
/**
* If the clusterName is null; return false
* else return heartbeat enabled for the cluster
*/
public boolean isGMSEnabled() {
if(getClusterName() == null) {
return false;
}
Cluster cluster = getCluster();
if(cluster == null) {
return false;
}
return cluster.isHeartbeatEnabled();
}
/**
* Get the cluster if the server is in a cluster
* return null if not
*/
public Cluster getCluster() {
ConfigContext configCtx = this.getConfigContext();
String serverName = this.getServerName();
boolean isClustered = false;
try {
isClustered = ServerHelper.isServerClustered(configCtx, serverName);
} catch (ConfigException ex) {}
if(!isClustered) {
return null;
}
Cluster cluster = null;
try {
cluster = ClusterHelper.getClusterForInstance(configCtx, serverName);
} catch (ConfigException ex) {}
return cluster;
}
/**
* returns the number of steady-state pipes in pool
* will set equal to number of request processing threads plus one
* in the http-service
* or if the NUMBER_OF_PIPES property is set that will take precedence
*/
public int getNumberOfReplicationPipesFromConfig() {
//if NUMBER_OF_PIPES property is set it will over-ride
//else it will track the number of request processing threads
//up to 40 - must be greater than 1
int numPipes = getNumberOfReplicationPipesPropertyFromConfig();
if(numPipes == -1) {
numPipes = this.getRequestProcessingThreadCountFromConfig();
}
numPipes++;
if(numPipes > 40) {
numPipes = 41;
}
if(numPipes < 2) {
numPipes = 2;
}
return numPipes;
}
/**
* returns the number of steady-state pipes in pool
* in <availability-service>
* if missing (or error) default to -1
*/
public int getNumberOfReplicationPipesPropertyFromConfig() {
int candidateReturnValue = -1;
int returnValue
= -1;
String returnValueString =
this.getAvailabilityServicePropertyString(NUMBER_OF_PIPES);
if(returnValueString != null) {
try
{
candidateReturnValue = (Integer.valueOf(returnValueString)).intValue();
} catch (NumberFormatException ex) {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("Using Default Value = 5");
}
}
}
//may return negative or zero value
if(candidateReturnValue > 0) {
returnValue = candidateReturnValue;
}
return returnValue;
}
/**
* returns the latency count value
* in <availability-service>
* if missing (or error) default to 0
*/
public int getLatencyCountPropertyFromConfig() {
int candidateReturnValue = 0;
int returnValue = 0;
String returnValueString =
this.getAvailabilityServicePropertyString(LATENCY_COUNT);
if(returnValueString != null) {
try
{
candidateReturnValue = (Integer.valueOf(returnValueString)).intValue();
} catch (NumberFormatException ex) {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("Using Default Value = 0");
}
}
}
//for now only allow 1 or 0
if(candidateReturnValue == 1) {
returnValue = candidateReturnValue;
}
return returnValue;
}
/**
* returns the max_session_unload_time_in_seconds value
* in <availability-service>
* if missing (or error) default to 7 minutes (7*60 seconds)
*/
public int getMaxSessionUnloadTimeInSecondsPropertyFromConfig() {
int candidateReturnValue = 7 * 60;
int returnValue = 7 * 60;
String returnValueString =
this.getAvailabilityServicePropertyString(MAX_SESSION_UNLOAD_TIME_IN_SECONDS);
if(returnValueString != null) {
try
{
candidateReturnValue = (Integer.valueOf(returnValueString)).intValue();
} catch (NumberFormatException ex) {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("Using Default Value = 7 * 60");
}
}
}
//only allow positive integers
if(candidateReturnValue >= 0) {
returnValue = candidateReturnValue;
}
return returnValue;
}
/**
* returns the replication_measurement_interval property
* used to control frequency of measurement output
* in <availability-service>
* if missing (or error) default to 1000
*/
public int getReplicationMeasurementIntervalFromConfig() {
int candidateReturnValue = 1000;
int returnValue = 1000;
String returnValueString =
this.getAvailabilityServicePropertyString(REPLICATION_MEASUREMENT_INTERVAL);
if(returnValueString != null) {
try
{
candidateReturnValue = (Integer.valueOf(returnValueString)).intValue();
} catch (NumberFormatException ex) {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("Using Default Value = 1000");
}
}
}
//may return negative value
if(candidateReturnValue > 0) {
returnValue = candidateReturnValue;
}
return returnValue;
}
/**
* returns the replication_measurement_enabled property
* in <availability-service>
* if missing (or error) default to false
*/
public boolean getReplicationMeasurementEnabledFromConfig() {
boolean returnValue = false;
String returnValueString =
this.getAvailabilityServicePropertyString(REPLICATION_MEASUREMENT_ENABLED);
if(returnValueString != null) {
returnValue = (Boolean.valueOf(returnValueString));
}
return returnValue;
}
/**
* returns the wait_for_ack_property
* in <availability-service>
* if missing (or error) default to false
*/
public boolean getWaitForAckPropertyFromConfig() {
boolean returnValue = false;
String returnValueString =
this.getAvailabilityServicePropertyString(WAIT_FOR_ACK_PROPERTY);
if(returnValueString != null) {
returnValue = (Boolean.valueOf(returnValueString));
}
return returnValue;
}
/**
* returns the wait_for_fast_ack_property
* in <availability-service>
* if missing (or error) default to true
*/
public boolean getWaitForFastAckPropertyFromConfig() {
boolean returnValue = true;
String returnValueString =
this.getAvailabilityServicePropertyString(WAIT_FOR_FAST_ACK_PROPERTY);
if(returnValueString != null) {
returnValue = (Boolean.valueOf(returnValueString));
}
return returnValue;
}
/**
* Get the native_replication_enabled from domain.xml.
* return true if not found
*/
public boolean isNativeReplicationEnabledFromConfig() {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("in ServerConfigLookup>>getNativeReplicationEnabledFromConfig");
}
String nativeReplicationEnabledString =
this.getAvailabilityServicePropertyString(NATIVE_REPLICATION_ENABLED);
Boolean bool = this.toBoolean(nativeReplicationEnabledString);
if(bool == null) {
return true;
} else {
return bool.booleanValue();
}
}
/**
* Get the resources element from domain.xml.
* return null if not found
*/
private Resources getResourcesBean() {
Resources resourcesBean = null;
Domain domainBean = null;
/*
ServerContext serverCtx = ApplicationServer.getServerContext();
ConfigContext configCtx = serverCtx.getConfigContext();
*/
ConfigContext configCtx = this.getConfigContext();
try {
domainBean = ServerBeansFactory.getDomainBean(configCtx);
if(domainBean != null) {
resourcesBean = domainBean.getResources();
}
} catch (ConfigException ex) {}
return resourcesBean;
}
/**
* Get the applications element from domain.xml.
* return null if not found
*/
private Applications getApplicationsBean() {
Applications applicationsBean = null;
Domain domainBean = null;
/*
ServerContext serverCtx = ApplicationServer.getServerContext();
ConfigContext configCtx = serverCtx.getConfigContext();
*/
ConfigContext configCtx = this.getConfigContext();
try {
domainBean = ServerBeansFactory.getDomainBean(configCtx);
if(domainBean != null) {
applicationsBean = domainBean.getApplications();
}
} catch (ConfigException ex) {}
return applicationsBean;
}
/**
* Get the applications element from domain.xml.
* return null if not found
*/
private Applications getApplicationsBeanDynamic() {
Applications applicationsBean = null;
Domain domainBean = null;
/*
ServerContext serverCtx = ApplicationServer.getServerContext();
ConfigContext configCtx = serverCtx.getConfigContext();
*/
ConfigContext configCtx = this.getConfigContextDynamic();
try {
domainBean = ServerBeansFactory.getDomainBean(configCtx);
if(domainBean != null) {
applicationsBean = domainBean.getApplications();
}
} catch (ConfigException ex) {}
return applicationsBean;
}
/**
* Get the config element from domain.xml.
* return null if not found
*/
private Config getConfigBean() {
Config configBean = null;
/*
ServerContext serverCtx = ApplicationServer.getServerContext();
ConfigContext configCtx = serverCtx.getConfigContext();
*/
ConfigContext configCtx = this.getConfigContext();
try {
configBean = ServerBeansFactory.getConfigBean(configCtx);
} catch (ConfigException ex) {}
return configBean;
}
/**
* Get the config element from domain.xml.
* return null if not found
*/
private Config getConfigBeanDynamic() {
Config configBean = null;
ConfigContext configCtx = this.getConfigContextDynamic();
try {
configBean = ServerBeansFactory.getConfigBean(configCtx);
} catch (ConfigException ex) {}
return configBean;
}
/**
* Get the http-service element from domain.xml.
* return null if not found
*/
protected HttpService getHttpService() {
Config configBean = this.getConfigBean();
if(configBean == null) {
return null;
}
return configBean.getHttpService();
}
/**
* Get the request-processing element from domain.xml.
* return null if not found
*/
private RequestProcessing getRequestProcessing() {
HttpService httpServiceBean = this.getHttpService();
if(httpServiceBean == null) {
return null;
}
return httpServiceBean.getRequestProcessing();
}
/**
* Get the request-processing thread-count attribute from domain.xml.
* return null if not found
*/
private String getRequestProcessingThreadCountStringFromConfig() {
RequestProcessing requestProcessingBean = this.getRequestProcessing();
if(requestProcessingBean == null) {
return null;
}
return requestProcessingBean.getThreadCount();
}
/**
* Get the thread-count attribute in request-processing
* element from domain.xml.
* returns the attribute thread-count
* in <request-processing>
* if missing (or error) default to DEFAULT_REQUEST_PROCESSING_THREAD_COUNT
*/
public int getRequestProcessingThreadCountFromConfig() {
int candidateReturnValue = -1;
int returnValue
= DEFAULT_REQUEST_PROCESSING_THREAD_COUNT;
String returnValueString =
this.getRequestProcessingThreadCountStringFromConfig();
if(returnValueString != null) {
try
{
candidateReturnValue = (Integer.valueOf(returnValueString)).intValue();
} catch (NumberFormatException ex) {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("Using Default Value = " + DEFAULT_REQUEST_PROCESSING_THREAD_COUNT);
}
}
}
//insure we have at least 5 pipes
if(candidateReturnValue > 4) {
returnValue = candidateReturnValue;
}
return returnValue;
}
/**
* Get the availability-service element from domain.xml.
* return null if not found
*/
protected AvailabilityService getAvailabilityService() {
Config configBean = this.getConfigBean();
if(configBean == null) {
return null;
}
return configBean.getAvailabilityService();
}
/**
* Get the availability-service element from domain.xml.
* return null if not found
*/
protected AvailabilityService getAvailabilityServiceDynamic() {
Config configBean = this.getConfigBeanDynamic();
if(configBean == null) {
return null;
}
return configBean.getAvailabilityService();
}
/**
* Get the web-container-availability element from domain.xml.
* return null if not found
*/
private WebContainerAvailability getWebContainerAvailability() {
AvailabilityService availabilityServiceBean = this.getAvailabilityService();
if(availabilityServiceBean == null) {
return null;
}
return availabilityServiceBean.getWebContainerAvailability();
}
/**
* Get the properties under the web-container-availability element
* from domain.xml.
* return array of single empty ElementProperty if not found
*/
private ElementProperty[] getWebContainerAvailabilityProperties() {
WebContainerAvailability webContainerAvailabilityBean =
this.getWebContainerAvailability();
if(webContainerAvailabilityBean == null) {
return new ElementProperty[0];
}
return webContainerAvailabilityBean.getElementProperty();
}
/**
* Get the String value of the property under web-container-availability
* element from domain.xml whose name matches propName
* return null if not found
* @param propName
*/
protected String getWebContainerAvailabilityPropertyString(String propName) {
String result = null;
WebContainerAvailability wcAvailabilityBean = this.getWebContainerAvailability();
if( (wcAvailabilityBean != null) && (wcAvailabilityBean.sizeElementProperty() > 0) ) {
ElementProperty[] props = wcAvailabilityBean.getElementProperty();
for (int i = 0; i < props.length; i++) {
String name = props[i].getAttributeValue("name");
String value = props[i].getAttributeValue("value");
if (name.equalsIgnoreCase(propName)) {
result = value;
}
}
}
return result;
}
/**
* Get the String value of the property under web-container-availability
* element from domain.xml whose name matches propName
* return defaultValue if not found
* @param propName
*/
protected String getWebContainerAvailabilityPropertyString(String propName, String defaultValue) {
String result = null;
WebContainerAvailability wcAvailabilityBean = this.getWebContainerAvailability();
if( (wcAvailabilityBean != null) && (wcAvailabilityBean.sizeElementProperty() > 0) ) {
ElementProperty[] props = wcAvailabilityBean.getElementProperty();
for (int i = 0; i < props.length; i++) {
String name = props[i].getAttributeValue("name");
String value = props[i].getAttributeValue("value");
if (name.equalsIgnoreCase(propName)) {
result = value;
}
}
}
if(result == null) {
result = defaultValue;
}
return result;
}
/**
* Get the int value of the property under web-container-availability
* element from domain.xml whose name matches propName
* return defaultValue if not found
* @param propName
*/
protected int getWebContainerAvailabilityPropertyInt(String propName, int defaultValue) {
int returnValue = defaultValue;
String returnValueString = null;
WebContainerAvailability wcAvailabilityBean = this.getWebContainerAvailability();
if( (wcAvailabilityBean != null) && (wcAvailabilityBean.sizeElementProperty() > 0) ) {
ElementProperty[] props = wcAvailabilityBean.getElementProperty();
for (int i = 0; i < props.length; i++) {
String name = props[i].getAttributeValue("name");
String value = props[i].getAttributeValue("value");
if (name.equalsIgnoreCase(propName)) {
returnValueString = value;
}
}
}
if(returnValueString != null) {
try
{
returnValue = (Integer.valueOf(returnValueString)).intValue();
} catch (NumberFormatException ex) {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("Using Default Value = "
+ defaultValue);
}
}
}
return returnValue;
}
private com.sun.enterprise.config.serverbeans.WebModule getWebModuleByContextRoot(String contextRoot) {
com.sun.enterprise.config.serverbeans.WebModule result = null;
Applications applicationsBean = this.getApplicationsBeanDynamic();
if(applicationsBean == null) {
return null;
}
com.sun.enterprise.config.serverbeans.WebModule[] webModules =
applicationsBean.getWebModule();
for(int i=0; i<webModules.length; i++) {
com.sun.enterprise.config.serverbeans.WebModule nextWebModule =
webModules[i];
String nextContextRoot = nextWebModule.getContextRoot();
if(nextContextRoot != null && nextContextRoot.equalsIgnoreCase(contextRoot)) {
result = nextWebModule;
}
}
return result;
}
private boolean getWebModuleAvailability(String contextRoot, boolean inheritedValue) {
com.sun.enterprise.config.serverbeans.WebModule webModule =
this.getWebModuleByContextRoot(contextRoot);
if(webModule == null) {
//FIXME remove after testing
return false;
//return inheritedValue;
}
/*
String wmsString = webModule.getAvailabilityEnabled();
Boolean bool = this.toBoolean(wmsString);
if(bool == null) {
return inheritedValue;
} else {
return bool.booleanValue();
}
*/
return webModule.isAvailabilityEnabled();
}
private J2eeApplication getJ2eeApplicationByName(String appName) {
J2eeApplication result = null;
Applications applicationsBean = this.getApplicationsBeanDynamic();
if(applicationsBean == null) {
return null;
}
return applicationsBean.getJ2eeApplicationByName(appName);
}
private boolean getJ2eeApplicationAvailability(String appName, boolean inheritedValue) {
J2eeApplication j2eeApp =
this.getJ2eeApplicationByName(appName);
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("ServerConfigLookup>>getJ2eeApplicationAvailability j2eeApp = " + j2eeApp);
}
//System.out.println("ServerConfigLookup>>getJ2eeApplicationAvailability j2eeApp = " + j2eeApp);
if(j2eeApp == null) {
//FIXME remove after testing - protection if called in web module case
//return inheritedValue;
return false;
}
/*
String appString = j2eeApp.getAvailabilityEnabled();
Boolean bool = this.toBoolean(appString);
if(bool == null) {
return inheritedValue;
} else {
return bool.booleanValue();
}
*/
return j2eeApp.isAvailabilityEnabled();
}
//+++++++++++++++++++++++++END NEW METHODS++++++++++++++++++++++
/**
* Get the persistenceType from domain.xml.
* return null if not found
*/
public PersistenceType getPersistenceTypeFromConfig() {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("in ServerConfigLookup>>getPersistenceTypeFromConfig");
}
String persistenceTypeString = null;
PersistenceType persistenceType = null;
WebContainerAvailability webContainerAvailabilityBean =
this.getWebContainerAvailability();
if(webContainerAvailabilityBean == null) {
return null;
}
persistenceTypeString = webContainerAvailabilityBean.getPersistenceType();
//System.out.println("ServerConfigLookup>>getPersistenceTypeFromConfig:persistenceTypeString=" + persistenceTypeString);
if(persistenceTypeString != null) {
persistenceType = PersistenceType.parseType(persistenceTypeString);
}
if(persistenceType != null) {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("SERVER.XML persistenceType= " + persistenceType.getType());
}
} else {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("SERVER.XML persistenceType missing");
}
}
return persistenceType;
}
/**
* Get the persistenceFrequency from domain.xml.
* return null if not found
* 7.0 xpath was "/server/web-container/session-config/session-manager/manager-properties/property[@name='persistenceFrequency']";
*/
public String getPersistenceFrequencyFromConfig() {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("in ServerConfigLookup>>getPersistenceFrequencyFromConfig");
}
WebContainerAvailability webContainerAvailabilityBean =
this.getWebContainerAvailability();
if(webContainerAvailabilityBean == null) {
return null;
}
return webContainerAvailabilityBean.getPersistenceFrequency();
}
/**
* Get the persistenceScope from domain.xml.
* return null if not found
* 7.0 xpath was "/server/web-container/session-config/session-manager/store-properties/property[@name='persistenceScope']";
*/
public String getPersistenceScopeFromConfig() {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("in ServerConfigLookup>>getPersistenceScopeFromConfig");
}
WebContainerAvailability webContainerAvailabilityBean =
this.getWebContainerAvailability();
if(webContainerAvailabilityBean == null) {
return null;
}
return webContainerAvailabilityBean.getPersistenceScope();
}
/**
* Get the stale-session-checking-enabled from domain.xml.
* return false if not found
*/
public boolean getStaleSessionCheckingFromConfig() {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("in ServerConfigLookup>>getStaleSessionCheckingFromConfig");
}
String staleSessionCheckingEnabledString =
this.getWebContainerAvailabilityPropertyString(STALE_SESSION_CHECKING_ENABLED_PROPERTY_NAME, "false");
Boolean bool = this.toBoolean(staleSessionCheckingEnabledString);
if(bool == null) {
return false;
} else {
return bool.booleanValue();
}
}
/**
* Get the cluster-id from domain.xml.
* return "cluster1" if not found
*/
public String getClusterIdFromConfig() {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("in ServerConfigLookup>>getClusterIdFromConfig");
}
return this.getWebContainerAvailabilityPropertyString(CLUSTER_ID_PROPERTY_NAME, DEFAULT_CLUSTER_ID);
//return this.getAvailServicePersistenceStorePropertyString(CLUSTER_ID_PROPERTY_NAME, DEFAULT_CLUSTER_ID);
}
/**
* Get the availability-enabled from domain.xml.
* return false if not found
*/
public boolean getAvailabilityEnabledFromConfig() {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("in ServerConfigLookup>>getAvailabilityEnabledFromConfig");
}
AvailabilityService as = this.getAvailabilityService();
if(as == null) {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("AvailabilityService was not defined - check domain.xml");
}
return false;
}
return as.isAvailabilityEnabled();
}
/**
* Get the availability-enabled from domain.xml.
* This takes into account:
* global
* web-container-availability
* web-module (if stand-alone)
* return false if not found
*/
public boolean calculateWebAvailabilityEnabledFromConfig(String contextRoot, String j2eeAppName) {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("in ServerConfigLookup>>calculateWebAvailabilityEnabledFromConfig");
}
//global availability from <availability-service> element
boolean globalAvailability =
this.getAvailabilityEnabledFromConfig();
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("globalAvailability = " + globalAvailability);
}
//System.out.println("globalAvailability = " + globalAvailability);
//web container availability from <web-container-availability> sub-element
boolean webContainerAvailability =
this.getWebContainerAvailabilityEnabledFromConfig(globalAvailability);
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("webContainerAvailability = " + webContainerAvailability);
}
//System.out.println("webContainerAvailability = " + webContainerAvailability);
//System.out.println("j2eeAppName=" + j2eeAppName);
if(j2eeAppName == null || "null".equals(j2eeAppName)) {
//the stand-alone web module case
boolean webModuleAvailability =
this.getWebModuleAvailability(contextRoot, webContainerAvailability);
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("webModuleAvailability = " + webModuleAvailability);
}
//System.out.println("webModuleAvailability = " + webModuleAvailability);
return globalAvailability
&& webContainerAvailability
&& webModuleAvailability;
} else {
//the j2ee application case
boolean j2eeApplicationAvailability =
this.getJ2eeApplicationAvailability(j2eeAppName, webContainerAvailability);
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("j2eeApplicationAvailability = " + j2eeApplicationAvailability);
}
//System.out.println("j2eeApplicationAvailability = " + j2eeApplicationAvailability);
return globalAvailability
&& webContainerAvailability
&& j2eeApplicationAvailability;
}
}
/**
* Get the availability-enabled for the web container from domain.xml.
* return inherited global availability-enabled if not found
*/
public boolean getWebContainerAvailabilityEnabledFromConfig() {
boolean globalAvailabilityEnabled = this.getAvailabilityEnabledFromConfig();
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("in ServerConfigLookup>>getWebContainerAvailabilityEnabledFromConfig");
}
WebContainerAvailability was = this.getWebContainerAvailability();
if(was == null) {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("WebContainerAvailability was not defined - check domain.xml");
}
return globalAvailabilityEnabled;
}
String wasString = was.getAvailabilityEnabled();
Boolean bool = this.toBoolean(wasString);
if(bool == null) {
return globalAvailabilityEnabled;
} else {
return bool.booleanValue();
}
}
/**
* Get the availability-enabled for the web container from domain.xml.
* return inherited global availability-enabled if not found
*/
public boolean getWebContainerAvailabilityEnabledFromConfig(boolean inheritedValue) {
//boolean globalAvailabilityEnabled = this.getAvailabilityEnabledFromConfig();
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("in ServerConfigLookup>>getWebContainerAvailabilityEnabledFromConfig");
}
WebContainerAvailability was = this.getWebContainerAvailability();
if(was == null) {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("WebContainerAvailability was not defined - check domain.xml");
}
return inheritedValue;
}
String wasString = was.getAvailabilityEnabled();
Boolean bool = this.toBoolean(wasString);
if(bool == null) {
return inheritedValue;
} else {
return bool.booleanValue();
}
}
/**
* convert the input value to the appropriate Boolean value
* if input value is null, return null
*/
protected Boolean toBoolean(String value){
if(value == null) return null;
if (value.equalsIgnoreCase("true"))
return Boolean.TRUE;
if (value.equalsIgnoreCase("yes"))
return Boolean.TRUE;
if (value.equalsIgnoreCase("on") )
return Boolean.TRUE;
if (value.equalsIgnoreCase("1"))
return Boolean.TRUE;
return Boolean.FALSE;
}
/**
* Get the store-pool-jndi-name from domain.xml.
* This is the store-pool-name in <availability-service> element
* it represents the default for both web & ejb container
* return DEFAULT_STORE_POOL_JNDI_NAME if not found
*/
public String getStorePoolJndiNameFromConfig() {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("in ServerConfigLookup>>getStorePoolJndiNameFromConfig");
}
String result = DEFAULT_STORE_POOL_JNDI_NAME;
AvailabilityService as = this.getAvailabilityService();
if(as == null) {
return result;
}
String storePoolJndiName = as.getStorePoolName();
if(storePoolJndiName != null) {
result = storePoolJndiName;
}
return result;
}
/**
* Get the store-pool-jndi-name from domain.xml.
* return value returned from getStorePoolJndiNameFromConfig if not found
*/
public String getHaStorePoolJndiNameFromConfig() {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("in ServerConfigLookup>>getHaStorePoolJndiNameFromConfig");
}
//String result = DEFAULT_STORE_POOL_JNDI_NAME;
String result = this.getStorePoolJndiNameFromConfig();
WebContainerAvailability webContainerAvailabilityBean =
this.getWebContainerAvailability();
if(webContainerAvailabilityBean == null) {
return result;
}
String result2 = webContainerAvailabilityBean.getHttpSessionStorePoolName();
if(result2 != null) {
result = result2;
}
return result;
}
/**
* Get the hadb health check string from domain.xml.
*7.0 xpath was "/server/availability-service/persistence-store/property[@name='hadb-health-check-enabled']"
* returns the attribute ha-store-healthcheck-enabled in <availability-service>
*/
public boolean getHadbHealthCheckFromConfig() {
AvailabilityService as = this.getAvailabilityService();
if(as == null) {
return false;
}
return as.isHaStoreHealthcheckEnabled();
}
/**
* Get the hadb health check string from domain.xml.
*7.0 xpath was "/server/availability-service/persistence-store/property[@name='hadb-health-check-enabled']"
* returns the attribute ha-store-healthcheck-enabled in <availability-service>
*/
public boolean getHadbHealthCheckFromConfigDynamic() {
AvailabilityService as = this.getAvailabilityServiceDynamic();
if(as == null) {
return false;
}
return as.isHaStoreHealthcheckEnabled();
}
/**
* Get the sso-failover-enabled boolean from domain.xml.
*/
public boolean getSsoFailoverEnabledFromConfig() {
WebContainerAvailability webContainerAvailabilityBean =
this.getWebContainerAvailability();
if(webContainerAvailabilityBean == null) {
return false;
}
return webContainerAvailabilityBean.isSsoFailoverEnabled();
}
/**
* Get the hadb management environment path from domain.xml.
* this is the location of cladm
* 7.0 xpath was "/server/availability-service/persistence-store/property[@name='hadb-mgmt-env-path']"
*/
public String getHadbMgmtEnvPathFromConfig() {
return this.getWebContainerAvailabilityPropertyString(HADB_MGMT_ENV_PATH_PROPERTY_NAME, null);
//return this.getAvailServicePersistenceStorePropertyString(HADB_MGMT_ENV_PATH_PROPERTY_NAME, null);
}
///begin HADB Health Check Stuff
/**
* Get the String value of the property under availability-service
* element from domain.xml whose name matches propName
* return null if not found
* @param propName
*/
public String getAvailabilityServicePropertyString(String propName) {
String result = null;
AvailabilityService availabilityServiceBean = this.getAvailabilityService();
if( (availabilityServiceBean != null) && (availabilityServiceBean.sizeElementProperty() > 0) ) {
ElementProperty[] props = availabilityServiceBean.getElementProperty();
for (int i = 0; i < props.length; i++) {
String name = props[i].getAttributeValue("name");
String value = props[i].getAttributeValue("value");
if (name.equalsIgnoreCase(propName)) {
result = value;
}
}
}
return result;
}
/**
* Get the String value of the ha-store-name attribute under availability-service
* element from domain.xml
* return null if not found
*/
public String getHadbDatabaseNameFromConfig() {
AvailabilityService as = this.getAvailabilityService();
if(as == null) {
return null;
}
return as.getHaStoreName();
}
/**
* Get the String value of the ha-store-name attribute under availability-service
* element from domain.xml
* return null if not found
*/
public String getHadbDatabaseNameFromConfigDynamic() {
AvailabilityService as = this.getAvailabilityServiceDynamic();
if(as == null) {
return null;
}
return as.getHaStoreName();
}
/**
* Get the String value of the ha-agent-password attribute under availability-service
* element from domain.xml
* return null if not found
*/
public String getHadbAgentPasswordFromConfig() {
AvailabilityService as = this.getAvailabilityService();
if(as == null) {
return null;
}
return as.getHaAgentPassword();
}
/**
* Get the String value of the ha-agent-password property under availability-service
* element from domain.xml
* return null if not found
*/
/* Old version based on property - remove after testing
public String getHadbAgentPasswordFromConfig() {
return this.getAvailabilityServicePropertyString(HADB_AGENT_PASSWORD);
}
*/
/**
* Get the String value of the ha-store-healthcheck-interval-in-seconds attribute under availability-service
* element from domain.xml
* return null if not found
*/
public String getHaStoreHealthcheckIntervalInSecondsStringFromConfig() {
AvailabilityService as = this.getAvailabilityService();
if(as == null) {
return null;
}
return as.getHaStoreHealthcheckIntervalInSeconds();
}
/**
* Get the ha-store-healthcheck-interval-in-seconds from domain.xml.
* returns the attribute ha-store-healthcheck-interval-in-seconds
* in <availability-service>
* if missing (or error) default to DEFAULT_HA_STORE_HEALTHCHECK_INTERVAL_IN_SECONDS
*/
public int getHaStoreHealthcheckIntervalInSecondsFromConfig() {
int candidateReturnValue = -1;
int returnValue
= DEFAULT_HA_STORE_HEALTHCHECK_INTERVAL_IN_SECONDS;
String returnValueString =
this.getHaStoreHealthcheckIntervalInSecondsStringFromConfig();
if(returnValueString != null) {
try
{
candidateReturnValue = (Integer.valueOf(returnValueString)).intValue();
} catch (NumberFormatException ex) {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("Using Default Value = " + DEFAULT_HA_STORE_HEALTHCHECK_INTERVAL_IN_SECONDS);
}
}
}
//avoid returning negative or zero values
if(candidateReturnValue > 0) {
returnValue = candidateReturnValue;
}
return returnValue;
}
/**
* Get the String value of the ha-store-healthcheck-interval-in-seconds attribute under availability-service
* element from domain.xml
* return null if not found
*/
public String getHaStoreHealthcheckIntervalInSecondsStringFromConfigDynamic() {
AvailabilityService as = this.getAvailabilityServiceDynamic();
if(as == null) {
return null;
}
return as.getHaStoreHealthcheckIntervalInSeconds();
}
/**
* Get the ha-store-healthcheck-interval-in-seconds from domain.xml.
* returns the attribute ha-store-healthcheck-interval-in-seconds
* in <availability-service>
* if missing (or error) default to DEFAULT_HA_STORE_HEALTHCHECK_INTERVAL_IN_SECONDS
*/
public int getHaStoreHealthcheckIntervalInSecondsFromConfigDynamic() {
int candidateReturnValue = -1;
int returnValue
= DEFAULT_HA_STORE_HEALTHCHECK_INTERVAL_IN_SECONDS;
String returnValueString =
this.getHaStoreHealthcheckIntervalInSecondsStringFromConfigDynamic();
if(returnValueString != null) {
try
{
candidateReturnValue = (Integer.valueOf(returnValueString)).intValue();
} catch (NumberFormatException ex) {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("Using Default Value = " + DEFAULT_HA_STORE_HEALTHCHECK_INTERVAL_IN_SECONDS);
}
}
}
//avoid returning negative or zero values
if(candidateReturnValue > 0) {
returnValue = candidateReturnValue;
}
return returnValue;
}
/**
* Get the String value of the ha-agent-port attribute under availability-service
* element from domain.xml
* return null if not found
*/
public String getHadbAgentPortFromConfig() {
AvailabilityService as = this.getAvailabilityService();
if(as == null) {
return null;
}
return as.getHaAgentPort();
}
/**
* Get the String value of the ha-agent-port attribute under availability-service
* element from domain.xml
* return null if not found
*/
public String getHadbAgentPortFromConfigDynamic() {
AvailabilityService as = this.getAvailabilityServiceDynamic();
if(as == null) {
return null;
}
return as.getHaAgentPort();
}
/**
* Get the connectionURL for hadb agent(s) from domain.xml.
*/
public String getHadbAgentConnectionURLFromConfig() {
String url = null;
StringBuffer sb = new StringBuffer();
String hostsString = this.getHadbAgentHostsFromConfig();
String portString = this.getHadbAgentPortFromConfig();
if(hostsString != null && portString != null) {
sb.append(hostsString);
sb.append(":");
sb.append(portString);
url = sb.toString();
} else {
url = null;
}
return url;
}
/**
* Get the connectionURL for hadb agent(s) from domain.xml.
*/
public String getHadbAgentConnectionURLFromConfigDynamic() {
String url = null;
StringBuffer sb = new StringBuffer();
String hostsString = this.getHadbAgentHostsFromConfigDynamic();
String portString = this.getHadbAgentPortFromConfigDynamic();
if(hostsString != null && portString != null) {
sb.append(hostsString);
sb.append(":");
sb.append(portString);
url = sb.toString();
} else {
url = null;
}
return url;
}
/**
* Get the String value of the ha-agent-hosts attribute under availability-service
* element from domain.xml
* return null if not found
*/
public String getHadbAgentHostsFromConfig() {
AvailabilityService as = this.getAvailabilityService();
if(as == null) {
return null;
}
return as.getHaAgentHosts();
}
/**
* Get the String value of the ha-agent-hosts attribute under availability-service
* element from domain.xml
* return null if not found
*/
public String getHadbAgentHostsFromConfigDynamic() {
AvailabilityService as = this.getAvailabilityServiceDynamic();
if(as == null) {
return null;
}
return as.getHaAgentHosts();
}
///end HADB Health Check Stuff
/**
* Get the EE_BUILDER_PATH from server.xml.
* this defaults to EE_BUILDER_PATH but can be modified
* this is the fully qualified path to the EE builders
* 7.0 xpath was "/server/availability-service/persistence-store/property[@name='ee-builder-path']"
*/
public String getEEBuilderPathFromConfig() {
return this.getWebContainerAvailabilityPropertyString(EE_BUILDER_PATH_PROPERTY_NAME, DEFAULT_EE_BUILDER_PATH);
//return this.getAvailServicePersistenceStorePropertyString(EE_BUILDER_PATH_PROPERTY_NAME, DEFAULT_EE_BUILDER_PATH);
}
/**
* Get the UuidGenerator implementation class name from domain.xml.
* 7.0 xpath was "/server/availability-service/persistence-store/property[@name='uuid-impl-class']", if specified.
* Use value of session-id-generator-classname attribute of
* "/server/web-container/session-config/session-manager/manager-properties"
* as fallback, or DEFAULT_UUID_GENERATOR_CLASS if no fallback specified.
*/
public String getUuidGeneratorImplClassFromConfig() {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest(
"in ServerConfigLookup>>getUuidGeneratorImplClassFromConfig");
}
String defaultUuidGeneratorClass = DEFAULT_UUID_GENERATOR_CLASS;
ManagerProperties mp = getInstanceSessionManagerManagerProperties();
if (mp != null) {
String cls = mp.getSessionIdGeneratorClassname();
if (cls != null) {
defaultUuidGeneratorClass = cls;
}
}
return this.getWebContainerAvailabilityPropertyString(UUID_GENERATOR_CLASS_PROPERTY_NAME, defaultUuidGeneratorClass);
}
/**
* Get the UuidGenerator implementation class from server.xml.
* 7.0 xpath was "/server/availability-service/persistence-store/property[@name='uuid-impl-class']";
*/
public UuidGenerator getUuidGeneratorFromConfig() {
UuidGenerator generator = new UuidGeneratorImpl();
String generatorImplClassName =
this.getUuidGeneratorImplClassFromConfig();
try {
generator =
(UuidGenerator) (Class.forName(generatorImplClassName)).newInstance();
} catch (Exception ex) {
}
return generator;
}
/**
* Get the value from server.xml for xpath
* return defaultValue if not defined or other problem
*/
public String getServerConfigValue(String xpath, String defaultValue ) {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("in ServerConfigLookup>>getServerConfigValue:xpath=" + xpath
+ " defaultValue= " + defaultValue);
}
ServerContext serverCtx = ApplicationServer.getServerContext();
//this condition occurs during some unit tests
if(serverCtx == null)
return defaultValue;
ConfigContext configCtx = serverCtx.getConfigContext();
ConfigBean configBean = null;
String returnValueString = null;
String returnValue = defaultValue;
try {
configBean =
configCtx.exactLookup(xpath);
} catch (ConfigException ex) {
}
if(configBean != null) {
returnValueString = configBean.getAttributeValue("value");
}
if(returnValueString != null) {
returnValue = returnValueString;
}
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("RETURNED CONFIG VALUE FOR XPATH:" + xpath +
" = " + returnValue);
}
return returnValue;
}
/**
* Get the value from server.xml for xpath
* return defaultValue if not defined or other problem
*/
public int getServerConfigValue(String xpath, int defaultValue ) {
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("in getServerConfigValue:xpath=" + xpath
+ " defaultValue= " + defaultValue);
}
/*
ServerContext serverCtx = ApplicationServer.getServerContext();
ConfigContext configCtx = serverCtx.getConfigContext();
*/
ConfigContext configCtx = this.getConfigContext();
ConfigBean configBean = null;
String returnValueString = null;
int returnValue = defaultValue;
try {
configBean =
configCtx.exactLookup(xpath);
} catch (ConfigException ex) {
}
if(configBean != null) {
returnValueString = configBean.getAttributeValue("value");
}
if(returnValueString != null) {
try {
returnValue = (Integer.valueOf(returnValueString)).intValue();
} catch (NumberFormatException ex) {
_logger.finest("Using Default Value = "
+ defaultValue);
}
}
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("RETURNED CONFIG VALUE FOR XPATH:" + xpath +
" = " + returnValue);
}
return returnValue;
}
/**
* Get the session manager bean from domain.xml
* return null if not defined or other problem
* 7.0 xpath was "/server/web-container/session-config/session-manager";
*/
public SessionManager getInstanceSessionManager() {
Config configBean = this.getConfigBean();
if(configBean == null) {
return null;
}
com.sun.enterprise.config.serverbeans.WebContainer webContainerBean
= configBean.getWebContainer();
if(webContainerBean == null) {
return null;
}
SessionConfig sessionConfigBean = webContainerBean.getSessionConfig();
if(sessionConfigBean == null) {
return null;
}
com.sun.enterprise.config.serverbeans.SessionManager smBean =
sessionConfigBean.getSessionManager();
return smBean;
}
/**
* Get the manager properties bean from domain.xml
* return null if not defined or other problem
* 7.0 xpath was "/server/web-container/session-config/session-manager/manager-properties";
*/
public ManagerProperties getInstanceSessionManagerManagerProperties() {
SessionManager smBean = this.getInstanceSessionManager();
if(smBean == null) {
return null;
}
return smBean.getManagerProperties();
}
/**
* Get the store properties bean from domain.xml
* return null if not defined or other problem
* 7.0 xpath was "/server/web-container/session-config/session-manager/store-properties";
*/
public StoreProperties getInstanceSessionManagerStoreProperties() {
SessionManager smBean = this.getInstanceSessionManager();
if(smBean == null) {
return null;
}
return smBean.getStoreProperties();
}
/**
* Get the session properties bean from server.xml
* return null if not defined or other problem
* 7.0 xpath was "/server/web-container/session-config/session-properties";
*/
public SessionProperties getInstanceSessionProperties() {
Config configBean = this.getConfigBean();
if(configBean == null) {
return null;
}
com.sun.enterprise.config.serverbeans.WebContainer webContainerBean
= configBean.getWebContainer();
if(webContainerBean == null) {
return null;
}
SessionConfig sessionConfigBean = webContainerBean.getSessionConfig();
if(sessionConfigBean == null) {
return null;
}
com.sun.enterprise.config.serverbeans.SessionProperties spBean =
sessionConfigBean.getSessionProperties();
return spBean;
}
/**
* Get the connectionUser from domain.xml.
*/
public String getConnectionUserFromConfig() {
String user = null;
JdbcConnectionPool pool = this.getHadbJdbcConnectionPoolFromConfig();
if(pool == null) {
return null;
}
if (pool.sizeElementProperty() > 0) {
ElementProperty[] props = pool.getElementProperty();
for (int i = 0; i < props.length; i++) {
String name = props[i].getAttributeValue("name");
String value = props[i].getAttributeValue("value");
if (name.equalsIgnoreCase(USER_NAME)) {
//if (name.equalsIgnoreCase("username")) {
user = value;
}
}
}
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("IN NEW getConnectionUserFromConfig: user=" + user);
}
return user;
}
/**
* Get the connectionPassword from domain.xml.
*/
public String getConnectionPasswordFromConfig() {
String password = null;
JdbcConnectionPool pool = this.getHadbJdbcConnectionPoolFromConfig();
if(pool == null)
return null;
if (pool.sizeElementProperty() > 0) {
ElementProperty[] props = pool.getElementProperty();
for (int i = 0; i < props.length; i++) {
String name = props[i].getAttributeValue("name");
String value = props[i].getAttributeValue("value");
if (name.equalsIgnoreCase(PASSWORD)) {
//if (name.equalsIgnoreCase("password")) {
password = value;
}
}
}
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("IN NEW getConnectionPasswordFromConfig: password=" + password);
}
return password;
}
/**
* Get the connectionURL from domain.xml.
*/
public String getConnectionURLFromConfig() {
String url = null;
StringBuffer sb = new StringBuffer();
JdbcConnectionPool pool = this.getHadbJdbcConnectionPoolFromConfig();
if(pool == null)
return null;
if (pool.sizeElementProperty() > 0) {
ElementProperty[] props = pool.getElementProperty();
for (int i = 0; i < props.length; i++) {
String name = props[i].getAttributeValue("name");
String value = props[i].getAttributeValue("value");
if (name.equalsIgnoreCase("serverList")) {
sb.append(HADB_CONNECTION_URL_PREFIX);
sb.append(value);
url = sb.toString();
}
}
}
if(_logger.isLoggable(Level.FINEST)) {
_logger.finest("IN NEW getConnectionURLFromConfig: url=" + url);
}
return url;
}
/**
* Get the JdbcConnectionPool for HADB from domain.xml.
* return null if not found
*/
public JdbcConnectionPool getHadbJdbcConnectionPoolFromConfig() {
String storePoolJndiName = this.getHaStorePoolJndiNameFromConfig();
if(storePoolJndiName == null)
return null;
Resources resources = this.getResourcesBean();
JdbcResource jdbcResource =
resources.getJdbcResourceByJndiName(storePoolJndiName);
if(jdbcResource == null) {
return null;
}
String poolName = jdbcResource.getPoolName();
JdbcConnectionPool pool =
resources.getJdbcConnectionPoolByName(poolName);
return pool;
}
/**
* Get the JdbcConnectionPool name for HADB from domain.xml.
*/
public String getHadbJdbcConnectionPoolNameFromConfig() {
String storePoolJndiName = this.getHaStorePoolJndiNameFromConfig();
if(storePoolJndiName == null)
return null;
Resources resources = this.getResourcesBean();
JdbcResource jdbcResource =
resources.getJdbcResourceByJndiName(storePoolJndiName);
if(jdbcResource == null)
return null;
String poolName = jdbcResource.getPoolName();
return poolName;
}
/**
* determine if HADB is installed
* check if the value of the system property HADB_ROOT_PROPERTY
* is a directory
*/
public static boolean isHADBInstalled() {
String hadbRootDirString = System.getProperty(SystemPropertyConstants.HADB_ROOT_PROPERTY);
if(hadbRootDirString == null) {
return false;
}
// System.out.println("hadbRootDirString=" + hadbRootDirString);
File hadbRootDir = new File(hadbRootDirString);
return (hadbRootDir.exists()
&& (hadbRootDir.isDirectory()) );
}
/**
* The logger to use for logging ALL web container related messages.
*/
private static final Logger _logger = LogDomains.getLogger(LogDomains.WEB_LOGGER);
}
|