weaver 2003/11/26 12:53:35 Modified: plugin/src/java/org/apache/jetspeed/persistence/impl AbstractOJBPersistencePlugin.java OJBODMGPersistencePlugin.java OJBPBPersistencePlugin.java plugin/src/java/org/apache/jetspeed/persistence PersistencePlugin.java Added: plugin/src/java/org/apache/jetspeed/persistence TransactionStateException.java Log: Streamlined the persistence plugin to use thread based transactions as opposed to exposing the transaction object. Revision Changes Path 1.7 +0 -84 jakarta-jetspeed-2/plugin/src/java/org/apache/jetspeed/persistence/impl/AbstractOJBPersistencePlugin.java Index: AbstractOJBPersistencePlugin.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/plugin/src/java/org/apache/jetspeed/persistence/impl/AbstractOJBPersistencePlugin.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- AbstractOJBPersistencePlugin.java 17 Oct 2003 00:38:03 -0000 1.6 +++ AbstractOJBPersistencePlugin.java 26 Nov 2003 20:53:35 -0000 1.7 @@ -106,42 +106,6 @@ private String overrideDefaultJcd; /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#abortTransaction(java.lang.Object) - */ - public abstract void abortTransaction(Object transaction); - - /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#add(java.lang.Object) - */ - public void add(Object object) - { - Object tx = startTransaction(); - addObjectToTransaction(object, tx, LOCK_LEVEL_WRITE); - commitTransaction(tx); - - } - - /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#addObjectToTransaction(java.lang.Object, java.lang.Object) - */ - public abstract void addObjectToTransaction(Object object, Object transaction, int lockLevel); - - /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#commitTransaction(java.lang.Object) - */ - public abstract void commitTransaction(Object transaction); - - /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#delete(java.lang.Object) - */ - public void delete(Object object) - { - Object tx = startTransaction(); - setObjectForDeletion(object, tx); - commitTransaction(tx); - } - - /** * @return <code>true</code> if the <code>obj</code> is * of type AbstractOJBPersistencePlugin and the name defined * within the plugin configuration for <code>obj</code> is the @@ -487,54 +451,6 @@ releaseBroker(pb); } - } - - /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#setObjectForDeletion(java.lang.Object, java.lang.Object) - */ - public abstract void setObjectForDeletion(Object object, Object transaction); - - /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#startTransaction() - */ - public abstract Object startTransaction(); - - /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#update(java.lang.Object) - */ - public void update(Object object) - { - PersistenceBroker pb = null; - try - { - pb = getBroker(); - // 1. remove object from the OJB cache - pb.removeFromCache(object); - - // 2. Start the transaction - Object tx = startTransaction(); - - // 3. retreive a "stale" version of this object from the db - Identity id = new Identity(object, pb); - Object staleObject = pb.getObjectByIdentity(id); - addObjectToTransaction(staleObject, tx, LOCK_LEVEL_WRITE); - - // 4. Map new values to the stale object - BeanUtils.copyProperties(staleObject, object); - - // 5. Commit the transaction - commitTransaction(tx); - pb.removeFromCache(staleObject); - - } - catch (Throwable e) - { - log.error("Unexpected exception thrown while updating object instance", e); - } - finally - { - releaseBroker(pb); - } } public Collection getExtent(Class clazz) 1.4 +145 -140 jakarta-jetspeed-2/plugin/src/java/org/apache/jetspeed/persistence/impl/OJBODMGPersistencePlugin.java Index: OJBODMGPersistencePlugin.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/plugin/src/java/org/apache/jetspeed/persistence/impl/OJBODMGPersistencePlugin.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- OJBODMGPersistencePlugin.java 17 Oct 2003 00:52:09 -0000 1.3 +++ OJBODMGPersistencePlugin.java 26 Nov 2003 20:53:35 -0000 1.4 @@ -56,12 +56,13 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.fulcrum.InitializationException; +import org.apache.jetspeed.persistence.*; import org.apache.jetspeed.persistence.LookupCriteria; import org.apache.jetspeed.persistence.ODMGPersistencePlugin; import org.apache.jetspeed.persistence.PersistenceService; import org.apache.jetspeed.services.plugin.PluginConfiguration; -import org.apache.ojb.broker.Identity; + import org.apache.ojb.broker.PersistenceBroker; import org.apache.ojb.odmg.OJB; import org.apache.ojb.odmg.TransactionImpl; @@ -79,80 +80,160 @@ * @author <a href="mailto:[EMAIL PROTECTED]">Scott T. Weaver</a> */ public class OJBODMGPersistencePlugin extends AbstractOJBPersistencePlugin implements ODMGPersistencePlugin -{ +{ - private static final Log log = LogFactory.getLog(OJBODMGPersistencePlugin.class); + private static final Log log = LogFactory.getLog(OJBODMGPersistencePlugin.class); - private String overrideDefaultJcd; - private PluginConfiguration configuration; - private String persistenceApi; - private Implementation odmg; - private Database db; - private PersistenceService ps; + private String overrideDefaultJcd; + private PluginConfiguration configuration; + private String persistenceApi; + private Implementation odmg; + private Database db; + private PersistenceService ps; + + private ThreadLocal TLtx; /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#abortTransaction(java.lang.Object) + * @see com.rippe.essential.agora.services.entity.AgoraEntityService#beginTransaction() */ - public void abortTransaction(Object transaction) + public void beginTransaction() throws TransactionStateException { - Transaction tx = (Transaction) transaction; - tx.abort(); - } + if (TLtx == null || TLtx.get() == null) + { + if (TLtx == null) + { + TLtx = new ThreadLocal(); + } + Transaction tx = null; + + try + { + tx = odmg.newTransaction(); + tx.begin(); + TLtx.set(tx); + } + catch (Exception e) + { + if (tx != null) + { + tx.abort(); + + } + log.fatal("beginTransaction() failed.", e); + throw new TransactionStateException("beginTransaction() failed.", e); + } + } + } /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#addObjectToTransaction(java.lang.Object, java.lang.Object) + * @see com.rippe.essential.agora.services.entity.AgoraEntityService#commitTransaction(java.lang.Object) */ - public void addObjectToTransaction(Object object, Object transaction, int lockLevel) + public void commitTransaction() throws TransactionStateException { - int useLevel = -1; - - switch (lockLevel) + Transaction tx = (Transaction) TLtx.get(); + try { - case LOCK_LEVEL_READ : - useLevel = Transaction.READ; - break; - default : - useLevel = Transaction.WRITE; - break; + if (tx == null) + { + throw new TransactionStateException("Transaction is null for this thread."); + } + + if (!tx.isOpen()) + { + throw new TransactionStateException(tx + " is not in open."); + } + + tx.commit(); + } + catch (Exception e) + { + log.error("Unable to commit transaction " + e.toString(), e); + tx.abort(); + throw new TransactionStateException("Unable to commit transaction " + e.toString(), e); } + finally + { + if (tx != null) + { + TLtx.set(null); - Transaction tx = (Transaction) transaction; - tx.lock(object, useLevel); + } + } } - - /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#commitTransaction(java.lang.Object) - */ - public void commitTransaction(Object transaction) + public void prepareForDelete(Object obj) throws TransactionStateException { - Transaction tx = (Transaction) transaction; - tx.commit(); - System.out.print(""); - } + Transaction tx = null; + if (TLtx == null || TLtx.get() == null) + { + throw new TransactionStateException("You can not mark objects for delete before a Transaction has been started."); + } + else + { + try + { + tx = (Transaction) TLtx.get(); + tx.lock(obj, Transaction.WRITE); + db.deletePersistent(obj); + } + catch (Exception e) + { + throw new TransactionStateException("Unable to set object for deletion " + e.toString(), e); + } + } + } /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#setObjectForDeletion(java.lang.Object, java.lang.Object) + * @see com.rippe.essential.agora.services.entity.AgoraEntityService#update(java.lang.Object) */ - public void setObjectForDeletion(Object object, Object transaction) + public void prepareForUpdate(Object obj) throws TransactionStateException { - Transaction tx = (Transaction) transaction; - tx.lock(object, Transaction.WRITE); - db.deletePersistent(object); - } + Transaction tx = null; + if (TLtx == null || TLtx.get() == null) + { + throw new TransactionStateException("You can not mark objects for update before a Transaction has been started."); + } + else + { + try + { + tx = (Transaction) TLtx.get(); + tx.lock(obj, Transaction.WRITE); + } + catch (Exception e) + { + throw new TransactionStateException("Unable to set object for update " + e.toString(), e); + } + } + } /** - * This plug in uses ODMG to bacl its transactions. - * - * @return <code>org.odmg.Transaction</code> - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#startTransaction() - * + * @see com.rippe.essential.agora.services.entity.AgoraEntityService#rollbackTranaction(java.lang.Object) */ - public Object startTransaction() + public void rollbackTransaction() throws TransactionStateException { - Transaction tx = odmg.newTransaction(); - tx.begin(); - return tx; + Transaction tx = (Transaction) TLtx.get(); + try + { + if (tx != null && tx.isOpen()) + { + tx.abort(); + TLtx.set(null); + } + else + { + log.warn("Unable to rollback null or not-in-progess connection"); + } + + } + catch (Exception e) + { + if (e instanceof TransactionStateException) + { + throw (TransactionStateException) e; + } + throw new TransactionStateException("Unable to rollback transaction " + tx + " " + e.toString(), e); + } } protected void initODMG() throws InitializationException @@ -198,88 +279,6 @@ } /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#update(java.lang.Object) - */ - public void update(Object object) - { - - try - { - - // 1. Start the transaction - TransactionImpl tx = (TransactionImpl) odmg.newTransaction(); - tx.begin(); - - // 2. remove object from the OJB cache - PersistenceBroker pb = tx.getBroker(); - //pb.removeFromCache(object); - - tx.markDirty(object); - - // 3. retreive a "stale" version of this object from the db - Identity id = new Identity(object, pb); - //Object staleObject = pb.getObjectByIdentity(id); - // addObjectToTransaction(staleObject, tx, LOCK_LEVEL_WRITE); - tx.lock(object, Transaction.WRITE); - - // 4. Map new values to the stale object - //BeanUtils.copyProperties(object, object); - - // 5. Commit the transaction - tx.commit(); - - } - catch (Throwable e) - { - log.error("Unexpected exception thrown while updating object instance", e); - } - - } - - /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#delete(java.lang.Object) - */ - public void delete(Object object) - { - // // PersistenceBroker pb1 = getBroker(); - // try - // { - // // 1. Start the transaction - // TransactionImpl tx = (TransactionImpl) odmg.newTransaction(); - // - // // 2. remove object from the OJB cache - // - // tx.begin(); - // PersistenceBroker pb = tx.getBroker(); - // pb.removeFromCache(object); - // Identity id = new Identity(object, pb); - // // 3. retreive a "stale" version of this object from the db - // - // Object staleObject = pb.getObjectByIdentity(id); - // tx.lock(staleObject, Transaction.WRITE); - // db.deletePersistent(staleObject); - // pb.removeFromCache(staleObject); - // - // // 5. Commit the transaction - // tx.commit(); - // } - // finally - // { - // // releaseBroker(pb1); - // } - PersistenceBroker pb = getBroker(); - try - { - pb.delete(object); - } - finally - { - releaseBroker(pb); - } - - } - - /** * @see org.apache.jetspeed.services.persistence.ODMGPersistencePlugin#newODMGTransaction() */ public Transaction newODMGTransaction() @@ -296,15 +295,21 @@ } /** - * @see org.apache.jetspeed.services.persistence.PersistencePlugin#add(java.lang.Object) + * @see org.apache.jetspeed.persistence.PersistencePlugin#makeObjectConsistent(java.lang.Object) */ - public void add(Object object) + public Object markDirty(Object obj) throws TransactionStateException { - Transaction tx = odmg.newTransaction(); - tx.begin(); - tx.lock(object, Transaction.WRITE); - tx.commit(); - + TransactionImpl ojbTx = (TransactionImpl) TLtx.get(); + if(ojbTx != null && ojbTx.isOpen() ) + { + ojbTx.markDirty(obj); + return obj; + } + else + { + throw new TransactionStateException("No transaction in progress"); + } + } } 1.3 +31 -70 jakarta-jetspeed-2/plugin/src/java/org/apache/jetspeed/persistence/impl/OJBPBPersistencePlugin.java Index: OJBPBPersistencePlugin.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/plugin/src/java/org/apache/jetspeed/persistence/impl/OJBPBPersistencePlugin.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- OJBPBPersistencePlugin.java 15 Aug 2003 18:37:14 -0000 1.2 +++ OJBPBPersistencePlugin.java 26 Nov 2003 20:53:35 -0000 1.3 @@ -58,6 +58,7 @@ import java.util.Iterator; import org.apache.fulcrum.InitializationException; +import org.apache.jetspeed.persistence.TransactionStateException; import org.apache.ojb.broker.PersistenceBroker; /** @@ -65,111 +66,71 @@ * provide persistence operations. transaction support * is provided straight through RDBMS. * + * @deprecated Currently unimplemented. DO NOT USE!!! * @author <a href="mailto:[EMAIL PROTECTED]">Scott T. Weaver</a> */ public class OJBPBPersistencePlugin extends AbstractOJBPersistencePlugin { /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#abortTransaction(java.lang.Object) + * @see org.apache.jetspeed.services.perisistence.impl.AbstractOJBPersistencePlugin#postInit() */ - public void abortTransaction(Object transaction) + protected void postInit() throws InitializationException { - PersistenceBroker pb = getBroker(); - try - { - transaction = null; - pb.abortTransaction(); - } - finally - { - releaseBroker(pb); - } - + // nothing needs to be done } /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#addObjectToTransaction(java.lang.Object, java.lang.Object, int) + * @see org.apache.jetspeed.persistence.PersistencePlugin#beginTransaction() */ - public void addObjectToTransaction(Object object, Object transaction, int lockLevel) + public void beginTransaction() throws TransactionStateException { - HashMap transactions = (HashMap) transaction; - ArrayList list = (ArrayList) transactions.get("add"); - list.add(object); + throw new UnsupportedOperationException("Not Implemented!"); + } /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#commitTransaction(java.lang.Object) + * @see org.apache.jetspeed.persistence.PersistencePlugin#commitTransaction() */ - public void commitTransaction(Object transaction) + public void commitTransaction() throws TransactionStateException { + throw new UnsupportedOperationException("Not Implemented!"); - HashMap transactions = (HashMap) transaction; - PersistenceBroker pb = (PersistenceBroker) transactions.get("pb"); - Iterator deletes = ((ArrayList) transactions.get("delete")).iterator(); - Iterator adds = ((ArrayList) transactions.get("add")).iterator(); - try - { - // process update/add operations - while (adds.hasNext()) - { - Object object = adds.next(); - pb.store(object); - } - - // process delete operations - while (deletes.hasNext()) - { - pb.delete(deletes.next()); - } - - pb.commitTransaction(); - } - finally - { - releaseBroker(pb); - } + } + /** + * @see org.apache.jetspeed.persistence.PersistencePlugin#markDirty(java.lang.Object) + */ + public Object markDirty(Object obj) throws TransactionStateException + { + throw new UnsupportedOperationException("Not Implemented!"); } /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#setObjectForDeletion(java.lang.Object, java.lang.Object) + * @see org.apache.jetspeed.persistence.PersistencePlugin#prepareForDelete(java.lang.Object) */ - public void setObjectForDeletion(Object object, Object transaction) + public void prepareForDelete(Object obj) throws TransactionStateException { - HashMap transactions = (HashMap) transaction; - ArrayList list = (ArrayList) transactions.get("delete"); - list.add(object); + throw new UnsupportedOperationException("Not Implemented!"); + } /** - * @see org.apache.jetspeed.services.perisistence.PersistencePlugin#startTransaction() + * @see org.apache.jetspeed.persistence.PersistencePlugin#prepareForUpdate(java.lang.Object) */ - public Object startTransaction() + public void prepareForUpdate(Object obj) throws TransactionStateException { - try - { - HashMap transactions = new HashMap(2); - transactions.put("add", new ArrayList()); - transactions.put("delete", new ArrayList()); - PersistenceBroker pb = getBroker(); - pb.beginTransaction(); - transactions.put("pb", pb); - return transactions; - } - catch (Exception e) - { - e.printStackTrace(); - throw new JetspeedOJBRuntimeException(e); - } + throw new UnsupportedOperationException("Not Implemented!"); + } /** - * @see org.apache.jetspeed.services.perisistence.impl.AbstractOJBPersistencePlugin#postInit() + * @see org.apache.jetspeed.persistence.PersistencePlugin#rollbackTransaction() */ - protected void postInit() throws InitializationException + public void rollbackTransaction() throws TransactionStateException { - // nothing needs to be done + throw new UnsupportedOperationException("Not Implemented!"); + } } 1.4 +23 -95 jakarta-jetspeed-2/plugin/src/java/org/apache/jetspeed/persistence/PersistencePlugin.java Index: PersistencePlugin.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/plugin/src/java/org/apache/jetspeed/persistence/PersistencePlugin.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- PersistencePlugin.java 17 Oct 2003 00:38:21 -0000 1.3 +++ PersistencePlugin.java 26 Nov 2003 20:53:35 -0000 1.4 @@ -87,100 +87,28 @@ /** Constant that specifies a transaction lock level of read */ int LOCK_LEVEL_READ = 1; - - /** - * <p> - * Starts a transaction to which objects being persisted through this plugin - * can be added to using the <code>addObjectToTransaction()</code> method. - * <br/> - * You should not perform operations directly on the returned transaction, instead - * use the methods supplied through the <code>PersistencePlugin</code> - * interface. - * </p> - * <p> - * <strong>NOTE:<strong> Transaction support is not a requirement to creating - * a PersistencePlugin. However, since almost all apis that support transactions - * require that objects be modified within a transaction for there changes to be persisted - * (requirements of both ODMG and JDO). So it is a good idea to perform these - * operations within a transaction regardless of whether or not transactions are supported - * by this plugin. Plugins not providing transactions should return a <code>NullTransaction</code>. - * object. In addition they should also handle the <code>NullTransaction</code> object - * gracefully within any plugin methods that deal directly with transaction i.e. ignore it - * entirely with no exceptions being thrown. - * </p> - * - * @return Object reflecting a transaction object specific to this plugin. - */ - Object startTransaction(); - - /** - * Adds an <code>object</code> to the <code>transaction</code> - * started by this plugin's <code>startTransaction()</code> method. - * @param object Object to be added to the transaction - * @param transaction Transaction object started by this plugin's startTransaction method - */ - void addObjectToTransaction(Object object, Object transaction, int lockLevel); - - /** - * Sets the <code>object</code> for deletion within the current - * <code>treansaction</code>. Upon invoking the <code>commitTransaction()</code> - * method, all objects scheduled for deletion are removed from persisteance. - * Child objects and/or collections maybe removed/deleted - * if the underlying api provides support for cascading deletes. - * @param object Object to be scheduled for deletion - * @param transaction Current transaction. - */ - void setObjectForDeletion(Object object, Object transaction); - - /** - * Aborts an existing transaction and all changes should be rolled back by the - * underlying api, if transaction are supported. - * - * @param transaction Transaction to abort. - */ - void abortTransaction(Object transaction); - - /** - * Commits all changes made to objects that were added to the - * current transaction via the <code>addObjectToTransaction()</code> - * method and deletes all objects that have been scheduled for deletion - * via the <code>setObjectForDeletion()</code> method. - * @param transaction Transaction to be commited. - */ - void commitTransaction(Object transaction); - - /** - * Convenience method that updates a persistent object. If this PersistencePlugin supports - * tranasctions, it should create an atomic transaction for updating this - * object and commit it. This transaction will ONLY include this object - * and possibly child object and/or collections, if the underlying api or - * persistence mechanism supports it. - * <br/> - * <strong>NOTE:</strong>There is no need to perform this within a - * transaction and may cause unexpected object locl contention if it is - * used within a transaction. - * - * @param object persistent object to be updated - */ - void update(Object object); - - /** - * Convenience method that makes a previously non-persistent object persistent. - * You should follow the same guidelines set - * forth by the <code>update()</code> method in regards to transactions. - * @param object Object to be persisted. - */ - void add(Object object); - - /** - * Convenience method that removes a persistent object. This operation - * should be considered atomic as both <code>add()</code> and <code>update()</code> - * with regards to transactions. Child objects and/or collections maybe removed - * if the underlying api provides support for cascading deletes. - * - * @param object Object that will be removed from persistence. - */ - void delete(Object object); + + void beginTransaction() throws TransactionStateException; + + void commitTransaction() throws TransactionStateException; + + void prepareForDelete(Object obj) throws TransactionStateException; + + void prepareForUpdate(Object obj) throws TransactionStateException; + + void rollbackTransaction() throws TransactionStateException; + + /** + * Takes an object that was modified outside of the current transaction + * and makes it so that it appears to have been modified within the + * current transaction. + * @param obj Object modified outside of a transaction + * @return An object the same type, whose object graph match those + * of the <code>obj</code> argument but is consistent within the + * current transaction. + * @throws TransactionStateException + */ + Object markDirty(Object obj) throws TransactionStateException; Collection getCollectionByQuery(Class clazz, Object query); 1.1 jakarta-jetspeed-2/plugin/src/java/org/apache/jetspeed/persistence/TransactionStateException.java Index: TransactionStateException.java =================================================================== /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2000-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache Jetspeed" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache Jetspeed", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ package org.apache.jetspeed.persistence; import org.apache.commons.lang.exception.NestableException; /** * <p> * TransactionStateException * </p> * * @author <a href="mailto:[EMAIL PROTECTED]">Scott T. Weaver</a> * @version $Id: TransactionStateException.java,v 1.1 2003/11/26 20:53:35 weaver Exp $ * */ public class TransactionStateException extends NestableException { /** * */ public TransactionStateException() { super(); } /** * @param arg0 */ public TransactionStateException(String arg0) { super(arg0); } /** * @param arg0 */ public TransactionStateException(Throwable arg0) { super(arg0); } /** * @param arg0 * @param arg1 */ public TransactionStateException(String arg0, Throwable arg1) { super(arg0, arg1); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]