Added:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/JPA2LockManager.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/JPA2LockManager.java?rev=747489&view=auto
==============================================================================
---
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/JPA2LockManager.java
(added)
+++
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/JPA2LockManager.java
Tue Feb 24 18:48:09 2009
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.persistence;
+
+import org.apache.openjpa.conf.OpenJPAConfiguration;
+import org.apache.openjpa.jdbc.kernel.PessimisticLockManager;
+import org.apache.openjpa.jdbc.sql.Select;
+import org.apache.openjpa.kernel.LockLevels;
+import org.apache.openjpa.kernel.OpenJPAStateManager;
+import org.apache.openjpa.lib.log.Log;
+
+/**
+ * Test JPA 2.0 LockTypeMode semantics using JPA 2.0 "jpa2"
+ * lock manager.
+ *
+ * @author Albert Lee
+ * @since 2.0.0
+ */
+public class JPA2LockManager extends PessimisticLockManager {
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.openjpa.jdbc.kernel.PessimisticLockManager
+ * #selectForUpdate(org.apache.openjpa.jdbc.sql.Select,int)
+ */
+ public boolean selectForUpdate(Select sel, int lockLevel) {
+ return (lockLevel >= JPA2LockLevels.LOCK_PESSIMISTIC_READ)
+ ? super.selectForUpdate(sel, lockLevel) : false;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.openjpa.jdbc.kernel.PessimisticLockManager#
+ * lockInternal(org.apache.openjpa.kernel.OpenJPAStateManager, int, int,
+ * java.lang.Object)
+ */
+ protected void lockInternal(OpenJPAStateManager sm, int level, int timeout,
+ Object sdata) {
+ if (level >= JPA2LockLevels.LOCK_PESSIMISTIC_FORCE_INCREMENT) {
+ setVersionCheckOnReadLock(true);
+ setVersionUpdateOnWriteLock(true);
+ super.lockInternal(sm, level, timeout, sdata);
+ } else if (level >= JPA2LockLevels.LOCK_PESSIMISTIC_READ) {
+ setVersionCheckOnReadLock(true);
+ setVersionUpdateOnWriteLock(false);
+ super.lockInternal(sm, level, timeout, sdata);
+ } else if (level >= JPA2LockLevels.LOCK_OPTIMISTIC) {
+ setVersionCheckOnReadLock(true);
+ setVersionUpdateOnWriteLock(true);
+ optimisticLockInternal(sm, level, timeout, sdata);
+ }
+ }
+}
Propchange:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/JPA2LockManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/LockTimeoutException.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/LockTimeoutException.java?rev=747489&view=auto
==============================================================================
---
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/LockTimeoutException.java
(added)
+++
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/LockTimeoutException.java
Tue Feb 24 18:48:09 2009
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.persistence;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.io.Serializable;
+
+import org.apache.openjpa.util.ExceptionInfo;
+import org.apache.openjpa.util.Exceptions;
+import org.apache.openjpa.util.StoreException;
+
+/**
+ * Pessimistic lock timeout violation.
+ *
+ * @since 2.0.0
+ * @nojavadoc
+ */
+public class LockTimeoutException
+ extends javax.persistence.LockTimeoutException
+ implements Serializable, ExceptionInfo {
+
+ private static final long serialVersionUID = -3221030392419625394L;
+
+ private transient boolean _fatal = false;
+ private transient Object _failed = null;
+ private transient Throwable[] _nested = null;
+
+ public LockTimeoutException(String msg, Throwable[] nested,
+ Object failed, boolean fatal) {
+ super(msg);
+ _nested = nested;
+ _failed = failed;
+ _fatal = fatal;
+ }
+
+ public int getType() {
+ return STORE;
+ }
+
+ public int getSubtype() {
+ return StoreException.LOCK;
+ }
+
+ public boolean isFatal() {
+ return _fatal;
+ }
+
+ public Throwable getCause() {
+ return PersistenceExceptions.getCause(_nested);
+ }
+
+ public Throwable[] getNestedThrowables() {
+ return (_nested == null) ? Exceptions.EMPTY_THROWABLES : _nested;
+ }
+
+ public Object getFailedObject() {
+ return _failed;
+ }
+
+ public String toString() {
+ return Exceptions.toString(this);
+ }
+
+ public void printStackTrace() {
+ printStackTrace(System.err);
+ }
+
+ public void printStackTrace(PrintStream out) {
+ super.printStackTrace(out);
+ Exceptions.printNestedThrowables(this, out);
+ }
+
+ public void printStackTrace(PrintWriter out) {
+ super.printStackTrace(out);
+ Exceptions.printNestedThrowables(this, out);
+ }
+
+ private void writeObject(ObjectOutputStream out)
+ throws IOException {
+ out.writeBoolean(_fatal);
+ out.writeObject(Exceptions.replaceFailedObject(_failed));
+ out.writeObject(Exceptions.replaceNestedThrowables(_nested));
+ }
+
+ private void readObject(ObjectInputStream in)
+ throws IOException, ClassNotFoundException {
+ _fatal = in.readBoolean();
+ _failed = in.readObject();
+ _nested = (Throwable[]) in.readObject();
+ }
+}
+
Propchange:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/LockTimeoutException.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OptimisticLockException.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OptimisticLockException.java?rev=747489&r1=747488&r2=747489&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OptimisticLockException.java
(original)
+++
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OptimisticLockException.java
Tue Feb 24 18:48:09 2009
@@ -57,7 +57,7 @@
}
public int getSubtype() {
- return StoreException.OPTIMISTIC;
+ return StoreException.LOCK;
}
public boolean isFatal() {
Modified:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceExceptions.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceExceptions.java?rev=747489&r1=747488&r2=747489&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceExceptions.java
(original)
+++
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceExceptions.java
Tue Feb 24 18:48:09 2009
@@ -22,6 +22,7 @@
import org.apache.openjpa.kernel.Broker;
import org.apache.openjpa.util.Exceptions;
+import org.apache.openjpa.util.LockException;
import org.apache.openjpa.util.NoTransactionException;
import org.apache.openjpa.util.ObjectExistsException;
import org.apache.openjpa.util.ObjectNotFoundException;
@@ -64,6 +65,8 @@
RuntimeException ex = toPersistenceException(re);
if (!(ex instanceof NonUniqueResultException)
&& !(ex instanceof NoResultException)
+ && !(ex instanceof LockTimeoutException)
+ && !(ex instanceof QueryTimeoutException)
&& !throwing) {
try {
throwing = true;
@@ -152,11 +155,32 @@
(ke.getMessage(), getNestedThrowables(ke),
getFailedObject(ke), ke.isFatal());
} else if (ke.getSubtype() == StoreException.OPTIMISTIC
- || ke.getSubtype() == StoreException.LOCK
|| cause instanceof OptimisticException) {
e = new org.apache.openjpa.persistence.OptimisticLockException
(ke.getMessage(), getNestedThrowables(ke),
getFailedObject(ke), ke.isFatal());
+ } else if (ke.getSubtype() == StoreException.LOCK
+ || cause instanceof LockException) {
+ LockException lockEx = (LockException)
+ (ke instanceof LockException ? ke : cause);
+ if (lockEx != null && lockEx.getLockLevel() >=
+ JPA2LockLevels.LOCK_PESSIMISTIC_READ) {
+ if (lockEx.isRecoverable()) {
+ e = new org.apache.openjpa.persistence
+ .LockTimeoutException(
+ ke.getMessage(), getNestedThrowables(ke),
+ getFailedObject(ke), ke.isFatal());
+ } else {
+ e = new org.apache.openjpa.persistence
+ .PessimisticLockException(
+ ke.getMessage(), getNestedThrowables(ke),
+ getFailedObject(ke), ke.isFatal());
+ }
+ } else {
+ e = new org.apache.openjpa.persistence.OptimisticLockException(
+ ke.getMessage(), getNestedThrowables(ke),
+ getFailedObject(ke), ke.isFatal());
+ }
} else if (ke.getSubtype() == StoreException.OBJECT_EXISTS
|| cause instanceof ObjectExistsException) {
e = new org.apache.openjpa.persistence.EntityExistsException
Modified:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java?rev=747489&r1=747488&r2=747489&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java
(original)
+++
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java
Tue Feb 24 18:48:09 2009
@@ -30,6 +30,7 @@
import java.util.List;
import java.util.Map;
import java.util.MissingResourceException;
+
import javax.persistence.spi.PersistenceUnitInfo;
import javax.persistence.spi.PersistenceUnitTransactionType;
@@ -106,6 +107,32 @@
PersistenceMetaDataFactory.class.getName());
conf.addValue(new EntityManagerFactoryValue());
+
+ conf.readLockLevel.setAlias("optimistic", String
+ .valueOf(JPA2LockLevels.LOCK_OPTIMISTIC));
+ conf.readLockLevel.setAlias("optimistic-force-increment", String
+ .valueOf(JPA2LockLevels.LOCK_OPTIMISTIC_FORCE_INCREMENT));
+ conf.readLockLevel.setAlias("pessimistic-read", String
+ .valueOf(JPA2LockLevels.LOCK_PESSIMISTIC_READ));
+ conf.readLockLevel.setAlias("pessimistic-write", String
+ .valueOf(JPA2LockLevels.LOCK_PESSIMISTIC_WRITE));
+ conf.readLockLevel.setAlias("pessimistic-force-increment", String
+ .valueOf(JPA2LockLevels.LOCK_PESSIMISTIC_FORCE_INCREMENT));
+
+ conf.writeLockLevel.setAlias("optimistic", String
+ .valueOf(JPA2LockLevels.LOCK_OPTIMISTIC));
+ conf.writeLockLevel.setAlias("optimistic-force-increment", String
+ .valueOf(JPA2LockLevels.LOCK_OPTIMISTIC_FORCE_INCREMENT));
+ conf.writeLockLevel.setAlias("pessimistic-read", String
+ .valueOf(JPA2LockLevels.LOCK_PESSIMISTIC_READ));
+ conf.writeLockLevel.setAlias("pessimistic-write", String
+ .valueOf(JPA2LockLevels.LOCK_PESSIMISTIC_WRITE));
+ conf.writeLockLevel.setAlias("pessimistic-force-increment", String
+ .valueOf(JPA2LockLevels.LOCK_PESSIMISTIC_FORCE_INCREMENT));
+
+ conf.lockManagerPlugin.setAlias("jpa2",
+ JPA2LockManager.class.getName());
+
return true;
}
@@ -118,8 +145,8 @@
OpenJPAConfigurationImpl conf = (OpenJPAConfigurationImpl) c;
conf.metaFactoryPlugin.setDefault(SPEC_JPA.getName());
conf.metaFactoryPlugin.setString(SPEC_JPA.getName());
- conf.lockManagerPlugin.setDefault("version");
- conf.lockManagerPlugin.setString("version");
+ conf.lockManagerPlugin.setDefault("jpa2");
+ conf.lockManagerPlugin.setString("jpa2");
conf.nontransactionalWrite.setDefault("true");
conf.nontransactionalWrite.set(true);
return true;
Added:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PessimisticLockException.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PessimisticLockException.java?rev=747489&view=auto
==============================================================================
---
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PessimisticLockException.java
(added)
+++
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PessimisticLockException.java
Tue Feb 24 18:48:09 2009
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.persistence;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.io.Serializable;
+
+import org.apache.openjpa.util.ExceptionInfo;
+import org.apache.openjpa.util.Exceptions;
+import org.apache.openjpa.util.StoreException;
+
+/**
+ * Pessimistic concurrency violation.
+ *
+ * @since 2.0.0
+ * @nojavadoc
+ */
+public class PessimisticLockException
+ extends javax.persistence.PessimisticLockException
+ implements Serializable, ExceptionInfo {
+
+ private static final long serialVersionUID = -7241629816016553676L;
+
+ private transient boolean _fatal = false;
+ private transient Object _failed = null;
+ private transient Throwable[] _nested = null;
+
+ public PessimisticLockException(String msg, Throwable[] nested,
+ Object failed, boolean fatal) {
+ super(msg);
+ _nested = nested;
+ _failed = failed;
+ _fatal = fatal;
+ }
+
+ public int getType() {
+ return STORE;
+ }
+
+ public int getSubtype() {
+ return StoreException.LOCK;
+ }
+
+ public boolean isFatal() {
+ return _fatal;
+ }
+
+ public Throwable getCause() {
+ return PersistenceExceptions.getCause(_nested);
+ }
+
+ public Throwable[] getNestedThrowables() {
+ return (_nested == null) ? Exceptions.EMPTY_THROWABLES : _nested;
+ }
+
+ public Object getFailedObject() {
+ return _failed;
+ }
+
+ public String toString() {
+ return Exceptions.toString(this);
+ }
+
+ public void printStackTrace() {
+ printStackTrace(System.err);
+ }
+
+ public void printStackTrace(PrintStream out) {
+ super.printStackTrace(out);
+ Exceptions.printNestedThrowables(this, out);
+ }
+
+ public void printStackTrace(PrintWriter out) {
+ super.printStackTrace(out);
+ Exceptions.printNestedThrowables(this, out);
+ }
+
+ private void writeObject(ObjectOutputStream out)
+ throws IOException {
+ out.writeBoolean(_fatal);
+ out.writeObject(Exceptions.replaceFailedObject(_failed));
+ out.writeObject(Exceptions.replaceNestedThrowables(_nested));
+ }
+
+ private void readObject(ObjectInputStream in)
+ throws IOException, ClassNotFoundException {
+ _fatal = in.readBoolean();
+ _failed = in.readObject();
+ _nested = (Throwable[]) in.readObject();
+ }
+}
+
Propchange:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PessimisticLockException.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryTimeoutException.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryTimeoutException.java?rev=747489&view=auto
==============================================================================
---
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryTimeoutException.java
(added)
+++
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryTimeoutException.java
Tue Feb 24 18:48:09 2009
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.persistence;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.io.Serializable;
+
+import org.apache.openjpa.util.ExceptionInfo;
+import org.apache.openjpa.util.Exceptions;
+import org.apache.openjpa.util.StoreException;
+
+/**
+ * Query lock timeout violation.
+ *
+ * @since 2.0.0
+ * @nojavadoc
+ */
+public class QueryTimeoutException
+ extends javax.persistence.QueryTimeoutException
+ implements Serializable, ExceptionInfo {
+
+ private transient boolean _fatal = false;
+ private transient Object _failed = null;
+ private transient Throwable[] _nested = null;
+
+ public QueryTimeoutException(String msg, Throwable[] nested,
+ Object failed, boolean fatal) {
+ super(msg);
+ _nested = nested;
+ _failed = failed;
+ _fatal = fatal;
+ }
+
+ public int getType() {
+ return STORE;
+ }
+
+ public int getSubtype() {
+ return StoreException.LOCK;
+ }
+
+ public boolean isFatal() {
+ return _fatal;
+ }
+
+ public Throwable getCause() {
+ return PersistenceExceptions.getCause(_nested);
+ }
+
+ public Throwable[] getNestedThrowables() {
+ return (_nested == null) ? Exceptions.EMPTY_THROWABLES : _nested;
+ }
+
+ public Object getFailedObject() {
+ return _failed;
+ }
+
+ public String toString() {
+ return Exceptions.toString(this);
+ }
+
+ public void printStackTrace() {
+ printStackTrace(System.err);
+ }
+
+ public void printStackTrace(PrintStream out) {
+ super.printStackTrace(out);
+ Exceptions.printNestedThrowables(this, out);
+ }
+
+ public void printStackTrace(PrintWriter out) {
+ super.printStackTrace(out);
+ Exceptions.printNestedThrowables(this, out);
+ }
+
+ private void writeObject(ObjectOutputStream out)
+ throws IOException {
+ out.writeBoolean(_fatal);
+ out.writeObject(Exceptions.replaceFailedObject(_failed));
+ out.writeObject(Exceptions.replaceNestedThrowables(_nested));
+ }
+
+ private void readObject(ObjectInputStream in)
+ throws IOException, ClassNotFoundException {
+ _fatal = in.readBoolean();
+ _failed = in.readObject();
+ _nested = (Throwable[]) in.readObject();
+ }
+}
+
Propchange:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryTimeoutException.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_conf.xml
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_conf.xml?rev=747489&r1=747488&r2=747489&view=diff
==============================================================================
--- openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_conf.xml (original)
+++ openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_conf.xml Tue Feb 24
18:48:09 2009
@@ -2116,12 +2116,12 @@
LockManager</literal>
</para>
<para>
-<emphasis role="bold">Default: </emphasis><literal>version</literal>
+<emphasis role="bold">Default: </emphasis><literal>jpa2</literal>
</para>
<para>
<emphasis role="bold">Possible values: </emphasis><literal>none</literal>,
-<literal>sjvm</literal>, <literal>pessimistic</literal>,
-<literal>version</literal>
+<literal>sjvm</literal>, <literal>version</literal>,
+<literal>pessimistic</literal>, <literal>jpa2</literal>
</para>
<para>
<emphasis role="bold">Description:</emphasis> A plugin string (see
@@ -2727,7 +2727,10 @@
</para>
<para>
<emphasis role="bold">Possible values: </emphasis><literal>none</literal>,
-<literal>read</literal>, <literal>write</literal>, numeric values for
+<literal>read</literal>, <literal>write</literal>,
+<literal>optimistic</literal>, <literal>optimistic-force-increment</literal>,
+<literal>pessimistic-read</literal>, <literal>pessimistic-write</literal>,
+<literal>pessimistic-force-increment</literal>, numeric values for
lock-manager specific lock levels
</para>
<para>
@@ -3090,7 +3093,10 @@
</para>
<para>
<emphasis role="bold">Possible values: </emphasis><literal>none</literal>,
-<literal>read</literal>, <literal>write</literal>, numeric values for
+<literal>read</literal>, <literal>write</literal>,
+<literal>optimistic</literal>, <literal>optimistic-force-increment</literal>,
+<literal>pessimistic-read</literal>, <literal>pessimistic-write</literal>,
+<literal>pessimistic-force-increment</literal>, numeric values for
lock-manager specific lock levels
</para>
<para>