001 /* 002 * Copyright 2014-2015 UnboundID Corp. 003 * All Rights Reserved. 004 */ 005 /* 006 * Copyright (C) 2015 UnboundID Corp. 007 * 008 * This program is free software; you can redistribute it and/or modify 009 * it under the terms of the GNU General Public License (GPLv2 only) 010 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only) 011 * as published by the Free Software Foundation. 012 * 013 * This program is distributed in the hope that it will be useful, 014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 016 * GNU General Public License for more details. 017 * 018 * You should have received a copy of the GNU General Public License 019 * along with this program; if not, see <http://www.gnu.org/licenses>. 020 */ 021 package com.unboundid.ldap.sdk.unboundidds.controls; 022 023 024 025 import com.unboundid.util.ThreadSafety; 026 import com.unboundid.util.ThreadSafetyLevel; 027 028 029 030 /** 031 * <BLOCKQUOTE> 032 * <B>NOTE:</B> This class is part of the Commercial Edition of the UnboundID 033 * LDAP SDK for Java. It is not available for use in applications that 034 * include only the Standard Edition of the LDAP SDK, and is not supported for 035 * use in conjunction with non-UnboundID products. 036 * </BLOCKQUOTE> 037 * This enum defines the options that may be specified to indicate whether and 038 * when to acquire an exclusive lock in the target backend when processing a 039 * transaction. 040 * 041 * @see TransactionSettingsRequestControl 042 */ 043 @ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE) 044 public enum TransactionSettingsBackendLockBehavior 045 { 046 /** 047 * Indicates that the server should not make any attempt to acquire an 048 * exclusive lock in the target backend, whether during the initial attempt or 049 * a subsequent retry. This will allow the highest level of concurrency for 050 * operations within the backend, but may increase the risk of lock conflicts 051 * between transactions in a server processing many operations concurrently. 052 * This risk may be mitigated by indicating that the transaction should be 053 * retried one or more times. 054 */ 055 DO_NOT_ACQUIRE(0), 056 057 058 059 /** 060 * Indicates that if the server is unable to successfully commit the 061 * associated transaction after one or more attempts without holding an 062 * exclusive lock in the target backend, then it should make one more attempt 063 * after acquiring the lock. This will avoid the need to acquire the lock 064 * unless the maximum number of attempts have been unsuccessful without it. 065 */ 066 ACQUIRE_AFTER_RETRIES(1), 067 068 069 070 /** 071 * Indicates that if the server is unable to successfully commit the 072 * associated transaction after the first attempt without holding an exclusive 073 * lock in the target backend, then it should make one or more 074 * additional attempts (as specified by the requested number of retries) after 075 * acquiring the lock. This will avoid the need to acquire the lock for 076 * operations that can be completed on the first attempt without it. 077 */ 078 ACQUIRE_BEFORE_RETRIES(2), 079 080 081 082 /** 083 * Indicates that the server should acquire an exclusive lock in the target 084 * backend before performing any backend processing for the operation. This 085 * will limit concurrency, as the backend will not be able to process any 086 * other operation while the associated operation is in progress, but this 087 * will also minimize the chance of a thread deadlock or lock timeout as a 088 * result of a conflict between database interactions from multiple 089 * simultaneous operations. 090 */ 091 ACQUIRE_BEFORE_INITIAL_ATTEMPT(3); 092 093 094 095 // The integer value for this backend lock behavior. 096 private final int intValue; 097 098 099 100 /** 101 * Creates a new transaction settings backend lock behavior with the provided 102 * integer value. 103 * 104 * @param intValue The integer value for this backend lock behavior. 105 */ 106 private TransactionSettingsBackendLockBehavior(final int intValue) 107 { 108 this.intValue = intValue; 109 } 110 111 112 113 /** 114 * Retrieves the integer value for this transaction settings backend lock 115 * behavior value. 116 * 117 * @return The integer value for this transaction settings backend lock 118 * behavior value. 119 */ 120 public int intValue() 121 { 122 return intValue; 123 } 124 125 126 127 /** 128 * Retrieves the backend lock behavior value with the specified integer value. 129 * 130 * @param intValue The integer value for the backend lock behavior to 131 * retrieve. 132 * 133 * @return The backend lock behavior value with the specified integer value, 134 * or {@code null} if there is no such backend lock behavior value. 135 */ 136 public static TransactionSettingsBackendLockBehavior 137 valueOf(final int intValue) 138 { 139 for (final TransactionSettingsBackendLockBehavior v : values()) 140 { 141 if (v.intValue == intValue) 142 { 143 return v; 144 } 145 } 146 147 return null; 148 } 149 }