diff --git a/spring-ldap/src/itest/java/conf/ldapAndJdbcTransactionTestContext.xml b/spring-ldap/src/itest/java/conf/ldapAndJdbcTransactionTestContext.xml index cd74f83f..35bb1d1e 100644 --- a/spring-ldap/src/itest/java/conf/ldapAndJdbcTransactionTestContext.xml +++ b/spring-ldap/src/itest/java/conf/ldapAndJdbcTransactionTestContext.xml @@ -18,8 +18,6 @@ - + class="org.springframework.ldap.transaction.compensating.manager.TransactionAwareContextSourceProxy"> @@ -45,23 +43,15 @@ - - + class="org.springframework.ldap.transaction.compensating.manager.ContextSourceAndDataSourceTransactionManager"> + class="org.springframework.ldap.transaction.compensating.manager.LdapAndJdbcDummyDaoImpl"> @@ -77,16 +67,4 @@ - diff --git a/spring-ldap/src/itest/java/conf/ldapTemplateTransactionTestContext.xml b/spring-ldap/src/itest/java/conf/ldapTemplateTransactionTestContext.xml index ee31f80c..0d6c15bd 100644 --- a/spring-ldap/src/itest/java/conf/ldapTemplateTransactionTestContext.xml +++ b/spring-ldap/src/itest/java/conf/ldapTemplateTransactionTestContext.xml @@ -18,12 +18,10 @@ - + class="org.springframework.ldap.transaction.compensating.manager.TransactionAwareContextSourceProxy"> @@ -33,13 +31,13 @@ + class="org.springframework.ldap.transaction.compensating.manager.ContextSourceTransactionManager"> + class="org.springframework.ldap.transaction.compensating.manager.LdapDummyDaoImpl"> diff --git a/spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/ContextSourceAndDataSourceTransactionManagerIntegrationTest.java b/spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceAndDataSourceTransactionManagerIntegrationTest.java similarity index 96% rename from spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/ContextSourceAndDataSourceTransactionManagerIntegrationTest.java rename to spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceAndDataSourceTransactionManagerIntegrationTest.java index c10c05c2..0ec4514f 100644 --- a/spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/ContextSourceAndDataSourceTransactionManagerIntegrationTest.java +++ b/spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceAndDataSourceTransactionManagerIntegrationTest.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ldap.transaction.core; +package org.springframework.ldap.transaction.compensating.manager; import java.sql.ResultSet; import java.sql.SQLException; @@ -30,7 +30,7 @@ import org.springframework.ldap.LdapServerManager; import org.springframework.ldap.NameNotFoundException; import org.springframework.ldap.core.AttributesMapper; import org.springframework.ldap.core.LdapTemplate; -import org.springframework.ldap.transaction.core.ContextSourceAndDataSourceTransactionManager; +import org.springframework.ldap.transaction.compensating.manager.ContextSourceAndDataSourceTransactionManager; import org.springframework.test.AbstractDependencyInjectionSpringContextTests; import org.springframework.transaction.support.TransactionSynchronizationManager; diff --git a/spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/ContextSourceTransactionManagerIntegrationTest.java b/spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceTransactionManagerIntegrationTest.java similarity index 95% rename from spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/ContextSourceTransactionManagerIntegrationTest.java rename to spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceTransactionManagerIntegrationTest.java index 75db65f6..e5ac3236 100644 --- a/spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/ContextSourceTransactionManagerIntegrationTest.java +++ b/spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceTransactionManagerIntegrationTest.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ldap.transaction.core; +package org.springframework.ldap.transaction.compensating.manager; import javax.naming.NamingException; import javax.naming.directory.Attributes; @@ -24,7 +24,7 @@ import org.springframework.ldap.LdapServerManager; import org.springframework.ldap.NameNotFoundException; import org.springframework.ldap.core.AttributesMapper; import org.springframework.ldap.core.LdapTemplate; -import org.springframework.ldap.transaction.core.ContextSourceAndDataSourceTransactionManager; +import org.springframework.ldap.transaction.compensating.manager.ContextSourceAndDataSourceTransactionManager; import org.springframework.test.AbstractDependencyInjectionSpringContextTests; import org.springframework.transaction.support.TransactionSynchronizationManager; diff --git a/spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/DummyDao.java b/spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/DummyDao.java similarity index 89% rename from spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/DummyDao.java rename to spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/DummyDao.java index 68948d9c..7d6f0e78 100644 --- a/spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/DummyDao.java +++ b/spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/DummyDao.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2007 the original author or authors. + * Copyright 2002-2007 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ldap.transaction.core; +package org.springframework.ldap.transaction.compensating.manager; public interface DummyDao { void createWithException(String country, String company, String fullname, diff --git a/spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/DummyException.java b/spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/DummyException.java similarity index 82% rename from spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/DummyException.java rename to spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/DummyException.java index e49fc7de..dacb7839 100644 --- a/spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/DummyException.java +++ b/spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/DummyException.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2007 the original author or authors. + * Copyright 2002-2007 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ldap.transaction.core; +package org.springframework.ldap.transaction.compensating.manager; public class DummyException extends RuntimeException { public DummyException(String message) { diff --git a/spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/DummyServiceImpl.java b/spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/DummyServiceImpl.java similarity index 83% rename from spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/DummyServiceImpl.java rename to spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/DummyServiceImpl.java index 6b4ba922..f023fea5 100644 --- a/spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/DummyServiceImpl.java +++ b/spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/DummyServiceImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2007 the original author or authors. + * Copyright 2002-2007 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ldap.transaction.core; +package org.springframework.ldap.transaction.compensating.manager; public class DummyServiceImpl { private DummyDao dummyDaoImpl; diff --git a/spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/LdapAndJdbcDummyDaoImpl.java b/spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/LdapAndJdbcDummyDaoImpl.java similarity index 80% rename from spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/LdapAndJdbcDummyDaoImpl.java rename to spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/LdapAndJdbcDummyDaoImpl.java index ed7b5097..ec0b43e6 100644 --- a/spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/LdapAndJdbcDummyDaoImpl.java +++ b/spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/LdapAndJdbcDummyDaoImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2007 the original author or authors. + * Copyright 2002-2007 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ldap.transaction.core; +package org.springframework.ldap.transaction.compensating.manager; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.ldap.core.DirContextAdapter; @@ -36,7 +36,7 @@ public class LdapAndJdbcDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#createWithException(java.lang.String, + * @see org.springframework.ldap.transaction.support.DummyDao#createWithException(java.lang.String, * java.lang.String, java.lang.String, java.lang.String, * java.lang.String) */ @@ -49,7 +49,7 @@ public class LdapAndJdbcDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#create(java.lang.String, + * @see org.springframework.ldap.transaction.support.DummyDao#create(java.lang.String, * java.lang.String, java.lang.String, java.lang.String, * java.lang.String) */ @@ -73,7 +73,7 @@ public class LdapAndJdbcDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#update(java.lang.String, + * @see org.springframework.ldap.transaction.support.DummyDao#update(java.lang.String, * java.lang.String, java.lang.String) */ public void update(String dn, String fullname, String lastname, @@ -93,7 +93,7 @@ public class LdapAndJdbcDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#updateWithException(java.lang.String, + * @see org.springframework.ldap.transaction.support.DummyDao#updateWithException(java.lang.String, * java.lang.String, java.lang.String) */ public void updateWithException(String dn, String fullname, @@ -105,7 +105,7 @@ public class LdapAndJdbcDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#updateAndRename(java.lang.String, + * @see org.springframework.ldap.transaction.support.DummyDao#updateAndRename(java.lang.String, * java.lang.String, java.lang.String) */ public void updateAndRename(String dn, String newDn, String description) { @@ -120,7 +120,7 @@ public class LdapAndJdbcDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#updateAndRenameWithException(java.lang.String, + * @see org.springframework.ldap.transaction.support.DummyDao#updateAndRenameWithException(java.lang.String, * java.lang.String, java.lang.String) */ public void updateAndRenameWithException(String dn, String newDn, @@ -132,7 +132,7 @@ public class LdapAndJdbcDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#modifyAttributes(java.lang.String, + * @see org.springframework.ldap.transaction.support.DummyDao#modifyAttributes(java.lang.String, * java.lang.String, java.lang.String) */ public void modifyAttributes(String dn, String lastName, String description) { @@ -146,7 +146,7 @@ public class LdapAndJdbcDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#modifyAttributesWithException(java.lang.String, + * @see org.springframework.ldap.transaction.support.DummyDao#modifyAttributesWithException(java.lang.String, * java.lang.String, java.lang.String) */ public void modifyAttributesWithException(String dn, String lastName, @@ -158,7 +158,7 @@ public class LdapAndJdbcDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#unbind(java.lang.String) + * @see org.springframework.ldap.transaction.support.DummyDao#unbind(java.lang.String) */ public void unbind(String dn, String fullname) { ldapTemplate.unbind(dn); @@ -169,7 +169,7 @@ public class LdapAndJdbcDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#unbindWithException(java.lang.String) + * @see org.springframework.ldap.transaction.support.DummyDao#unbindWithException(java.lang.String) */ public void unbindWithException(String dn, String fullname) { unbind(dn, fullname); diff --git a/spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/LdapDummyDaoImpl.java b/spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/LdapDummyDaoImpl.java similarity index 78% rename from spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/LdapDummyDaoImpl.java rename to spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/LdapDummyDaoImpl.java index 1ea50c98..4db82c0a 100644 --- a/spring-ldap/src/itest/java/org/springframework/ldap/transaction/core/LdapDummyDaoImpl.java +++ b/spring-ldap/src/itest/java/org/springframework/ldap/transaction/compensating/manager/LdapDummyDaoImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2007 the original author or authors. + * Copyright 2002-2007 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ldap.transaction.core; +package org.springframework.ldap.transaction.compensating.manager; import org.springframework.ldap.core.DirContextAdapter; import org.springframework.ldap.core.DistinguishedName; @@ -29,7 +29,7 @@ public class LdapDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#createWithException(java.lang.String, + * @see org.springframework.ldap.transaction.support.DummyDao#createWithException(java.lang.String, * java.lang.String, java.lang.String, java.lang.String, * java.lang.String) */ @@ -42,7 +42,7 @@ public class LdapDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#create(java.lang.String, + * @see org.springframework.ldap.transaction.support.DummyDao#create(java.lang.String, * java.lang.String, java.lang.String, java.lang.String, * java.lang.String) */ @@ -64,7 +64,7 @@ public class LdapDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#update(java.lang.String, + * @see org.springframework.ldap.transaction.support.DummyDao#update(java.lang.String, * java.lang.String, java.lang.String) */ public void update(String dn, String fullname, String lastname, @@ -80,7 +80,7 @@ public class LdapDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#updateWithException(java.lang.String, + * @see org.springframework.ldap.transaction.support.DummyDao#updateWithException(java.lang.String, * java.lang.String, java.lang.String) */ public void updateWithException(String dn, String fullname, @@ -92,7 +92,7 @@ public class LdapDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#updateAndRename(java.lang.String, + * @see org.springframework.ldap.transaction.support.DummyDao#updateAndRename(java.lang.String, * java.lang.String, java.lang.String) */ public void updateAndRename(String dn, String newDn, String description) { @@ -107,7 +107,7 @@ public class LdapDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#updateAndRenameWithException(java.lang.String, + * @see org.springframework.ldap.transaction.support.DummyDao#updateAndRenameWithException(java.lang.String, * java.lang.String, java.lang.String) */ public void updateAndRenameWithException(String dn, String newDn, @@ -119,7 +119,7 @@ public class LdapDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#modifyAttributes(java.lang.String, + * @see org.springframework.ldap.transaction.support.DummyDao#modifyAttributes(java.lang.String, * java.lang.String, java.lang.String) */ public void modifyAttributes(String dn, String lastName, String description) { @@ -133,7 +133,7 @@ public class LdapDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#modifyAttributesWithException(java.lang.String, + * @see org.springframework.ldap.transaction.support.DummyDao#modifyAttributesWithException(java.lang.String, * java.lang.String, java.lang.String) */ public void modifyAttributesWithException(String dn, String lastName, @@ -145,7 +145,7 @@ public class LdapDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#unbind(java.lang.String) + * @see org.springframework.ldap.transaction.support.DummyDao#unbind(java.lang.String) */ public void unbind(String dn, String fullname) { ldapTemplate.unbind(dn); @@ -154,7 +154,7 @@ public class LdapDummyDaoImpl implements DummyDao { /* * (non-Javadoc) * - * @see org.springframework.ldap.transaction.core.DummyDao#unbindWithException(java.lang.String) + * @see org.springframework.ldap.transaction.support.DummyDao#unbindWithException(java.lang.String) */ public void unbindWithException(String dn, String fullname) { unbind(dn, fullname); diff --git a/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/LdapCompensatingTransactionOperationFactory.java b/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/LdapCompensatingTransactionOperationFactory.java index 45d42a0b..736ca19f 100644 --- a/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/LdapCompensatingTransactionOperationFactory.java +++ b/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/LdapCompensatingTransactionOperationFactory.java @@ -45,38 +45,53 @@ public class LdapCompensatingTransactionOperationFactory implements private static Log log = LogFactory .getLog(LdapCompensatingTransactionOperationFactory.class); - private LdapOperations ldapOperations; - private TempEntryRenamingStrategy renamingStrategy; /** * Constructor. * - * @param ctx - * The transactional DirContext. + * @param renamingStrategy + * the {@link TempEntryRenamingStrategy} to supply to relevant + * operations. */ - public LdapCompensatingTransactionOperationFactory(DirContext ctx, + public LdapCompensatingTransactionOperationFactory( TempEntryRenamingStrategy renamingStrategy) { - this.ldapOperations = new LdapTemplate(new SingleContextSource(ctx)); this.renamingStrategy = renamingStrategy; } + /* + * (non-Javadoc) + * + * @see org.springframework.transaction.compensating.CompensatingTransactionOperationFactory#createRecordingOperation(java.lang.Object, + * java.lang.String) + */ public CompensatingTransactionOperationRecorder createRecordingOperation( - String operation) { - if (StringUtils.equals(operation, LdapTransactionUtils.BIND_METHOD_NAME)) { + Object resource, String operation) { + if (StringUtils + .equals(operation, LdapTransactionUtils.BIND_METHOD_NAME)) { log.debug("Bind operation recorded"); - return new BindOperationRecorder(ldapOperations); - } else if (StringUtils.equals(operation, LdapTransactionUtils.REBIND_METHOD_NAME)) { + return new BindOperationRecorder( + createLdapOperationsInstance((DirContext) resource)); + } else if (StringUtils.equals(operation, + LdapTransactionUtils.REBIND_METHOD_NAME)) { log.debug("Rebind operation recorded"); - return new RebindOperationRecorder(ldapOperations, renamingStrategy); - } else if (StringUtils.equals(operation, LdapTransactionUtils.RENAME_METHOD_NAME)) { + return new RebindOperationRecorder( + createLdapOperationsInstance((DirContext) resource), + renamingStrategy); + } else if (StringUtils.equals(operation, + LdapTransactionUtils.RENAME_METHOD_NAME)) { log.debug("Rename operation recorded"); - return new RenameOperationRecorder(ldapOperations); + return new RenameOperationRecorder( + createLdapOperationsInstance((DirContext) resource)); } else if (StringUtils.equals(operation, LdapTransactionUtils.MODIFY_ATTRIBUTES_METHOD_NAME)) { - return new ModifyAttributesOperationRecorder(ldapOperations); - } else if (StringUtils.equals(operation, LdapTransactionUtils.UNBIND_METHOD_NAME)) { - return new UnbindOperationRecorder(ldapOperations, renamingStrategy); + return new ModifyAttributesOperationRecorder( + createLdapOperationsInstance((DirContext) resource)); + } else if (StringUtils.equals(operation, + LdapTransactionUtils.UNBIND_METHOD_NAME)) { + return new UnbindOperationRecorder( + createLdapOperationsInstance((DirContext) resource), + renamingStrategy); } log @@ -85,6 +100,10 @@ public class LdapCompensatingTransactionOperationFactory implements return new NullOperationRecorder(); } + LdapOperations createLdapOperationsInstance(DirContext ctx) { + return new LdapTemplate(new SingleContextSource(ctx)); + } + /** * A {@link ContextSource} implementation using returning * {@link NonClosingDirContextInvocationHandler} proxies on the same @@ -180,8 +199,4 @@ public class LdapCompensatingTransactionOperationFactory implements } } } - - void setLdapOperations(LdapOperations ldapOperations) { - this.ldapOperations = ldapOperations; - } } diff --git a/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/LdapTransactionUtils.java b/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/LdapTransactionUtils.java index 0b0af9c8..4f56746c 100644 --- a/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/LdapTransactionUtils.java +++ b/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/LdapTransactionUtils.java @@ -21,12 +21,7 @@ import javax.naming.directory.DirContext; import javax.naming.ldap.LdapContext; import org.apache.commons.lang.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.ldap.NamingException; -import org.springframework.ldap.core.ContextSource; import org.springframework.ldap.core.DistinguishedName; -import org.springframework.transaction.support.TransactionSynchronizationManager; import org.springframework.util.Assert; /** @@ -37,9 +32,6 @@ import org.springframework.util.Assert; */ public final class LdapTransactionUtils { - private static final Log logger = LogFactory - .getLog(LdapTransactionUtils.class); - public static final String REBIND_METHOD_NAME = "rebind"; public static final String BIND_METHOD_NAME = "bind"; @@ -57,28 +49,6 @@ public final class LdapTransactionUtils { } - /** - * Close the given JNDI Context and ignore any thrown exception. This is - * useful for typical finally blocks in JNDI code. - * - * @param context - * the JNDI Context to close (may be null) - */ - public static void closeContext(DirContext context) { - if (context != null) { - try { - context.close(); - } catch (NamingException ex) { - logger.debug("Could not close JNDI DirContext", ex); - } catch (Throwable ex) { - // We don't trust the JNDI provider: It might throw - // RuntimeException or Error. - logger.debug("Unexpected exception on closing JNDI DirContext", - ex); - } - } - } - /** * Get the first parameter in the argument list as a Name. * @@ -113,31 +83,6 @@ public final class LdapTransactionUtils { } } - /** - * Close the supplied context, but only if it is not associated with the - * current transaction. - * - * @param context - * the DirContext to close. - * @param contextSource - * the ContextSource bound to the transaction. - * @throws NamingException - */ - public static void doCloseConnection(DirContext context, - ContextSource contextSource) throws javax.naming.NamingException { - DirContextHolder transactionContextHolder = (DirContextHolder) TransactionSynchronizationManager - .getResource(contextSource); - if (transactionContextHolder == null - || transactionContextHolder.getCtx() != context) { - logger.debug("Closing context"); - // This is not the transactional context or the transaction is - // no longer active - we should close it. - context.close(); - } else { - logger.debug("Leaving transactional context open"); - } - } - /** * Check whether the supplied method is a method for which transactions is * supported (and which should be recorded for possible rollback later). @@ -173,5 +118,4 @@ public final class LdapTransactionUtils { return DirContext.class; } - } diff --git a/spring-ldap/src/main/java/org/springframework/ldap/transaction/core/ContextSourceAndDataSourceTransactionManager.java b/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceAndDataSourceTransactionManager.java similarity index 96% rename from spring-ldap/src/main/java/org/springframework/ldap/transaction/core/ContextSourceAndDataSourceTransactionManager.java rename to spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceAndDataSourceTransactionManager.java index 8656b151..4f010256 100644 --- a/spring-ldap/src/main/java/org/springframework/ldap/transaction/core/ContextSourceAndDataSourceTransactionManager.java +++ b/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceAndDataSourceTransactionManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2007 the original author or authors. + * Copyright 2002-2007 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ldap.transaction.core; +package org.springframework.ldap.transaction.compensating.manager; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.ldap.core.ContextSource; @@ -30,7 +30,6 @@ import org.springframework.transaction.support.DefaultTransactionStatus; * and thus commit and rollback may result in unexpected results. * * @author Mattias Arthursson - * @since 1.2 */ public class ContextSourceAndDataSourceTransactionManager extends DataSourceTransactionManager { diff --git a/spring-ldap/src/main/java/org/springframework/ldap/transaction/core/ContextSourceTransactionManager.java b/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceTransactionManager.java similarity index 96% rename from spring-ldap/src/main/java/org/springframework/ldap/transaction/core/ContextSourceTransactionManager.java rename to spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceTransactionManager.java index 71f68417..2e44d3b8 100644 --- a/spring-ldap/src/main/java/org/springframework/ldap/transaction/core/ContextSourceTransactionManager.java +++ b/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceTransactionManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2007 the original author or authors. + * Copyright 2002-2007 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ldap.transaction.core; +package org.springframework.ldap.transaction.compensating.manager; import org.springframework.ldap.core.ContextSource; import org.springframework.ldap.transaction.compensating.TempEntryRenamingStrategy; @@ -104,7 +104,6 @@ import org.springframework.transaction.support.DefaultTransactionStatus; * @see DefaultCompensatingTransactionOperationManager * @see TempEntryRenamingStrategy * @see TransactionAwareContextSourceProxy - * @since 1.2 */ public class ContextSourceTransactionManager extends AbstractPlatformTransactionManager { diff --git a/spring-ldap/src/main/java/org/springframework/ldap/transaction/core/ContextSourceTransactionManagerDelegate.java b/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceTransactionManagerDelegate.java similarity index 84% rename from spring-ldap/src/main/java/org/springframework/ldap/transaction/core/ContextSourceTransactionManagerDelegate.java rename to spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceTransactionManagerDelegate.java index d1a5cadf..0f29018f 100644 --- a/spring-ldap/src/main/java/org/springframework/ldap/transaction/core/ContextSourceTransactionManagerDelegate.java +++ b/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceTransactionManagerDelegate.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2007 the original author or authors. + * Copyright 2002-2007 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ldap.transaction.core; +package org.springframework.ldap.transaction.compensating.manager; import javax.naming.NamingException; import javax.naming.directory.DirContext; @@ -21,11 +21,12 @@ import javax.naming.directory.DirContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.ldap.core.ContextSource; -import org.springframework.ldap.transaction.compensating.DirContextHolder; +import org.springframework.ldap.transaction.compensating.LdapCompensatingTransactionOperationFactory; import org.springframework.ldap.transaction.compensating.TempEntryRenamingStrategy; import org.springframework.ldap.transaction.compensating.support.DefaultTempEntryRenamingStrategy; import org.springframework.transaction.compensating.support.AbstractCompensatingTransactionManagerDelegate; import org.springframework.transaction.compensating.support.CompensatingTransactionHolderSupport; +import org.springframework.transaction.compensating.support.DefaultCompensatingTransactionOperationManager; /** * This delegate performs all the work for the @@ -36,7 +37,6 @@ import org.springframework.transaction.compensating.support.CompensatingTransact * @author Mattias Arthursson * @see ContextSourceTransactionManager * @see ContextSourceAndDataSourceTransactionManager - * @since 1.2 */ public class ContextSourceTransactionManagerDelegate extends AbstractCompensatingTransactionManagerDelegate { @@ -77,8 +77,10 @@ public class ContextSourceTransactionManagerDelegate extends protected CompensatingTransactionHolderSupport getNewHolder() { DirContext newCtx = getContextSource().getReadOnlyContext(); - DirContextHolder contextHolder = new DirContextHolder(newCtx, - renamingStrategy); + DirContextHolder contextHolder = new DirContextHolder( + new DefaultCompensatingTransactionOperationManager( + new LdapCompensatingTransactionOperationFactory( + renamingStrategy)), newCtx); return contextHolder; } diff --git a/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/DirContextHolder.java b/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/DirContextHolder.java similarity index 67% rename from spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/DirContextHolder.java rename to spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/DirContextHolder.java index e47cc30f..6c27e0f8 100644 --- a/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/DirContextHolder.java +++ b/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/DirContextHolder.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2007 the original author or authors. + * Copyright 2002-2007 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,11 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ldap.transaction.compensating; +package org.springframework.ldap.transaction.compensating.manager; import javax.naming.directory.DirContext; -import org.springframework.transaction.compensating.CompensatingTransactionOperationFactory; import org.springframework.transaction.compensating.CompensatingTransactionOperationManager; import org.springframework.transaction.compensating.support.CompensatingTransactionHolderSupport; @@ -29,24 +28,23 @@ import org.springframework.transaction.compensating.support.CompensatingTransact * for commit or rollback. * * @author Mattias Arthursson - * @since 1.2 + * */ public class DirContextHolder extends CompensatingTransactionHolderSupport { private DirContext ctx; - private TempEntryRenamingStrategy renamingStrategy; - /** * Constructor. * + * @param manager + * The {@link CompensatingTransactionOperationManager}. * @param ctx * The DirContext associated with the current transaction. */ - public DirContextHolder(DirContext ctx, - TempEntryRenamingStrategy renamingStrategy) { + public DirContextHolder(CompensatingTransactionOperationManager manager, + DirContext ctx) { + super(manager); this.ctx = ctx; - this.renamingStrategy = renamingStrategy; - refreshTransactionOperationManager(); } /** @@ -57,12 +55,6 @@ public class DirContextHolder extends CompensatingTransactionHolderSupport { */ public void setCtx(DirContext ctx) { this.ctx = ctx; - refreshTransactionOperationManager(); - } - - protected CompensatingTransactionOperationFactory createOperationFactory() { - return new LdapCompensatingTransactionOperationFactory(ctx, - renamingStrategy); } /** @@ -72,7 +64,12 @@ public class DirContextHolder extends CompensatingTransactionHolderSupport { return ctx; } - public TempEntryRenamingStrategy getRenamingStrategy() { - return renamingStrategy; + /* + * (non-Javadoc) + * + * @see org.springframework.transaction.compensating.support.CompensatingTransactionHolderSupport#getTransactedResource() + */ + protected Object getTransactedResource() { + return ctx; } } diff --git a/spring-ldap/src/main/java/org/springframework/ldap/transaction/core/TransactionAwareContextSourceProxy.java b/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/TransactionAwareContextSourceProxy.java similarity index 91% rename from spring-ldap/src/main/java/org/springframework/ldap/transaction/core/TransactionAwareContextSourceProxy.java rename to spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/TransactionAwareContextSourceProxy.java index d4421226..99434251 100644 --- a/spring-ldap/src/main/java/org/springframework/ldap/transaction/core/TransactionAwareContextSourceProxy.java +++ b/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/TransactionAwareContextSourceProxy.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2007 the original author or authors. + * Copyright 2002-2007 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ldap.transaction.core; +package org.springframework.ldap.transaction.compensating.manager; import java.lang.reflect.Proxy; @@ -22,7 +22,6 @@ import javax.naming.directory.DirContext; import org.springframework.ldap.NamingException; import org.springframework.ldap.core.ContextSource; import org.springframework.ldap.core.DirContextProxy; -import org.springframework.ldap.transaction.compensating.DirContextHolder; import org.springframework.ldap.transaction.compensating.LdapTransactionUtils; import org.springframework.transaction.support.TransactionSynchronizationManager; @@ -35,7 +34,6 @@ import org.springframework.transaction.support.TransactionSynchronizationManager * {@link TransactionAwareDirContextInvocationHandler}. * * @author Mattias Arthursson - * @since 1.2 */ public class TransactionAwareContextSourceProxy implements ContextSource { private ContextSource target; diff --git a/spring-ldap/src/main/java/org/springframework/ldap/transaction/core/TransactionAwareDirContextInvocationHandler.java b/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/TransactionAwareDirContextInvocationHandler.java similarity index 66% rename from spring-ldap/src/main/java/org/springframework/ldap/transaction/core/TransactionAwareDirContextInvocationHandler.java rename to spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/TransactionAwareDirContextInvocationHandler.java index 93666134..fea01fa2 100644 --- a/spring-ldap/src/main/java/org/springframework/ldap/transaction/core/TransactionAwareDirContextInvocationHandler.java +++ b/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/TransactionAwareDirContextInvocationHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2007 the original author or authors. + * Copyright 2002-2007 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ldap.transaction.core; +package org.springframework.ldap.transaction.compensating.manager; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; @@ -21,10 +21,13 @@ import java.lang.reflect.Method; import javax.naming.directory.DirContext; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.ldap.NamingException; import org.springframework.ldap.core.ContextSource; -import org.springframework.ldap.transaction.compensating.DirContextHolder; import org.springframework.ldap.transaction.compensating.LdapTransactionUtils; import org.springframework.transaction.compensating.support.CompensatingTransactionUtils; +import org.springframework.transaction.support.TransactionSynchronizationManager; /** * Proxy implementation for DirContext, making sure that the instance is not @@ -32,11 +35,13 @@ import org.springframework.transaction.compensating.support.CompensatingTransact * storing compensating rollback operations for them. * * @author Mattias Arthursson - * @since 1.2 */ public class TransactionAwareDirContextInvocationHandler implements InvocationHandler { + private static Log log = LogFactory + .getLog(TransactionAwareDirContextInvocationHandler.class); + private DirContext target; private ContextSource contextSource; @@ -75,7 +80,7 @@ public class TransactionAwareDirContextInvocationHandler implements // Use hashCode of Connection proxy. return new Integer(proxy.hashCode()); } else if (methodName.equals("close")) { - LdapTransactionUtils.doCloseConnection(target, contextSource); + doCloseConnection(target, contextSource); return null; } else if (LdapTransactionUtils .isSupportedWriteTransactionOperation(methodName)) { @@ -91,4 +96,30 @@ public class TransactionAwareDirContextInvocationHandler implements } } } + + /** + * Close the supplied context, but only if it is not associated with the + * current transaction. + * + * @param context + * the DirContext to close. + * @param contextSource + * the ContextSource bound to the transaction. + * @throws NamingException + */ + void doCloseConnection(DirContext context, ContextSource contextSource) + throws javax.naming.NamingException { + DirContextHolder transactionContextHolder = (DirContextHolder) TransactionSynchronizationManager + .getResource(contextSource); + if (transactionContextHolder == null + || transactionContextHolder.getCtx() != context) { + log.debug("Closing context"); + // This is not the transactional context or the transaction is + // no longer active - we should close it. + context.close(); + } else { + log.debug("Leaving transactional context open"); + } + } + } \ No newline at end of file diff --git a/spring-ldap/src/main/java/org/springframework/ldap/transaction/core/package.html b/spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/package.html similarity index 100% rename from spring-ldap/src/main/java/org/springframework/ldap/transaction/core/package.html rename to spring-ldap/src/main/java/org/springframework/ldap/transaction/compensating/manager/package.html diff --git a/spring-ldap/src/main/java/org/springframework/transaction/compensating/CompensatingTransactionOperationFactory.java b/spring-ldap/src/main/java/org/springframework/transaction/compensating/CompensatingTransactionOperationFactory.java index 574e5d5c..d494e14f 100644 --- a/spring-ldap/src/main/java/org/springframework/transaction/compensating/CompensatingTransactionOperationFactory.java +++ b/spring-ldap/src/main/java/org/springframework/transaction/compensating/CompensatingTransactionOperationFactory.java @@ -31,11 +31,14 @@ public interface CompensatingTransactionOperationFactory { * Create an appropriate {@link CompensatingTransactionOperationRecorder} * instance corresponding to the supplied method name. * + * @param resource + * The target transaction resource. * @param method * the method name to create a * {@link CompensatingTransactionOperationRecorder} for. + * * @return a new {@link CompensatingTransactionOperationRecorder} instance. */ public CompensatingTransactionOperationRecorder createRecordingOperation( - String method); + Object resource, String method); } diff --git a/spring-ldap/src/main/java/org/springframework/transaction/compensating/CompensatingTransactionOperationManager.java b/spring-ldap/src/main/java/org/springframework/transaction/compensating/CompensatingTransactionOperationManager.java index a15b80c9..39b78741 100644 --- a/spring-ldap/src/main/java/org/springframework/transaction/compensating/CompensatingTransactionOperationManager.java +++ b/spring-ldap/src/main/java/org/springframework/transaction/compensating/CompensatingTransactionOperationManager.java @@ -31,12 +31,15 @@ public interface CompensatingTransactionOperationManager { * operation), performing the operation, and storing the necessary * information to roll back or commit the performed operation. * + * @param resource + * the target resource to perform the operation on. * @param operation * The method to be invoked. * @param args * Arguments supplied to the method. */ - public void performOperation(String operation, Object[] args); + public void performOperation(Object resource, String operation, + Object[] args); /** * Rollback all recorded operations, by performing each of the recorded diff --git a/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/AbstractCompensatingTransactionManagerDelegate.java b/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/AbstractCompensatingTransactionManagerDelegate.java index 6dd72fec..9dd03360 100644 --- a/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/AbstractCompensatingTransactionManagerDelegate.java +++ b/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/AbstractCompensatingTransactionManagerDelegate.java @@ -17,7 +17,6 @@ package org.springframework.transaction.compensating.support; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.ldap.transaction.core.ContextSourceTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionException; import org.springframework.transaction.support.DefaultTransactionStatus; @@ -34,7 +33,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager public abstract class AbstractCompensatingTransactionManagerDelegate { private static Log log = LogFactory - .getLog(ContextSourceTransactionManager.class); + .getLog(AbstractCompensatingTransactionManagerDelegate.class); /** * Close the target resource - the implementation specific resource held in diff --git a/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/CompensatingTransactionHolderSupport.java b/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/CompensatingTransactionHolderSupport.java index 470177a7..25e5ade9 100644 --- a/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/CompensatingTransactionHolderSupport.java +++ b/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/CompensatingTransactionHolderSupport.java @@ -15,8 +15,6 @@ */ package org.springframework.transaction.compensating.support; -import org.springframework.ldap.transaction.compensating.LdapCompensatingTransactionOperationFactory; -import org.springframework.transaction.compensating.CompensatingTransactionOperationFactory; import org.springframework.transaction.compensating.CompensatingTransactionOperationManager; import org.springframework.transaction.support.ResourceHolderSupport; @@ -32,23 +30,23 @@ public abstract class CompensatingTransactionHolderSupport extends private CompensatingTransactionOperationManager transactionOperationManager; /** - * This method creates a new TransactionOperationManager instance. To be - * called by subclass in case the target object has changed. + * Constructor. + * + * @param manager + * The {@link CompensatingTransactionOperationManager} to use for + * creating Compensating operations. */ - protected void refreshTransactionOperationManager() { - setTransactionOperationManager(new DefaultCompensatingTransactionOperationManager( - createOperationFactory())); + public CompensatingTransactionHolderSupport( + CompensatingTransactionOperationManager manager) { + this.transactionOperationManager = manager; } /** - * Factory method to create a - * {@link CompensatingTransactionOperationFactory} using the settings and - * current state of this object. + * Get the actual transacted resource. * - * @return a new {@link LdapCompensatingTransactionOperationFactory} - * referncing the current transaction context. + * @return the transaction's target resource */ - protected abstract CompensatingTransactionOperationFactory createOperationFactory(); + protected abstract Object getTransactedResource(); public void clear() { super.clear(); diff --git a/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/CompensatingTransactionObject.java b/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/CompensatingTransactionObject.java index ca00bad6..e5662291 100644 --- a/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/CompensatingTransactionObject.java +++ b/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/CompensatingTransactionObject.java @@ -15,7 +15,7 @@ */ package org.springframework.transaction.compensating.support; -import org.springframework.ldap.transaction.compensating.DirContextHolder; +import org.springframework.ldap.transaction.compensating.manager.DirContextHolder; /** * Transaction object for ContextSourceTransactionManager. Keeps a reference to diff --git a/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/CompensatingTransactionUtils.java b/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/CompensatingTransactionUtils.java index ae4468ae..8ce8f895 100644 --- a/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/CompensatingTransactionUtils.java +++ b/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/CompensatingTransactionUtils.java @@ -38,13 +38,15 @@ public class CompensatingTransactionUtils { */ public static void performOperation(Object synchronizationKey, Object target, Method method, Object[] args) throws Throwable { - CompensatingTransactionHolderSupport transactionContextHolder = (CompensatingTransactionHolderSupport) TransactionSynchronizationManager + CompensatingTransactionHolderSupport transactionResourceHolder = (CompensatingTransactionHolderSupport) TransactionSynchronizationManager .getResource(synchronizationKey); - if (transactionContextHolder != null) { + if (transactionResourceHolder != null) { - CompensatingTransactionOperationManager transactionDataManager = transactionContextHolder + CompensatingTransactionOperationManager transactionOperationManager = transactionResourceHolder .getTransactionOperationManager(); - transactionDataManager.performOperation(method.getName(), args); + transactionOperationManager.performOperation( + transactionResourceHolder.getTransactedResource(), method + .getName(), args); } else { // Perform the target operation try { diff --git a/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/DefaultCompensatingTransactionOperationManager.java b/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/DefaultCompensatingTransactionOperationManager.java index 1ad1d788..afbec1ea 100644 --- a/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/DefaultCompensatingTransactionOperationManager.java +++ b/spring-ldap/src/main/java/org/springframework/transaction/compensating/support/DefaultCompensatingTransactionOperationManager.java @@ -58,12 +58,13 @@ public class DefaultCompensatingTransactionOperationManager implements /* * (non-Javadoc) * - * @see org.springframework.ldap.support.transaction.CompensatingTransactionOperationManager#operationPerformed(java.lang.String, - * java.lang.Object[]) + * @see org.springframework.transaction.compensating.CompensatingTransactionOperationManager#performOperation(java.lang.Object, + * java.lang.String, java.lang.Object[]) */ - public void performOperation(String operation, Object[] args) { + public void performOperation(Object resource, String operation, + Object[] args) { CompensatingTransactionOperationRecorder recorder = operationFactory - .createRecordingOperation(operation); + .createRecordingOperation(resource, operation); CompensatingTransactionOperationExecutor executor = recorder .recordOperation(args); diff --git a/spring-ldap/src/test/java/org/springframework/ldap/transaction/compensating/LdapCompensatingTransactionOperationFactoryTest.java b/spring-ldap/src/test/java/org/springframework/ldap/transaction/compensating/LdapCompensatingTransactionOperationFactoryTest.java index 50d2396c..2a768b50 100644 --- a/spring-ldap/src/test/java/org/springframework/ldap/transaction/compensating/LdapCompensatingTransactionOperationFactoryTest.java +++ b/spring-ldap/src/test/java/org/springframework/ldap/transaction/compensating/LdapCompensatingTransactionOperationFactoryTest.java @@ -15,17 +15,12 @@ */ package org.springframework.ldap.transaction.compensating; +import javax.naming.directory.DirContext; + import junit.framework.TestCase; import org.easymock.MockControl; import org.springframework.ldap.core.LdapOperations; -import org.springframework.ldap.transaction.compensating.BindOperationRecorder; -import org.springframework.ldap.transaction.compensating.LdapCompensatingTransactionOperationFactory; -import org.springframework.ldap.transaction.compensating.ModifyAttributesOperationRecorder; -import org.springframework.ldap.transaction.compensating.RebindOperationRecorder; -import org.springframework.ldap.transaction.compensating.RenameOperationRecorder; -import org.springframework.ldap.transaction.compensating.TempEntryRenamingStrategy; -import org.springframework.ldap.transaction.compensating.UnbindOperationRecorder; import org.springframework.transaction.compensating.CompensatingTransactionOperationRecorder; public class LdapCompensatingTransactionOperationFactoryTest extends TestCase { @@ -37,6 +32,12 @@ public class LdapCompensatingTransactionOperationFactoryTest extends TestCase { private TempEntryRenamingStrategy renamingStrategyMock; + private MockControl dirContextControl; + + private DirContext dirContextMock; + + private LdapCompensatingTransactionOperationFactory tested; + protected void setUp() throws Exception { ldapOperationsControl = MockControl.createControl(LdapOperations.class); ldapOperationsMock = (LdapOperations) ldapOperationsControl.getMock(); @@ -46,6 +47,17 @@ public class LdapCompensatingTransactionOperationFactoryTest extends TestCase { renamingStrategyMock = (TempEntryRenamingStrategy) renamingStrategyControl .getMock(); + dirContextControl = MockControl.createControl(DirContext.class); + dirContextMock = (DirContext) dirContextControl.getMock(); + + tested = new LdapCompensatingTransactionOperationFactory( + renamingStrategyMock) { + + LdapOperations createLdapOperationsInstance(DirContext ctx) { + assertEquals(dirContextMock, ctx); + return ldapOperationsMock; + } + }; } protected void tearDown() throws Exception { @@ -54,25 +66,29 @@ public class LdapCompensatingTransactionOperationFactoryTest extends TestCase { renamingStrategyControl = null; renamingStrategyMock = null; + + dirContextControl = null; + dirContextMock = null; + + tested = null; } protected void replay() { ldapOperationsControl.replay(); renamingStrategyControl.replay(); + dirContextControl.replay(); } protected void verify() { ldapOperationsControl.verify(); renamingStrategyControl.verify(); + dirContextControl.verify(); } public void testGetRecordingOperation_Bind() throws Exception { - LdapCompensatingTransactionOperationFactory tested = new LdapCompensatingTransactionOperationFactory( - null, renamingStrategyMock); - tested.setLdapOperations(ldapOperationsMock); CompensatingTransactionOperationRecorder result = tested - .createRecordingOperation("bind"); + .createRecordingOperation(dirContextMock, "bind"); assertTrue(result instanceof BindOperationRecorder); BindOperationRecorder bindOperationRecorder = (BindOperationRecorder) result; assertSame(ldapOperationsMock, bindOperationRecorder @@ -80,12 +96,8 @@ public class LdapCompensatingTransactionOperationFactoryTest extends TestCase { } public void testGetRecordingOperation_Rebind() throws Exception { - LdapCompensatingTransactionOperationFactory tested = new LdapCompensatingTransactionOperationFactory( - null, renamingStrategyMock); - tested.setLdapOperations(ldapOperationsMock); - CompensatingTransactionOperationRecorder result = tested - .createRecordingOperation("rebind"); + .createRecordingOperation(dirContextMock, "rebind"); assertTrue(result instanceof RebindOperationRecorder); RebindOperationRecorder rebindOperationRecorder = (RebindOperationRecorder) result; assertSame(ldapOperationsMock, rebindOperationRecorder @@ -95,41 +107,28 @@ public class LdapCompensatingTransactionOperationFactoryTest extends TestCase { } public void testGetRecordingOperation_Rename() throws Exception { - LdapCompensatingTransactionOperationFactory tested = new LdapCompensatingTransactionOperationFactory( - null, renamingStrategyMock); - tested.setLdapOperations(ldapOperationsMock); - CompensatingTransactionOperationRecorder result = tested - .createRecordingOperation("rename"); + .createRecordingOperation(dirContextMock, "rename"); assertTrue(result instanceof RenameOperationRecorder); RenameOperationRecorder recordingOperation = (RenameOperationRecorder) result; assertSame(ldapOperationsMock, recordingOperation.getLdapOperations()); } public void testGetRecordingOperation_ModifyAttributes() throws Exception { - LdapCompensatingTransactionOperationFactory tested = new LdapCompensatingTransactionOperationFactory( - null, renamingStrategyMock); - tested.setLdapOperations(ldapOperationsMock); - CompensatingTransactionOperationRecorder result = tested - .createRecordingOperation("modifyAttributes"); + .createRecordingOperation(dirContextMock, "modifyAttributes"); assertTrue(result instanceof ModifyAttributesOperationRecorder); ModifyAttributesOperationRecorder recordingOperation = (ModifyAttributesOperationRecorder) result; assertSame(ldapOperationsMock, recordingOperation.getLdapOperations()); } public void testGetRecordingOperation_Unbind() throws Exception { - LdapCompensatingTransactionOperationFactory tested = new LdapCompensatingTransactionOperationFactory( - null, renamingStrategyMock); - tested.setLdapOperations(ldapOperationsMock); - CompensatingTransactionOperationRecorder result = tested - .createRecordingOperation("unbind"); + .createRecordingOperation(dirContextMock, "unbind"); assertTrue(result instanceof UnbindOperationRecorder); UnbindOperationRecorder recordingOperation = (UnbindOperationRecorder) result; assertSame(ldapOperationsMock, recordingOperation.getLdapOperations()); assertSame(renamingStrategyMock, recordingOperation .getRenamingStrategy()); } - } diff --git a/spring-ldap/src/test/java/org/springframework/ldap/transaction/compensating/LdapTransactionUtilsTest.java b/spring-ldap/src/test/java/org/springframework/ldap/transaction/compensating/LdapTransactionUtilsTest.java index 914aa536..5eed68e4 100644 --- a/spring-ldap/src/test/java/org/springframework/ldap/transaction/compensating/LdapTransactionUtilsTest.java +++ b/spring-ldap/src/test/java/org/springframework/ldap/transaction/compensating/LdapTransactionUtilsTest.java @@ -21,11 +21,7 @@ import javax.naming.directory.DirContext; import junit.framework.TestCase; import org.easymock.MockControl; -import org.springframework.ldap.core.ContextSource; import org.springframework.ldap.support.LdapUtils; -import org.springframework.ldap.transaction.compensating.DirContextHolder; -import org.springframework.ldap.transaction.compensating.LdapTransactionUtils; -import org.springframework.transaction.compensating.support.CompensatingTransactionHolderSupport; import org.springframework.transaction.support.TransactionSynchronizationManager; public class LdapTransactionUtilsTest extends TestCase { @@ -34,17 +30,10 @@ public class LdapTransactionUtilsTest extends TestCase { private DirContext dirContextMock; - private MockControl contextSourceControl; - - private ContextSource contextSourceMock; - protected void setUp() throws Exception { dirContextControl = MockControl.createControl(DirContext.class); dirContextMock = (DirContext) dirContextControl.getMock(); - contextSourceControl = MockControl.createControl(ContextSource.class); - contextSourceMock = (ContextSource) contextSourceControl.getMock(); - if (TransactionSynchronizationManager.isSynchronizationActive()) { TransactionSynchronizationManager.clearSynchronization(); } @@ -53,19 +42,14 @@ public class LdapTransactionUtilsTest extends TestCase { protected void tearDown() throws Exception { dirContextControl = null; dirContextMock = null; - - contextSourceControl = null; - contextSourceMock = null; } protected void replay() { dirContextControl.replay(); - contextSourceControl.replay(); } protected void verify() { dirContextControl.verify(); - contextSourceControl.verify(); } public void testCloseContext() throws NamingException { @@ -82,51 +66,6 @@ public class LdapTransactionUtilsTest extends TestCase { verify(); } - public void testDoCloseConnection_NoTransaction() throws NamingException { - dirContextMock.close(); - - replay(); - LdapTransactionUtils.doCloseConnection(dirContextMock, - contextSourceMock); - verify(); - } - - public void testDoCloseConnection_ActiveTransaction() - throws NamingException { - CompensatingTransactionHolderSupport holder = new DirContextHolder( - dirContextMock, null); - TransactionSynchronizationManager.bindResource(contextSourceMock, - holder); - - // Context should not be closed. - - replay(); - LdapTransactionUtils.doCloseConnection(dirContextMock, - contextSourceMock); - verify(); - } - - public void testDoCloseConnection_NotTransactionalContext() - throws NamingException { - CompensatingTransactionHolderSupport holder = new DirContextHolder( - dirContextMock, null); - TransactionSynchronizationManager.bindResource(contextSourceMock, - holder); - - MockControl dirContextControl2 = MockControl - .createControl(DirContext.class); - DirContext dirContextMock2 = (DirContext) dirContextControl2.getMock(); - - dirContextMock2.close(); - - dirContextControl2.replay(); - replay(); - LdapTransactionUtils.doCloseConnection(dirContextMock2, - contextSourceMock); - verify(); - dirContextControl2.verify(); - } - public void testIsSupportedWriteTransactionOperation() { assertTrue(LdapTransactionUtils .isSupportedWriteTransactionOperation("bind")); diff --git a/spring-ldap/src/test/java/org/springframework/ldap/transaction/core/ContextSourceTransactionManagerTest.java b/spring-ldap/src/test/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceTransactionManagerTest.java similarity index 82% rename from spring-ldap/src/test/java/org/springframework/ldap/transaction/core/ContextSourceTransactionManagerTest.java rename to spring-ldap/src/test/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceTransactionManagerTest.java index dc8acca1..509f36c8 100644 --- a/spring-ldap/src/test/java/org/springframework/ldap/transaction/core/ContextSourceTransactionManagerTest.java +++ b/spring-ldap/src/test/java/org/springframework/ldap/transaction/compensating/manager/ContextSourceTransactionManagerTest.java @@ -1,19 +1,4 @@ -/* - * Copyright 2005-2007 the original author or authors. - * - * Licensed 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.springframework.ldap.transaction.core; +package org.springframework.ldap.transaction.compensating.manager; import javax.naming.directory.DirContext; @@ -21,10 +6,9 @@ import junit.framework.TestCase; import org.easymock.MockControl; import org.springframework.ldap.core.ContextSource; -import org.springframework.ldap.transaction.compensating.DirContextHolder; import org.springframework.ldap.transaction.compensating.TempEntryRenamingStrategy; -import org.springframework.ldap.transaction.core.ContextSourceTransactionManager; -import org.springframework.ldap.transaction.core.TransactionAwareContextSourceProxy; +import org.springframework.ldap.transaction.compensating.manager.ContextSourceTransactionManager; +import org.springframework.ldap.transaction.compensating.manager.TransactionAwareContextSourceProxy; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.compensating.CompensatingTransactionOperationManager; import org.springframework.transaction.compensating.support.CompensatingTransactionHolderSupport; @@ -121,8 +105,8 @@ public class ContextSourceTransactionManagerTest extends TestCase { } public void testDoGetTransactionTransactionActive() { - CompensatingTransactionHolderSupport expectedContextHolder = new DirContextHolder(null, - null); + CompensatingTransactionHolderSupport expectedContextHolder = new DirContextHolder( + null, null); TransactionSynchronizationManager.bindResource(contextSourceMock, expectedContextHolder); Object result = tested.doGetTransaction(); @@ -145,8 +129,6 @@ public class ContextSourceTransactionManagerTest extends TestCase { DirContextHolder foundContextHolder = (DirContextHolder) TransactionSynchronizationManager .getResource(contextSourceMock); assertSame(contextMock, foundContextHolder.getCtx()); - assertSame(renamingStrategyMock, foundContextHolder - .getRenamingStrategy()); } public void testDoCommit() { @@ -154,8 +136,8 @@ public class ContextSourceTransactionManagerTest extends TestCase { public void testDoRollback() { - DirContextHolder expectedContextHolder = new DirContextHolder( - contextMock, renamingStrategyMock); + DirContextHolder expectedContextHolder = new DirContextHolder(null, + contextMock); expectedContextHolder .setTransactionOperationManager(transactionDataManagerMock); TransactionSynchronizationManager.bindResource(contextSourceMock, @@ -172,8 +154,8 @@ public class ContextSourceTransactionManagerTest extends TestCase { } public void testDoCleanupAfterCompletion() throws Exception { - DirContextHolder expectedContextHolder = new DirContextHolder( - contextMock, renamingStrategyMock); + DirContextHolder expectedContextHolder = new DirContextHolder(null, + contextMock); TransactionSynchronizationManager.bindResource(contextSourceMock, expectedContextHolder); diff --git a/spring-ldap/src/test/java/org/springframework/ldap/transaction/core/TransactionAwareContextSourceProxyTest.java b/spring-ldap/src/test/java/org/springframework/ldap/transaction/compensating/manager/TransactionAwareContextSourceProxyTest.java similarity index 92% rename from spring-ldap/src/test/java/org/springframework/ldap/transaction/core/TransactionAwareContextSourceProxyTest.java rename to spring-ldap/src/test/java/org/springframework/ldap/transaction/compensating/manager/TransactionAwareContextSourceProxyTest.java index d2782396..a2b3d544 100644 --- a/spring-ldap/src/test/java/org/springframework/ldap/transaction/core/TransactionAwareContextSourceProxyTest.java +++ b/spring-ldap/src/test/java/org/springframework/ldap/transaction/compensating/manager/TransactionAwareContextSourceProxyTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2007 the original author or authors. + * Copyright 2002-2007 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ldap.transaction.core; +package org.springframework.ldap.transaction.compensating.manager; import javax.naming.directory.DirContext; import javax.naming.ldap.LdapContext; @@ -23,7 +23,7 @@ import junit.framework.TestCase; import org.easymock.MockControl; import org.springframework.ldap.core.ContextSource; import org.springframework.ldap.core.DirContextProxy; -import org.springframework.ldap.transaction.core.TransactionAwareContextSourceProxy; +import org.springframework.ldap.transaction.compensating.manager.TransactionAwareContextSourceProxy; /** * Tests for {@link TransactionAwareContextSourceProxy}. diff --git a/spring-ldap/src/test/java/org/springframework/ldap/transaction/compensating/manager/TransactionAwareDirContextInvocationHandlerTest.java b/spring-ldap/src/test/java/org/springframework/ldap/transaction/compensating/manager/TransactionAwareDirContextInvocationHandlerTest.java new file mode 100644 index 00000000..3ebbcbad --- /dev/null +++ b/spring-ldap/src/test/java/org/springframework/ldap/transaction/compensating/manager/TransactionAwareDirContextInvocationHandlerTest.java @@ -0,0 +1,113 @@ +/* + * Copyright 2002-2007 the original author or authors. + * + * Licensed 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.springframework.ldap.transaction.compensating.manager; + +import javax.naming.NamingException; +import javax.naming.directory.DirContext; + +import junit.framework.TestCase; + +import org.easymock.MockControl; +import org.springframework.ldap.core.ContextSource; +import org.springframework.ldap.transaction.compensating.manager.TransactionAwareDirContextInvocationHandler; +import org.springframework.transaction.support.TransactionSynchronizationManager; + +public class TransactionAwareDirContextInvocationHandlerTest extends TestCase { + + private MockControl contextSourceControl; + + private ContextSource contextSourceMock; + + private MockControl dirContextControl; + + private DirContext dirContextMock; + + private TransactionAwareDirContextInvocationHandler tested; + + private DirContextHolder holder; + + protected void setUp() throws Exception { + dirContextControl = MockControl.createControl(DirContext.class); + dirContextMock = (DirContext) dirContextControl.getMock(); + + contextSourceControl = MockControl.createControl(ContextSource.class); + contextSourceMock = (ContextSource) contextSourceControl.getMock(); + + holder = new DirContextHolder(null, dirContextMock); + tested = new TransactionAwareDirContextInvocationHandler(null, null); + } + + protected void tearDown() throws Exception { + dirContextControl = null; + dirContextMock = null; + + contextSourceControl = null; + contextSourceMock = null; + + holder = null; + + tested = null; + } + + protected void replay() { + dirContextControl.replay(); + contextSourceControl.replay(); + } + + protected void verify() { + dirContextControl.verify(); + contextSourceControl.verify(); + } + + public void testDoCloseConnection_NoTransaction() throws NamingException { + dirContextMock.close(); + + replay(); + tested.doCloseConnection(dirContextMock, contextSourceMock); + verify(); + } + + public void testDoCloseConnection_ActiveTransaction() + throws NamingException { + TransactionSynchronizationManager.bindResource(contextSourceMock, + holder); + + // Context should not be closed. + + replay(); + tested.doCloseConnection(dirContextMock, contextSourceMock); + verify(); + } + + public void testDoCloseConnection_NotTransactionalContext() + throws NamingException { + TransactionSynchronizationManager.bindResource(contextSourceMock, + holder); + + MockControl dirContextControl2 = MockControl + .createControl(DirContext.class); + DirContext dirContextMock2 = (DirContext) dirContextControl2.getMock(); + + dirContextMock2.close(); + + dirContextControl2.replay(); + replay(); + tested.doCloseConnection(dirContextMock2, contextSourceMock); + verify(); + dirContextControl2.verify(); + } + +} diff --git a/spring-ldap/src/test/java/org/springframework/transaction/compensating/support/CompensatingTransactionUtilsTest.java b/spring-ldap/src/test/java/org/springframework/transaction/compensating/support/CompensatingTransactionUtilsTest.java index daca7969..e7a9b319 100644 --- a/spring-ldap/src/test/java/org/springframework/transaction/compensating/support/CompensatingTransactionUtilsTest.java +++ b/spring-ldap/src/test/java/org/springframework/transaction/compensating/support/CompensatingTransactionUtilsTest.java @@ -23,7 +23,7 @@ import junit.framework.TestCase; import org.easymock.MockControl; import org.springframework.ldap.core.ContextSource; -import org.springframework.ldap.transaction.compensating.DirContextHolder; +import org.springframework.ldap.transaction.compensating.manager.DirContextHolder; import org.springframework.transaction.compensating.CompensatingTransactionOperationManager; import org.springframework.transaction.compensating.support.CompensatingTransactionHolderSupport; import org.springframework.transaction.compensating.support.CompensatingTransactionUtils; @@ -83,20 +83,21 @@ public class CompensatingTransactionUtilsTest extends TestCase { operationManagerControl.verify(); } - public void testPerformOperation() throws Throwable { - CompensatingTransactionHolderSupport holder = new DirContextHolder(dirContextMock, null); + CompensatingTransactionHolderSupport holder = new DirContextHolder( + null, dirContextMock); holder.setTransactionOperationManager(operationManagerMock); TransactionSynchronizationManager.bindResource(contextSourceMock, holder); Object[] expectedArgs = new Object[] { "someDn" }; - operationManagerMock.performOperation("unbind", expectedArgs); + operationManagerMock.performOperation(dirContextMock, "unbind", + expectedArgs); replay(); - CompensatingTransactionUtils.performOperation(contextSourceMock, dirContextMock, - getUnbindMethod(), expectedArgs); + CompensatingTransactionUtils.performOperation(contextSourceMock, + dirContextMock, getUnbindMethod(), expectedArgs); verify(); } @@ -105,8 +106,8 @@ public class CompensatingTransactionUtilsTest extends TestCase { dirContextMock.unbind("someDn"); replay(); - CompensatingTransactionUtils.performOperation(contextSourceMock, dirContextMock, - getUnbindMethod(), expectedArgs); + CompensatingTransactionUtils.performOperation(contextSourceMock, + dirContextMock, getUnbindMethod(), expectedArgs); verify(); } diff --git a/spring-ldap/src/test/java/org/springframework/transaction/compensating/support/DefaultCompensatingTransactionOperationManagerTest.java b/spring-ldap/src/test/java/org/springframework/transaction/compensating/support/DefaultCompensatingTransactionOperationManagerTest.java index efe0f18c..b5c35185 100644 --- a/spring-ldap/src/test/java/org/springframework/transaction/compensating/support/DefaultCompensatingTransactionOperationManagerTest.java +++ b/spring-ldap/src/test/java/org/springframework/transaction/compensating/support/DefaultCompensatingTransactionOperationManagerTest.java @@ -86,11 +86,11 @@ public class DefaultCompensatingTransactionOperationManagerTest extends public void testPerformOperation() { Object[] expectedArgs = new Object[0]; + Object expectedResource = new Object(); - operationFactoryControl - .expectAndReturn(operationFactoryMock - .createRecordingOperation("some method"), - operationRecorderMock); + operationFactoryControl.expectAndReturn(operationFactoryMock + .createRecordingOperation(expectedResource, "some method"), + operationRecorderMock); operationRecorderControl.expectAndReturn(operationRecorderMock .recordOperation(expectedArgs), operationExecutorMock); operationExecutorMock.performOperation(); @@ -98,7 +98,7 @@ public class DefaultCompensatingTransactionOperationManagerTest extends DefaultCompensatingTransactionOperationManager tested = new DefaultCompensatingTransactionOperationManager( operationFactoryMock); replay(); - tested.performOperation("some method", expectedArgs); + tested.performOperation(expectedResource, "some method", expectedArgs); verify(); Stack result = tested.getOperationExecutors();