diff --git a/RELEASING.md b/RELEASING.md new file mode 100644 index 0000000..a7ddd36 --- /dev/null +++ b/RELEASING.md @@ -0,0 +1,46 @@ +RELEASING +========= + +This file outlines how to publish a new release to Maven Central. + +Prerequisites +------------- + +* You will need the Carbonado GPG key and passphrase to continue. Contact + @jesterpm or @pranaydalmia to obtain them. + +* You will need an account with Sonatype Nexus. You can create that + [here](https://issues.sonatype.org/secure/Signup!default.jspa). Contact + @jesterpm or @pranaydalmia for access to the Carbonado repository. + +Process +------- + +1. Increment the version number appropriately. + Use [Semantic Versioning](http://semver.org/). + + VERSION=1.2.4 + mvn versions:set -DnewVersion=$VERSION + +2. Verify the release and make sure all is well. + + mvn clean verify -P release + +3. Commit and tag the latest release. + + git commit -am "Release $VERSION" + git tag -a v$VERSION -m "Release $VERSION" + +4. Deploy to Sonatype: + + mvn clean deploy -P release + +5. Push commit and tag to GitHub + + git push origin master + git push origin v$VERSION + +6. Create a new Releases on GitHub. Use the tag you just created and optionally + include a change log. Attach the compiled, sources, and javadoc jar files, + along with the .asc signature files. + diff --git a/pom.xml b/pom.xml index 565f5e9..8c2dca1 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ carbonado jar Carbonado - 1.3 + 1.3.1 Extensible, high performance persistence abstraction layer for Java applications with a relational view to the underlying persistence technology. @@ -201,6 +201,31 @@ 1.7 + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + 1.7 + false + + http://docs.oracle.com/javase/7/docs/api + + true + + + + attach-javadocs + + jar + + + -Xdoclint:none + + + + @@ -277,4 +302,59 @@ + + + + release + + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + + jar-no-fork + + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + 2753E2C6 + + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.3 + true + + ossrh + https://oss.sonatype.org/ + true + + + + + + + diff --git a/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCTransaction.java b/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCTransaction.java index ffa2e5c..00e6947 100644 --- a/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCTransaction.java +++ b/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCTransaction.java @@ -106,10 +106,17 @@ void commit() throws SQLException { } /** - * @return connection to close, or null if not ready to because this was a - * nested transaction + * @return true if the connection should be closed after the transaction is aborted. */ - Connection abort() throws SQLException { + boolean shouldCloseConnection() { + return !mIsNested; + } + + /** + * Note: The caller should close the connection after aborting if + * shouldCloseConnection() returns true. + */ + void abort() throws SQLException { if (mRegisteredLobs != null) { for (JDBCLob lob : mRegisteredLobs) { lob.close(); @@ -134,13 +141,11 @@ Connection abort() throws SQLException { } } - return null; } else { if (mReady) { mConnection.rollback(); mReady = false; } - return mConnection; } } diff --git a/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCTransactionManager.java b/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCTransactionManager.java index c649058..9fe2ff4 100644 --- a/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCTransactionManager.java +++ b/src/main/java/com/amazon/carbonado/repo/jdbc/JDBCTransactionManager.java @@ -97,18 +97,30 @@ protected boolean commitTxn(JDBCTransaction txn) throws PersistException { @Override protected void abortTxn(JDBCTransaction txn) throws PersistException { + PersistException ex = null; + try { - Connection con; - if ((con = txn.abort()) != null) { - JDBCRepository repo = mRepositoryRef.get(); - if (repo == null) { - con.close(); - } else { - repo.closeConnection(con); + txn.abort(); + } catch (Throwable e) { + ex = mExTransformer.toPersistException(e); + throw ex; + } finally { + try { + if (txn.shouldCloseConnection()) { + Connection con = txn.getConnection(); + JDBCRepository repo = mRepositoryRef.get(); + if (repo == null) { + con.close(); + } else { + repo.closeConnection(con); + } + } + } catch (Throwable e) { + // Don't lose the original exception. + if (ex == null) { + throw mExTransformer.toPersistException(e); } } - } catch (Throwable e) { - throw mExTransformer.toPersistException(e); } } }