You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2006/05/09 03:10:37 UTC

svn commit: r405257 - /incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/TransactionResultIteratorDecorator.java

Author: aadamchik
Date: Mon May  8 18:10:36 2006
New Revision: 405257

URL: http://svn.apache.org/viewcvs?rev=405257&view=rev
Log:
CAY-545 - forgot to check in new file

Added:
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/TransactionResultIteratorDecorator.java

Added: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/TransactionResultIteratorDecorator.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/TransactionResultIteratorDecorator.java?rev=405257&view=auto
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/TransactionResultIteratorDecorator.java (added)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/TransactionResultIteratorDecorator.java Mon May  8 18:10:36 2006
@@ -0,0 +1,142 @@
+/* ====================================================================
+ * 
+ * The ObjectStyle Group Software License, version 1.1
+ * ObjectStyle Group - http://objectstyle.org/
+ * 
+ * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors
+ * of the software. 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 acknowlegement:
+ *    "This product includes software developed by independent contributors
+ *    and hosted on ObjectStyle Group web site (http://objectstyle.org/)."
+ *    Alternately, this acknowlegement may appear in the software itself,
+ *    if and wherever such third-party acknowlegements normally appear.
+ * 
+ * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
+ *    or promote products derived from this software without prior written
+ *    permission. For written permission, email
+ *    "andrus at objectstyle dot org".
+ * 
+ * 5. Products derived from this software may not be called "ObjectStyle"
+ *    or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their
+ *    names without prior written permission.
+ * 
+ * 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 OBJECTSTYLE GROUP 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 and hosted on ObjectStyle Group web site.  For more
+ * information on the ObjectStyle Group, please see
+ * <http://objectstyle.org/>.
+ */
+package org.objectstyle.cayenne.access;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.objectstyle.cayenne.CayenneException;
+import org.objectstyle.cayenne.map.DbEntity;
+
+/**
+ * Decorates ResultIterator to close active transaction when the iterator is closed.
+ * 
+ * @since 1.2
+ * @author Andrus Adamchik
+ */
+final class TransactionResultIteratorDecorator implements ResultIterator {
+
+    private ResultIterator result;
+    private Transaction tx;
+
+    public TransactionResultIteratorDecorator(ResultIterator result, Transaction tx) {
+        this.result = result;
+        this.tx = tx;
+    }
+
+    /**
+     * Closes the result and commits the transaction.
+     */
+    public void close() throws CayenneException {
+
+        try {
+            result.close();
+            tx.commit();
+        }
+        catch (Exception e) {
+            try {
+                tx.rollback();
+            }
+            catch (Exception rollbackEx) {
+            }
+
+            throw new CayenneException(e);
+        }
+        finally {
+            if(Transaction.getThreadTransaction() == tx) {
+                Transaction.bindThreadTransaction(null);
+            }
+        }
+    }
+
+    public List dataRows(boolean close) throws CayenneException {
+        List list = new ArrayList();
+
+        try {
+            while (hasNextRow()) {
+                list.add(nextDataRow());
+            }
+        }
+        finally {
+            if (close) {
+                close();
+            }
+        }
+
+        return list;
+    }
+
+    public int getDataRowWidth() {
+        return result.getDataRowWidth();
+    }
+
+    public boolean hasNextRow() throws CayenneException {
+        return result.hasNextRow();
+    }
+
+    public Map nextDataRow() throws CayenneException {
+        return result.nextDataRow();
+    }
+
+    public Map nextObjectId(DbEntity entity) throws CayenneException {
+        return result.nextObjectId(entity);
+    }
+
+    public void skipDataRow() throws CayenneException {
+        result.skipDataRow();
+    }
+}