diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/InformixDictionary.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/InformixDictionary.java index a37560725..bf6016ced 100644 --- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/InformixDictionary.java +++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/InformixDictionary.java @@ -27,6 +27,7 @@ import java.sql.Statement; import java.sql.Types; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Map; import java.util.Set; @@ -82,8 +83,8 @@ public class InformixDictionary protected boolean useJCC = false; // weak set of connections we've already executed lock mode sql on - private final Collection _seenConnections = new ReferenceHashSet - (ReferenceHashSet.WEAK); + private final Collection _seenConnections = Collections.synchronizedSet( + new ReferenceHashSet(ReferenceHashSet.WEAK)); public boolean disableRetainUpdateLocksSQL=false; @@ -324,21 +325,19 @@ public class InformixDictionary // if we haven't already done so, initialize the lock mode of the // connection - synchronized(_seenConnections) { - if (_seenConnections.add(conn)) { - if (lockModeEnabled) { - String sql = "SET LOCK MODE TO WAIT"; - if (lockWaitSeconds > 0) - sql = sql + " " + lockWaitSeconds; - execute(sql, conn, true); - } - - if (!disableRetainUpdateLocksSQL){ - String sql = "SET ENVIRONMENT RETAINUPDATELOCKS 'ALL'"; - execute(sql, conn, false); - } + if (_seenConnections.add(conn)) { + if (lockModeEnabled) { + String sql = "SET LOCK MODE TO WAIT"; + if (lockWaitSeconds > 0) + sql = sql + " " + lockWaitSeconds; + execute(sql, conn, true); } - } + + if (!disableRetainUpdateLocksSQL){ + String sql = "SET ENVIRONMENT RETAINUPDATELOCKS 'ALL'"; + execute(sql, conn, false); + } + } // the datadirect driver requires that we issue a rollback before using // each connection