com.sun.jts.CosTransactions.Configuration Maven / Gradle / Ivy
Show all versions of payara-micro Show documentation
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2011 Oracle and/or its affiliates. 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_1_1.html
* or packager/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 packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [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.
*/
//----------------------------------------------------------------------------
//
// Module: Configuration.java
//
// Description: JTS configuration management.
//
// Product: com.sun.jts.CosTransactions
//
// Author: Simon Holdsworth
//
// Date: March, 1997
//
// Copyright (c): 1995-1997 IBM Corp.
//
// The source code for this program is not published or otherwise divested
// of its trade secrets, irrespective of what has been deposited with the
// U.S. Copyright Office.
//
// This software contains confidential and proprietary information of
// IBM Corp.
//----------------------------------------------------------------------------
package com.sun.jts.CosTransactions;
// Import required classes.
import java.io.*;
import java.util.*;
import org.omg.CosTransactions.*;
import org.omg.PortableServer.*;
import com.sun.jts.trace.*;
import java.util.logging.Logger;
import java.util.logging.Level;
import com.sun.logging.LogDomains;
import com.sun.jts.utils.LogFormatter;
import com.sun.enterprise.transaction.api.TransactionConstants;
/**Provides interaction with the execution environment.
*
* @version 0.01
*
* @author Simon Holdsworth, IBM Corporation
*
* @see
*/
// CHANGE HISTORY
//
// Version By Change Description
// 0.01 SAJH Initial implementation.
//------------------------------------------------------------------------------
public class Configuration extends Object {
private static String serverName = null;
private static byte[] serverNameByteArray = null;
private static org.omg.CORBA.ORB orb = null;
private static Properties prop = null;
private static TransactionFactory factory = null;
private static boolean localFactory = false;
private static boolean recoverable = false;
private static ProxyChecker checker = null;
private static LogFile logFile = null;
private static Hashtable poas = new Hashtable();
private static String dbLogResource = null;
private static boolean disableFileLogging = false;
// for delegated recovery support
private static Hashtable logPathToServernametable = new Hashtable();
private static Hashtable logPathToFiletable = new Hashtable();
private static int retries = -1;
public static final String COMMIT_ONE_PHASE_DURING_RECOVERY = "commit-one-phase-during-recovery";
public static final int LAO_PREPARE_OK = TransactionConstants.LAO_PREPARE_OK;
public final static long COMMIT_RETRY_WAIT = 60000;
private static boolean isAppClient = true;
/**
The traceOn would enable/disable JTS wide tracing;
(Related class: com.sun.jts.trace.TraceUtil)
- [email protected] 27Nov2001
*/
/*
Logger to log transaction messages
*/
static Logger _logger = LogDomains.getLogger(Configuration.class, LogDomains.TRANSACTION_LOGGER);
private static boolean traceOn = false;
/**The property key used to specify the directory to which trace files and the
* error log should be written.
*
* The value is com.sun.jts.traceDirectory.
*
* The default value used for this property is the current directory.
*/
public final static String TRACE_DIRECTORY = "com.sun.jts.traceDirectory"/*#Frozen*/;
/**The property key used to specify the directory to which transaction log files
* should be written.
*
* The value is com.sun.jts.logDirectory.
*
* The default value used for this property is the "jts" subdirectory from the
* current directory, if that exists, otherwise the current directory.
*/
public final static String LOG_DIRECTORY = "com.sun.jts.logDirectory"/*#Frozen*/;
/**The property key used to specify the resource which will be used to wirte
* transaction logs.
*
* The value is com.sun.jts.logResource.
*
*/
public final static String DB_LOG_RESOURCE = "com.sun.jts.logResource"/*#Frozen*/;
/**
* Whether to write warnings and errors to jts.log file
* if this property has any value, it is active, otherwise it is inactive
*
*/
public final static String ERR_LOGGING = "com.sun.jts.errorLogging"/*#Frozen*/;
/**
* This property indicates that XA Resources would be passed in via
* the TM.recover() method, and that the recovery thread would have
* to wait until the resources are passed in. If not set, the recovery
* thread would not wait for the XA Resources to be passed in.
*/
public final static String MANUAL_RECOVERY = "com.sun.jts.ManualRecovery"/*#Frozen*/;
/**The property key used to specify the number of times the JTS should retry
* a commit or resync operation before giving up.
*
* The value is com.sun.jts.commitRetry.
*
* If this property has no value, retries continue indefinitely. A value of
* zero indicates that no retries should be made.
*/
public final static String COMMIT_RETRY = "com.sun.jts.commitRetry"/*#Frozen*/;
/**The property key used to specify whether the JTS should assume a transaction
* is to be committed or rolled back if an outcome cannot be obtained during
* recovery. It should also be used by Resource objects if they cannot obtain
* an outcome during recovery and cannot make a decision.
*
* The value is com.sun.jts.heuristicDirection.
*
* The default is to assume that the transaction should be rolled back. If the
* value is '1', the transaction should be committed.
*/
public final static String HEURISTIC_DIRECTION = "com.sun.jts.heuristicDirection"/*#Frozen*/;
/**The property key used to specify the number of transactions between keypoint
* operations on the log. Keypoint operations reduce the size of the transaction
* log files. A larger value for this property (for example, 1000) will result
* in larger transaction log files, but less keypoint operations, and hence better
* performance. a smaller value (e.g. 20) results in smaller log files but
* slightly reduced performance due to the greater frequency of keypoint
* operations.
*
* The value is com.sun.jts.keypointCount.
*
* The default value for this property is 100. If the value is specified as
* zero, then no keypoints are taken.
*/
public final static String KEYPOINT_COUNT = "com.sun.jts.keypointCount"/*#Frozen*/;
// Property to specify the instance name
public final static String INSTANCE_NAME = "com.sun.jts.instancename"/*#Frozen*/;
/**The property is used to specify the time interval in seconds for which the timeout
* manager would scan for timedout transactions. A higher value would mean better
* performance, but at the cost of closeness to which coordinator timeout is effected.
*
* The value is com.sun.jts.timeoutInterval"
*
* This needs to be a positive integer value greater than 10. If the value is less than
* 10, illegal or unspecified a default value of 10 seconds is assumed.
*/
public final static String TIMEOUT_INTERVAL = "com.sun.jts.timeoutInterval" ;
/**The default subdirectory in which log and repository files are stored.
*/
public final static String JTS_SUBDIRECTORY = "jts"/*#Frozen*/;
/**getDirectory return value which indicates that the required directory was
* specified and is OK.
*/
public final static int DIRECTORY_OK = 0;
/**getDirectory return value which indicates that the required directory was
* either not specified or was specified and invalid, and that the default
* subdirectory exists. In this case the default subdirectory should be used.
*/
public final static int DEFAULT_USED = 1;
/**getDirectory return value which indicates that the required directory was
* either not specified or was specified and invalid, and that the default
* subdirectory does not exist. In this case the current directory should be
* used.
*/
public final static int DEFAULT_INVALID = 2;
/**The approximate concurrent transactions expected. This is used to set the capacity of Vectors etc.
*/
public final static int EXPECTED_CONCURRENT_TRANSACTIONS = 10000;
/**The approximate concurrent transactions expected. This is used to set the capacity of Vectors etc.
*/
public final static int EXPECTED_CONCURRENT_THREADS = 100;
/**Returns a valid directory for a particular purpose. If the required
* directory is not valid, then a default subdirectory of the current directory
* is tried. If that is not valid either, then the current directory is used.
*
* @param envDir The environment variable containing the directory.
* @param defaultSubdirectory The default subdirectory to use.
* @param result A single-element array which will hold a value
* indicating whether the requested directory,
* default subdirectory, or current directory
* had to be used.
*
* @return The directory name.
*
* @see
*/
public static String getDirectory( String envDir,
String defaultSubdirectory,
int[/*1*/] result ) {
// Get the environment variable value.
String envValue = null;
if( prop != null )
envValue = prop.getProperty(envDir);
// If the environment variable is not set, or does not refer to a valid
// directory, then try to use a default.
result[0] = DIRECTORY_OK;
if( envValue == null || envValue.length() == 0 ||
(new File(envValue).exists() && !new File(envValue).isDirectory()) ) {
result[0] = DEFAULT_USED;
// If the default subdirectory is not valid, then use the current directory.
envValue = "."+File.separator+defaultSubdirectory/*#Frozen*/;
if( new File(envValue).exists() && !new File(envValue).isDirectory() ) {
result[0] = DEFAULT_INVALID;
}
}
if(_logger.isLoggable(Level.FINE))
{
String dirType="";
switch(result[0]){
case DEFAULT_INVALID:
dirType="used default, but is invalid";
break;
case DEFAULT_USED :
dirType="used default";
break;
case DIRECTORY_OK:
dirType="provided in configuration";
break;
default:
dirType="invalid type";
break;
}
_logger.logp(Level.FINE,"Configuration","getDirectory()",
"Using directory = " + envValue + " : "+dirType);
}
return envValue;
}
/**Sets the name of the server.
*
* @param name The server name. Non-recoverable servers have null.
*
* @return
*
* @see
*/
public static final void setServerName( String name, boolean recoverableServer ) {
// Store the server name.
serverName = name;
serverNameByteArray = (name == null) ? null : serverName.getBytes();
recoverable = recoverableServer;
if(recoverable) {
RecoveryManager.createRecoveryFile(serverName);
}
if(_logger.isLoggable(Level.FINE)) {
_logger.logp(Level.FINE,"Configuration" ,"setServerName()",
" serverName = " + serverName + "; isRecoverable = " + recoverable);
}
}
/**Returns the name of the server.
*
* Non-recoverable servers may not have a name, in which case the method returns
* null.
*
* @param
*
* @return The server name.
*
* @see
*/
public static final String getServerName() {
// Determine the server name.
String result = serverName;
return result;
}
/**Sets the name of the server for the given log path. Added for delegated
* recovery support.
*
* @param logPath Location, where the logs are stored.
*
* @param name The server name.
*
* @return
*
* @see
*/
public static final void setServerName(String logPath, String name) {
logPathToServernametable.put(logPath, name);
}
/**Returns the name of the server for the given log path. Added for delegated
*recovery support.
*
* @param logPath location of the log files.
*
* @return The server name.
*
* @see
*/
public static final String getServerName(String logPath) {
return (String)logPathToServernametable.get(logPath);
}
/**Returns a byte array with the name of the server.
*
* Non-recoverable servers may not have a name, in which case the method returns
* null.
*
* @param
*
* @return The server name (byte array).
*
* @see
*/
public static final byte [] getServerNameByteArray() {
// Determine the server name.
byte [] result = serverNameByteArray;
return result;
}
/**Sets the Properties object to be used for this JTS instance.
*
* @param prop The Properties.
*
* @return
*
* @see
*/
public static final void setProperties( Properties newProp ) {
// Store the Properties object.
if (prop == null)
prop = newProp;
else if (newProp != null)
prop.putAll(newProp);
if(_logger.isLoggable(Level.FINE)) {
String propertiesList = LogFormatter.convertPropsToString(prop);
_logger.logp(Level.FINE,"Configuration","setProperties()",
" Properties set are :"+ propertiesList);
}
if (prop != null) {
dbLogResource = prop.getProperty(DB_LOG_RESOURCE);
String retryLimit = prop.getProperty(COMMIT_RETRY);
int retriesInMinutes;
if (retryLimit != null) {
retriesInMinutes = Integer.parseInt(retryLimit,10);
if ((retriesInMinutes % (COMMIT_RETRY_WAIT / 1000)) == 0)
retries = (int)(retriesInMinutes / (COMMIT_RETRY_WAIT / 1000));
else
retries = ((int)((retriesInMinutes / (COMMIT_RETRY_WAIT / 1000)))) + 1;
}
}
}
/**Returns the value of the given variable.
*
* @param envValue The environment variable required.
*
* @return The value.
*
* @see
*/
public static final String getPropertyValue( String envValue ) {
// Get the environment variable value.
String result = null;
if( prop != null )
{
result = prop.getProperty(envValue);
if(_logger.isLoggable(Level.FINE))
{
_logger.log(Level.FINE,"Property :"+ envValue +
" has the value : " + result);
}
}
return result;
}
/**Sets the identity of the ORB.
*
* @param newORB The ORB.
*
* @return
*
* @see
*/
public static final void setORB( org.omg.CORBA.ORB newORB ) {
// Store the ORB identity.
orb = newORB;
}
/**Returns the identity of the ORB.
*
* @param
*
* @return The ORB.
*
* @see
*/
public static final org.omg.CORBA.ORB getORB() {
// Return the ORB identity.
return orb;
}
/**Sets the identity of the TransactionFactory and indicates if it is local
* or remote.
*
* @param newFactory The TransactionFactory.
*
* @param localFactory Indicates if the factory is local or remote.
*
* @return
*
* @see
*/
public static final void setFactory( TransactionFactory newFactory,
boolean localTxFactory ) {
// Store the factory identity and if it is local or not.
factory = newFactory;
localFactory = localTxFactory;
}
/**Returns the identity of the TransactionFactory.
*
* @param
*
* @return The TransactionFactory.
*
* @see
*/
public static final TransactionFactory getFactory() {
// Return the TransactionFactory identity.
return factory;
}
/**Determines whether we hava a local factory or a remote factory.
*
* @param
*
* @return Indicates whether we have a local factory.
*
* @see
*/
public static final boolean isLocalFactory() {
// This is a local factory if localFactory is TRUE
boolean result = localFactory;
return result;
}
/**Determines whether the JTS instance is recoverable.
*
* @param
*
* @return Indicates whether the JTS is recoverable.
*
* @see
*/
public static final boolean isRecoverable() {
// This JTS is recoverable if recoverable is set to TRUE.
boolean result = recoverable;
return result;
}
/**Sets the identity of the ProxyChecker.
*
* @param newChecker The new ProxyChecker.
*
* @return
*
* @see
*/
public static final void setProxyChecker( ProxyChecker newChecker ) {
// Store the checker identity.
checker = newChecker;
}
/**Returns the identity of the ProxyChecker.
*
* @param
*
* @return The ProxyChecker.
*
* @see
*/
public static final ProxyChecker getProxyChecker() {
return checker;
}
/**Sets the identity of the log file for the process.
*
* @param logFile The new LogFile object.
*
* @return
*
* @see
*/
public static final void setLogFile( LogFile newLogFile ) {
// Store the logFile identity.
logFile = newLogFile;
}
/**Returns the identity of the LogFile for the process.
*
* @param
*
* @return The LogFile.
*
* @see
*/
public static final LogFile getLogFile() {
return logFile;
}
/**Sets the log file for the given log path. For delegated recovery support.
*
* @param logPath The new LogFile object.
*
* @param newLogFile The new LogFile object.
*
* @return
*
* @see
*/
public static final void setLogFile(String logPath, LogFile newLogFile) {
logPathToFiletable.put(logPath, newLogFile);
}
/**Returns the LogFile for the given log path. For delegated recovery support.
*
* @param logPath log location.
*
* @return The LogFile.
*
* @see
*/
public static final LogFile getLogFile(String logPath) {
if (logPath == null) return null;
return (LogFile)logPathToFiletable.get(logPath);
}
/**Sets the identity of the POA to be used for the given types of object.
*
* @param type The type of objects to use the POA.
* @param POA The POA object.
*
* @return
*
* @see
*/
public static final void setPOA( String type, POA poa ) {
// Store the mapping.
poas.put(type,poa);
}
/**Returns the identity of the POA to be used for the given type of objects.
*
* @param type The type of objects
*
* @return The POA.
*
* @see
*/
public static final POA getPOA( String type ) {
POA result = (POA)poas.get(type);
return result;
}
public static final boolean isTraceEnabled() {
return traceOn;
}
public static final void enableTrace() {
traceOn = true;
}
public static final void disableTrace() {
traceOn = false;
}
// START IASRI 4662745
public static void setKeypointTrigger(int keypoint)
{
CoordinatorLogPool.getCoordinatorLog().setKeypointTrigger(keypoint);
}
public static void setCommitRetryVar(String commitRetryString)
{
// RegisteredResources.setCommitRetryVar(commitRetryString);
if (commitRetryString != null) {
int retriesInMinutes = Integer.parseInt(commitRetryString,10);
if ((retriesInMinutes % (COMMIT_RETRY_WAIT / 1000)) == 0)
retries = (int)(retriesInMinutes / (COMMIT_RETRY_WAIT / 1000));
else
retries = ((int)(retriesInMinutes / (COMMIT_RETRY_WAIT / 1000))) + 1;
}
}
// END IASRI 4662745
public static int getRetries() {
return retries;
}
public static void setAsAppClientConatiner(boolean value) {
isAppClient = value;
}
public static boolean isAppClientContainer() {
return isAppClient;
}
public static boolean isDBLoggingEnabled() {
return (dbLogResource != null);
}
public static void disableFileLogging() {
disableFileLogging = true;
}
public static boolean isFileLoggingDisabled() {
return disableFileLogging;
}
}