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/07/07 00:42:57 UTC
svn commit: r419728 -
/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/dba/sybase/SybasePkGenerator.java
Author: aadamchik
Date: Thu Jul 6 15:42:57 2006
New Revision: 419728
URL: http://svn.apache.org/viewvc?rev=419728&view=rev
Log:
CAY-588
Modified:
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/dba/sybase/SybasePkGenerator.java
Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/dba/sybase/SybasePkGenerator.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/dba/sybase/SybasePkGenerator.java?rev=419728&r1=419727&r2=419728&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/dba/sybase/SybasePkGenerator.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/dba/sybase/SybasePkGenerator.java Thu Jul 6 15:42:57 2006
@@ -64,6 +64,7 @@
import org.objectstyle.cayenne.CayenneRuntimeException;
import org.objectstyle.cayenne.access.DataNode;
+import org.objectstyle.cayenne.access.Transaction;
import org.objectstyle.cayenne.dba.JdbcPkGenerator;
import org.objectstyle.cayenne.map.DbEntity;
@@ -166,45 +167,64 @@
}
protected int pkFromDatabase(DataNode node, DbEntity ent) throws Exception {
- Connection connection = node.getDataSource().getConnection();
+ // handle CAY-588 - get connection that is separate from the connection in the
+ // current transaction.
+
+ // TODO (andrus, 7/6/2006) Note that this will still work in a pool with a single
+ // connection, as PK generator is invoked early in the transaction, before the
+ // connection is grabbed for commit... So maybe promote this to other adapters in
+ // 3.0?
+
+ Transaction transaction = Transaction.getThreadTransaction();
+ Transaction.bindThreadTransaction(null);
+
try {
- CallableStatement statement = connection
- .prepareCall("{call auto_pk_for_table(?, ?)}");
- try {
- statement.setString(1, ent.getName());
- statement.setInt(2, super.getPkCacheSize());
- // can't use "executeQuery"
- // per http://jtds.sourceforge.net/faq.html#expectingResultSet
- statement.execute();
- if (statement.getMoreResults()) {
- ResultSet rs = statement.getResultSet();
-
- try {
- if (rs.next()) {
- return rs.getInt(1);
+ Connection connection = node.getDataSource().getConnection();
+ try {
+ CallableStatement statement = connection
+ .prepareCall("{call auto_pk_for_table(?, ?)}");
+ try {
+ statement.setString(1, ent.getName());
+ statement.setInt(2, super.getPkCacheSize());
+
+ // can't use "executeQuery"
+ // per http://jtds.sourceforge.net/faq.html#expectingResultSet
+ statement.execute();
+ if (statement.getMoreResults()) {
+ ResultSet rs = statement.getResultSet();
+
+ try {
+ if (rs.next()) {
+ return rs.getInt(1);
+ }
+ else {
+ throw new CayenneRuntimeException(
+ "Error generating pk for DbEntity "
+ + ent.getName());
+ }
}
- else {
- throw new CayenneRuntimeException(
- "Error generating pk for DbEntity " + ent.getName());
+ finally {
+ rs.close();
}
}
- finally {
- rs.close();
+ else {
+ throw new CayenneRuntimeException(
+ "Error generating pk for DbEntity "
+ + ent.getName()
+ + ", no result set from stored procedure.");
}
}
- else {
- throw new CayenneRuntimeException("Error generating pk for DbEntity "
- + ent.getName()
- + ", no result set from stored procedure.");
+ finally {
+ statement.close();
}
}
finally {
- statement.close();
+ connection.close();
}
}
finally {
- connection.close();
+ Transaction.bindThreadTransaction(transaction);
}
}