You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by jg...@apache.org on 2013/12/05 20:01:28 UTC

svn commit: r1548240 - in /openjpa/branches/2.2.1.x: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/ openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/ openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/kernel/ openjpa-project/src/...

Author: jgrassel
Date: Thu Dec  5 19:01:27 2013
New Revision: 1548240

URL: http://svn.apache.org/r1548240
Log:
OPENJPA-2450: Option to disable execution of ALTER SEQUENCE...INCREMENT BY statement for sequences.

Modified:
    openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/NativeJDBCSeq.java
    openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
    openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/kernel/localizer.properties
    openjpa/branches/2.2.1.x/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml

Modified: openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/NativeJDBCSeq.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/NativeJDBCSeq.java?rev=1548240&r1=1548239&r2=1548240&view=diff
==============================================================================
--- openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/NativeJDBCSeq.java (original)
+++ openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/NativeJDBCSeq.java Thu Dec  5 19:01:27 2013
@@ -83,6 +83,7 @@ public class NativeJDBCSeq
 
     private boolean alterIncrementBy = false;
     private boolean alreadyLoggedAlterSeqFailure = false;
+    private boolean alreadyLoggedAlterSeqDisabled = false;
 
     /**
      * The sequence name. Defaults to <code>OPENJPA_SEQUENCE</code>.
@@ -219,17 +220,29 @@ public class NativeJDBCSeq
         try {
             if (!alterIncrementBy) {
                 DBDictionary dict = _conf.getDBDictionaryInstance();
-                // If this fails, we will warn the user at most one time and set _allocated and _increment to 1 so
-                // as to not potentially insert records ahead of what the database thinks is the next sequence value.
-                if (updateSql(conn, dict.getAlterSequenceSQL(_seq)) == -1) {
-                    if (!alreadyLoggedAlterSeqFailure) {
+                if (!dict.disableAlterSeqenceIncrementBy) {  
+                    // If this fails, we will warn the user at most one time and set _allocated and _increment to 1 so
+                    // as to not potentially insert records ahead of what the database thinks is the next sequence
+                    // value.
+                    if (updateSql(conn, dict.getAlterSequenceSQL(_seq)) == -1) {
+                        if (!alreadyLoggedAlterSeqFailure) {
+                            Log log = _conf.getLog(OpenJPAConfiguration.LOG_RUNTIME);
+                            if (log.isWarnEnabled()) {
+                                log.warn(_loc.get("fallback-no-seq-cache", _seqName));
+                            }
+                        }
+                        alreadyLoggedAlterSeqFailure = true;
+                        _allocate = 1;
+                    }
+                }
+                else{
+                    if (!alreadyLoggedAlterSeqDisabled) {
                         Log log = _conf.getLog(OpenJPAConfiguration.LOG_RUNTIME);
                         if (log.isWarnEnabled()) {
-                            log.warn(_loc.get("fallback-no-seq-cache", _seqName));
+                            log.warn(_loc.get("alter-seq-disabled", _seqName));
                         }
                     }
-                    alreadyLoggedAlterSeqFailure = true;
-                    _allocate = 1;
+                    alreadyLoggedAlterSeqDisabled = true;                    
                 }
             }
             _nextValue = getSequence(conn);

Modified: openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=1548240&r1=1548239&r2=1548240&view=diff
==============================================================================
--- openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java (original)
+++ openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java Thu Dec  5 19:01:27 2013
@@ -218,6 +218,7 @@ public class DBDictionary
     public boolean fullResultCollectionInOrderByRelation = false;
 
     // sql
+    public boolean disableAlterSeqenceIncrementBy=false;
     public String validationSQL = null;
     public String closePoolSQL = null;
     public String initializationSQL = null;

Modified: openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/kernel/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/kernel/localizer.properties?rev=1548240&r1=1548239&r2=1548240&view=diff
==============================================================================
--- openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/kernel/localizer.properties (original)
+++ openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/kernel/localizer.properties Thu Dec  5 19:01:27 2013
@@ -175,4 +175,11 @@ exclude-pagination: Query "{0}" is not c
 fallback-no-seq-cache: Unable to cache sequence values for sequence "{0}". \
     Your application does not have permission to run an ALTER SEQUENCE \
     command. Ensure that it has the appropriate permission to run an \
-    ALTER SEQUENCE command.
\ No newline at end of file
+    ALTER SEQUENCE command.
+alter-seq-disabled: The property "openjpa.jdbc.DBDictionary=disableAlterSeqenceIncrementBy" \
+    is set to true.  This means that the ''ALTER SEQUENCE...INCREMENT BY'' SQL statement \
+    will not be executed for sequence "{0}".  OpenJPA executes this command to ensure that \
+    the sequence''s INCREMENT BY value defined in the database matches the allocationSize \
+    which is defined in the entity''s sequence.  With this SQL statement disabled, it is the \
+    responsibility of the user to ensure that the entity''s sequence definition matches the \
+    sequence defined in the database.
\ No newline at end of file

Modified: openjpa/branches/2.2.1.x/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml
URL: http://svn.apache.org/viewvc/openjpa/branches/2.2.1.x/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml?rev=1548240&r1=1548239&r2=1548240&view=diff
==============================================================================
--- openjpa/branches/2.2.1.x/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml (original)
+++ openjpa/branches/2.2.1.x/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml Thu Dec  5 19:01:27 2013
@@ -1428,6 +1428,30 @@ case of the originally specified name. A
 <literal>upper, lower, preserve.</literal>                	
                 	</para>
                 </listitem>
+                <listitem id="DBDictionary.DisableAlterSeqenceIncrementBy">
+                    <para>
+                    <indexterm>
+                        <primary>
+                            SQL
+                        </primary>
+                        <secondary>
+                            DisableAlterSeqenceIncrementBy
+                        </secondary>
+                    </indexterm>
+<literal>DisableAlterSeqenceIncrementBy</literal>: OpenJPA attempts to execute
+an ALTER SEQUENCE....INCREMENT BY SQL statement for a user defined sequence.  This
+is done to ensure that the 'allocationSize' value defined by the entity's sequence, 
+or default value, matches the sequence defined in the database.  For example, with
+an allocationSize of 1000 for a sequence named 'SEQ_JPASAMPLE', the following SQL
+will be generated (the SQL might vary slightly depending on the databases): 
+<literal>ALTER SEQUENCE SEQ_JPASAMPLE INCREMENT BY 1000</literal>.  If the user
+executing this command doesn't have permissions to execute the command, it will
+fail and in turn OpenJPA will disable sequence caching.  If a user wants to disable
+this SQL command, this property can be set to true.  However, the user must ensure
+that the entities defined sequence is kept in synch with the sequence defined in the
+database.  Defaults to false.
+                    </para>
+                </listitem>                
                 <listitem id="DBDictionary.DistinctCountColumnSeparator">
                     <para>
                     <indexterm>