From 54882fe1ea2210378592ac5b564a5fea65d3d8d3 Mon Sep 17 00:00:00 2001 From: Ben Alex Date: Sat, 5 Apr 2008 22:57:02 +0000 Subject: [PATCH] SEC-670: Provide mutator for JdbcMutableAclService.foreignKeysInDatabase property. --- .../security/acls/jdbc/JdbcMutableAclService.java | 11 +++++++++-- .../security/acls/jdbc/JdbcAclServiceTests.java | 3 +++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/acl/src/main/java/org/springframework/security/acls/jdbc/JdbcMutableAclService.java b/acl/src/main/java/org/springframework/security/acls/jdbc/JdbcMutableAclService.java index 4831549295..7b77c4a400 100644 --- a/acl/src/main/java/org/springframework/security/acls/jdbc/JdbcMutableAclService.java +++ b/acl/src/main/java/org/springframework/security/acls/jdbc/JdbcMutableAclService.java @@ -60,7 +60,7 @@ import javax.sql.DataSource; public class JdbcMutableAclService extends JdbcAclService implements MutableAclService { //~ Instance fields ================================================================================================ - private boolean foreignKeysInDatabase = false; + private boolean foreignKeysInDatabase = true; private AclCache aclCache; private String deleteClassByClassNameString = "DELETE FROM acl_class WHERE class=?"; private String deleteEntryByObjectIdentityForeignKey = "DELETE FROM acl_entry WHERE acl_object_identity=?"; @@ -385,5 +385,12 @@ public class JdbcMutableAclService extends JdbcAclService implements MutableAclS Assert.hasText(identityQuery, "New identity query is required"); this.identityQuery = identityQuery; } - + + /** + * @param foreignKeysInDatabase if false this class will perform additional FK constrain checking, which may + * cause deadlocks (the default is true, so deadlocks are avoided but the database is expected to enforce FKs) + */ + public void setForeignKeysInDatabase(boolean foreignKeysInDatabase) { + this.foreignKeysInDatabase = foreignKeysInDatabase; + } } diff --git a/acl/src/test/java/org/springframework/security/acls/jdbc/JdbcAclServiceTests.java b/acl/src/test/java/org/springframework/security/acls/jdbc/JdbcAclServiceTests.java index dd75ba1362..5c7cf6214c 100644 --- a/acl/src/test/java/org/springframework/security/acls/jdbc/JdbcAclServiceTests.java +++ b/acl/src/test/java/org/springframework/security/acls/jdbc/JdbcAclServiceTests.java @@ -318,11 +318,14 @@ public class JdbcAclServiceTests extends AbstractTransactionalDataSourceSpringCo public void testDeleteAclWithChildrenThrowsException() throws Exception { try { ObjectIdentity topParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(100)); + jdbcMutableAclService.setForeignKeysInDatabase(false); // switch on FK checking in the class, not database jdbcMutableAclService.deleteAcl(topParentOid, false); fail("It should have thrown ChildrenExistException"); } catch (ChildrenExistException expected) { assertTrue(true); + } finally { + jdbcMutableAclService.setForeignKeysInDatabase(true); // restore to the default } }