001: /*
002: * Copyright 2002-2006 the original author or authors.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016:
017: package org.springframework.orm;
018:
019: import org.springframework.dao.OptimisticLockingFailureException;
020:
021: /**
022: * Exception thrown on an optimistic locking violation for a mapped object.
023: * Provides information about the persistent class and the identifier.
024: *
025: * @author Juergen Hoeller
026: * @since 13.10.2003
027: */
028: public class ObjectOptimisticLockingFailureException extends
029: OptimisticLockingFailureException {
030:
031: private Object persistentClass;
032:
033: private Object identifier;
034:
035: /**
036: * Create a general ObjectOptimisticLockingFailureException with the given message,
037: * without any information on the affected object.
038: * @param msg the detail message
039: * @param cause the source exception
040: */
041: public ObjectOptimisticLockingFailureException(String msg,
042: Throwable cause) {
043: super (msg, cause);
044: }
045:
046: /**
047: * Create a new ObjectOptimisticLockingFailureException for the given object,
048: * with the default "optimistic locking failed" message.
049: * @param persistentClass the persistent class
050: * @param identifier the ID of the object for which the locking failed
051: */
052: public ObjectOptimisticLockingFailureException(
053: Class persistentClass, Object identifier) {
054: this (persistentClass, identifier, null);
055: }
056:
057: /**
058: * Create a new ObjectOptimisticLockingFailureException for the given object,
059: * with the default "optimistic locking failed" message.
060: * @param persistentClass the persistent class
061: * @param identifier the ID of the object for which the locking failed
062: * @param cause the source exception
063: */
064: public ObjectOptimisticLockingFailureException(
065: Class persistentClass, Object identifier, Throwable cause) {
066:
067: this (persistentClass, identifier, "Object of class ["
068: + persistentClass.getName() + "] with identifier ["
069: + identifier + "]: optimistic locking failed", cause);
070: }
071:
072: /**
073: * Create a new ObjectOptimisticLockingFailureException for the given object,
074: * with the given explicit message.
075: * @param persistentClass the persistent class
076: * @param identifier the ID of the object for which the locking failed
077: * @param msg the detail message
078: * @param cause the source exception
079: */
080: public ObjectOptimisticLockingFailureException(
081: Class persistentClass, Object identifier, String msg,
082: Throwable cause) {
083:
084: super (msg, cause);
085: this .persistentClass = persistentClass;
086: this .identifier = identifier;
087: }
088:
089: /**
090: * Create a new ObjectOptimisticLockingFailureException for the given object,
091: * with the default "optimistic locking failed" message.
092: * @param persistentClassName the name of the persistent class
093: * @param identifier the ID of the object for which the locking failed
094: */
095: public ObjectOptimisticLockingFailureException(
096: String persistentClassName, Object identifier) {
097: this (persistentClassName, identifier, null);
098: }
099:
100: /**
101: * Create a new ObjectOptimisticLockingFailureException for the given object,
102: * with the default "optimistic locking failed" message.
103: * @param persistentClassName the name of the persistent class
104: * @param identifier the ID of the object for which the locking failed
105: * @param cause the source exception
106: */
107: public ObjectOptimisticLockingFailureException(
108: String persistentClassName, Object identifier,
109: Throwable cause) {
110:
111: this (persistentClassName, identifier, "Object of class ["
112: + persistentClassName + "] with identifier ["
113: + identifier + "]: optimistic locking failed", cause);
114: }
115:
116: /**
117: * Create a new ObjectOptimisticLockingFailureException for the given object,
118: * with the given explicit message.
119: * @param persistentClassName the name of the persistent class
120: * @param identifier the ID of the object for which the locking failed
121: * @param msg the detail message
122: * @param cause the source exception
123: */
124: public ObjectOptimisticLockingFailureException(
125: String persistentClassName, Object identifier, String msg,
126: Throwable cause) {
127:
128: super (msg, cause);
129: this .persistentClass = persistentClassName;
130: this .identifier = identifier;
131: }
132:
133: /**
134: * Return the persistent class of the object for which the locking failed.
135: * If no Class was specified, this method returns null.
136: */
137: public Class getPersistentClass() {
138: return (this .persistentClass instanceof Class ? (Class) this .persistentClass
139: : null);
140: }
141:
142: /**
143: * Return the name of the persistent class of the object for which the locking failed.
144: * Will work for both Class objects and String names.
145: */
146: public String getPersistentClassName() {
147: if (this .persistentClass instanceof Class) {
148: return ((Class) this .persistentClass).getName();
149: }
150: return (this .persistentClass != null ? this .persistentClass
151: .toString() : null);
152: }
153:
154: /**
155: * Return the identifier of the object for which the locking failed.
156: */
157: public Object getIdentifier() {
158: return identifier;
159: }
160:
161: }
|