From c67611e97573a934b249a1571a6295125d21025a Mon Sep 17 00:00:00 2001
From: Justin Richer <jricher@mit.edu>
Date: Mon, 12 Oct 2015 21:15:30 -0400
Subject: [PATCH] added qualifier name to persistence unit and transaction
 manager, closes #883

---
 .../src/main/webapp/WEB-INF/jpa-config.xml       |  2 ++
 .../impl/JpaAuthenticationHolderRepository.java  | 10 +++++-----
 .../impl/JpaAuthorizationCodeRepository.java     |  8 ++++----
 .../impl/JpaOAuth2ClientRepository.java          |  4 ++--
 .../impl/JpaOAuth2TokenRepository.java           | 14 +++++++-------
 .../impl/JpaSystemScopeRepository.java           | 12 ++++++------
 .../DefaultOAuth2AuthorizationCodeService.java   |  2 +-
 .../repository/impl/JpaAddressRepository.java    |  4 ++--
 .../impl/JpaApprovedSiteRepository.java          | 14 +++++++-------
 .../impl/JpaBlacklistedSiteRepository.java       | 12 ++++++------
 .../impl/JpaPairwiseIdentifierRepository.java    |  4 ++--
 .../repository/impl/JpaUserInfoRepository.java   |  2 +-
 .../impl/JpaWhitelistedSiteRepository.java       | 16 ++++++++--------
 .../service/impl/DefaultApprovedSiteService.java |  6 +++---
 .../impl/DefaultBlacklistedSiteService.java      |  2 +-
 .../impl/DefaultWhitelistedSiteService.java      |  2 +-
 .../repository/impl/JpaPermissionRepository.java |  8 ++++----
 .../impl/JpaResourceSetRepository.java           |  6 +++---
 .../service/impl/JpaRegisteredClientService.java |  4 ++--
 19 files changed, 67 insertions(+), 65 deletions(-)

diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/jpa-config.xml b/openid-connect-server-webapp/src/main/webapp/WEB-INF/jpa-config.xml
index 2ac96ba9d..353125811 100644
--- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/jpa-config.xml
+++ b/openid-connect-server-webapp/src/main/webapp/WEB-INF/jpa-config.xml
@@ -31,6 +31,7 @@
 
 	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
 		<property name="entityManagerFactory" ref="entityManagerFactory" />
+		<qualifier value="defaultTransactionManager" />
 	</bean>
 
 	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
@@ -46,6 +47,7 @@
 				<entry key="eclipselink.cache.shared.default" value="false" />
 			</map>
 		</property>
+		<property name="persistenceUnitName" value="defaultPersistenceUnit" />
 	</bean>
 
 
diff --git a/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaAuthenticationHolderRepository.java b/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaAuthenticationHolderRepository.java
index 497ed6e23..b71b578e7 100644
--- a/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaAuthenticationHolderRepository.java
+++ b/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaAuthenticationHolderRepository.java
@@ -29,12 +29,12 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-@Transactional
+@Transactional(value="defaultTransactionManager")
 public class JpaAuthenticationHolderRepository implements AuthenticationHolderRepository {
 
 	private static final int MAXEXPIREDRESULTS = 1000;
 
-	@PersistenceContext
+	@PersistenceContext(unitName="defaultPersistenceUnit")
 	private EntityManager manager;
 
 	@Override
@@ -49,7 +49,7 @@ public class JpaAuthenticationHolderRepository implements AuthenticationHolderRe
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public void remove(AuthenticationHolderEntity a) {
 		AuthenticationHolderEntity found = getById(a.getId());
 		if (found != null) {
@@ -60,13 +60,13 @@ public class JpaAuthenticationHolderRepository implements AuthenticationHolderRe
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public AuthenticationHolderEntity save(AuthenticationHolderEntity a) {
 		return JpaUtil.saveOrUpdate(a.getId(), manager, a);
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public List<AuthenticationHolderEntity> getOrphanedAuthenticationHolders() {
 		TypedQuery<AuthenticationHolderEntity> query = manager.createNamedQuery(AuthenticationHolderEntity.QUERY_GET_UNUSED, AuthenticationHolderEntity.class);
 		query.setMaxResults(MAXEXPIREDRESULTS);
diff --git a/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaAuthorizationCodeRepository.java b/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaAuthorizationCodeRepository.java
index 58b6adcca..ac325e589 100644
--- a/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaAuthorizationCodeRepository.java
+++ b/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaAuthorizationCodeRepository.java
@@ -39,17 +39,17 @@ import org.springframework.transaction.annotation.Transactional;
  *
  */
 @Repository
-@Transactional
+@Transactional(value="defaultTransactionManager")
 public class JpaAuthorizationCodeRepository implements AuthorizationCodeRepository {
 
-	@PersistenceContext
+	@PersistenceContext(unitName="defaultPersistenceUnit")
 	EntityManager manager;
 
 	/* (non-Javadoc)
 	 * @see org.mitre.oauth2.repository.AuthorizationCodeRepository#save(org.mitre.oauth2.model.AuthorizationCodeEntity)
 	 */
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public AuthorizationCodeEntity save(AuthorizationCodeEntity authorizationCode) {
 
 		return JpaUtil.saveOrUpdate(authorizationCode.getId(), manager, authorizationCode);
@@ -60,7 +60,7 @@ public class JpaAuthorizationCodeRepository implements AuthorizationCodeReposito
 	 * @see org.mitre.oauth2.repository.AuthorizationCodeRepository#getByCode(java.lang.String)
 	 */
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public AuthorizationCodeEntity getByCode(String code) {
 		TypedQuery<AuthorizationCodeEntity> query = manager.createNamedQuery(AuthorizationCodeEntity.QUERY_BY_VALUE, AuthorizationCodeEntity.class);
 		query.setParameter("code", code);
diff --git a/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaOAuth2ClientRepository.java b/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaOAuth2ClientRepository.java
index ff80d43c4..0cbc4d4c7 100644
--- a/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaOAuth2ClientRepository.java
+++ b/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaOAuth2ClientRepository.java
@@ -33,10 +33,10 @@ import org.springframework.transaction.annotation.Transactional;
  *
  */
 @Repository
-@Transactional
+@Transactional(value="defaultTransactionManager")
 public class JpaOAuth2ClientRepository implements OAuth2ClientRepository {
 
-	@PersistenceContext
+	@PersistenceContext(unitName="defaultPersistenceUnit")
 	private EntityManager manager;
 
 	public JpaOAuth2ClientRepository() {
diff --git a/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaOAuth2TokenRepository.java b/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaOAuth2TokenRepository.java
index 0e865fe09..ad63dafab 100644
--- a/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaOAuth2TokenRepository.java
+++ b/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaOAuth2TokenRepository.java
@@ -43,7 +43,7 @@ public class JpaOAuth2TokenRepository implements OAuth2TokenRepository {
 
 	private static final int MAXEXPIREDRESULTS = 1000;
 
-	@PersistenceContext
+	@PersistenceContext(unitName="defaultPersistenceUnit")
 	private EntityManager manager;
 
 	@Override
@@ -77,13 +77,13 @@ public class JpaOAuth2TokenRepository implements OAuth2TokenRepository {
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public OAuth2AccessTokenEntity saveAccessToken(OAuth2AccessTokenEntity token) {
 		return JpaUtil.saveOrUpdate(token.getId(), manager, token);
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public void removeAccessToken(OAuth2AccessTokenEntity accessToken) {
 		OAuth2AccessTokenEntity found = getAccessTokenByValue(accessToken.getValue());
 		if (found != null) {
@@ -94,7 +94,7 @@ public class JpaOAuth2TokenRepository implements OAuth2TokenRepository {
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public void clearAccessTokensForRefreshToken(OAuth2RefreshTokenEntity refreshToken) {
 		TypedQuery<OAuth2AccessTokenEntity> query = manager.createNamedQuery(OAuth2AccessTokenEntity.QUERY_BY_REFRESH_TOKEN, OAuth2AccessTokenEntity.class);
 		query.setParameter(OAuth2AccessTokenEntity.PARAM_REFERSH_TOKEN, refreshToken);
@@ -122,13 +122,13 @@ public class JpaOAuth2TokenRepository implements OAuth2TokenRepository {
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public OAuth2RefreshTokenEntity saveRefreshToken(OAuth2RefreshTokenEntity refreshToken) {
 		return JpaUtil.saveOrUpdate(refreshToken.getId(), manager, refreshToken);
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public void removeRefreshToken(OAuth2RefreshTokenEntity refreshToken) {
 		OAuth2RefreshTokenEntity found = getRefreshTokenByValue(refreshToken.getValue());
 		if (found != null) {
@@ -139,7 +139,7 @@ public class JpaOAuth2TokenRepository implements OAuth2TokenRepository {
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public void clearTokensForClient(ClientDetailsEntity client) {
 		TypedQuery<OAuth2AccessTokenEntity> queryA = manager.createNamedQuery(OAuth2AccessTokenEntity.QUERY_BY_CLIENT, OAuth2AccessTokenEntity.class);
 		queryA.setParameter(OAuth2AccessTokenEntity.PARAM_CLIENT, client);
diff --git a/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaSystemScopeRepository.java b/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaSystemScopeRepository.java
index 53027e8c1..20cfa63ab 100644
--- a/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaSystemScopeRepository.java
+++ b/openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaSystemScopeRepository.java
@@ -41,14 +41,14 @@ import static org.mitre.util.jpa.JpaUtil.saveOrUpdate;
 @Repository("jpaSystemScopeRepository")
 public class JpaSystemScopeRepository implements SystemScopeRepository {
 
-	@PersistenceContext
+	@PersistenceContext(unitName="defaultPersistenceUnit")
 	private EntityManager em;
 
 	/* (non-Javadoc)
 	 * @see org.mitre.oauth2.repository.SystemScopeRepository#getAll()
 	 */
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public Set<SystemScope> getAll() {
 		TypedQuery<SystemScope> query = em.createNamedQuery(SystemScope.QUERY_ALL, SystemScope.class);
 
@@ -59,7 +59,7 @@ public class JpaSystemScopeRepository implements SystemScopeRepository {
 	 * @see org.mitre.oauth2.repository.SystemScopeRepository#getById(java.lang.Long)
 	 */
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public SystemScope getById(Long id) {
 		return em.find(SystemScope.class, id);
 	}
@@ -68,7 +68,7 @@ public class JpaSystemScopeRepository implements SystemScopeRepository {
 	 * @see org.mitre.oauth2.repository.SystemScopeRepository#getByValue(java.lang.String)
 	 */
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public SystemScope getByValue(String value) {
 		TypedQuery<SystemScope> query = em.createNamedQuery(SystemScope.QUERY_BY_VALUE, SystemScope.class);
 		query.setParameter(SystemScope.PARAM_VALUE, value);
@@ -79,7 +79,7 @@ public class JpaSystemScopeRepository implements SystemScopeRepository {
 	 * @see org.mitre.oauth2.repository.SystemScopeRepository#remove(org.mitre.oauth2.model.SystemScope)
 	 */
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public void remove(SystemScope scope) {
 		SystemScope found = getById(scope.getId());
 
@@ -93,7 +93,7 @@ public class JpaSystemScopeRepository implements SystemScopeRepository {
 	 * @see org.mitre.oauth2.repository.SystemScopeRepository#save(org.mitre.oauth2.model.SystemScope)
 	 */
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public SystemScope save(SystemScope scope) {
 		return saveOrUpdate(scope.getId(), em, scope);
 	}
diff --git a/openid-connect-server/src/main/java/org/mitre/oauth2/service/impl/DefaultOAuth2AuthorizationCodeService.java b/openid-connect-server/src/main/java/org/mitre/oauth2/service/impl/DefaultOAuth2AuthorizationCodeService.java
index 36cb51644..8403a6f5b 100644
--- a/openid-connect-server/src/main/java/org/mitre/oauth2/service/impl/DefaultOAuth2AuthorizationCodeService.java
+++ b/openid-connect-server/src/main/java/org/mitre/oauth2/service/impl/DefaultOAuth2AuthorizationCodeService.java
@@ -112,7 +112,7 @@ public class DefaultOAuth2AuthorizationCodeService implements AuthorizationCodeS
 	/**
 	 * Find and remove all expired auth codes.
 	 */
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public void clearExpiredAuthorizationCodes() {
 
 		Collection<AuthorizationCodeEntity> codes = repository.getExpiredCodes();
diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaAddressRepository.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaAddressRepository.java
index ff7fbb97e..8634c1b81 100644
--- a/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaAddressRepository.java
+++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaAddressRepository.java
@@ -33,11 +33,11 @@ import org.springframework.transaction.annotation.Transactional;
 @Repository
 public class JpaAddressRepository implements AddressRepository {
 
-	@PersistenceContext
+	@PersistenceContext(unitName="defaultPersistenceUnit")
 	private EntityManager manager;
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public Address getById(Long id) {
 		return manager.find(Address.class, id);
 	}
diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaApprovedSiteRepository.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaApprovedSiteRepository.java
index 330116e23..d0869521d 100644
--- a/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaApprovedSiteRepository.java
+++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaApprovedSiteRepository.java
@@ -38,24 +38,24 @@ import static org.mitre.util.jpa.JpaUtil.saveOrUpdate;
 @Repository
 public class JpaApprovedSiteRepository implements ApprovedSiteRepository {
 
-	@PersistenceContext
+	@PersistenceContext(unitName="defaultPersistenceUnit")
 	private EntityManager manager;
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public Collection<ApprovedSite> getAll() {
 		TypedQuery<ApprovedSite> query = manager.createNamedQuery(ApprovedSite.QUERY_ALL, ApprovedSite.class);
 		return query.getResultList();
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public ApprovedSite getById(Long id) {
 		return manager.find(ApprovedSite.class, id);
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public void remove(ApprovedSite approvedSite) {
 		ApprovedSite found = manager.find(ApprovedSite.class, approvedSite.getId());
 
@@ -67,7 +67,7 @@ public class JpaApprovedSiteRepository implements ApprovedSiteRepository {
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public ApprovedSite save(ApprovedSite approvedSite) {
 		return saveOrUpdate(approvedSite.getId(), manager, approvedSite);
 	}
@@ -83,7 +83,7 @@ public class JpaApprovedSiteRepository implements ApprovedSiteRepository {
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public Collection<ApprovedSite> getByUserId(String userId) {
 		TypedQuery<ApprovedSite> query = manager.createNamedQuery(ApprovedSite.QUERY_BY_USER_ID, ApprovedSite.class);
 		query.setParameter(ApprovedSite.PARAM_USER_ID, userId);
@@ -93,7 +93,7 @@ public class JpaApprovedSiteRepository implements ApprovedSiteRepository {
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public Collection<ApprovedSite> getByClientId(String clientId) {
 		TypedQuery<ApprovedSite> query = manager.createNamedQuery(ApprovedSite.QUERY_BY_CLIENT_ID, ApprovedSite.class);
 		query.setParameter(ApprovedSite.PARAM_CLIENT_ID, clientId);
diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaBlacklistedSiteRepository.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaBlacklistedSiteRepository.java
index 762a57824..53b7fad1e 100644
--- a/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaBlacklistedSiteRepository.java
+++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaBlacklistedSiteRepository.java
@@ -39,14 +39,14 @@ import static org.mitre.util.jpa.JpaUtil.saveOrUpdate;
 @Repository
 public class JpaBlacklistedSiteRepository implements BlacklistedSiteRepository {
 
-	@PersistenceContext
+	@PersistenceContext(unitName="defaultPersistenceUnit")
 	private EntityManager manager;
 
 	/* (non-Javadoc)
 	 * @see org.mitre.openid.connect.repository.BlacklistedSiteRepository#getAll()
 	 */
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public Collection<BlacklistedSite> getAll() {
 		TypedQuery<BlacklistedSite> query = manager.createNamedQuery(BlacklistedSite.QUERY_ALL, BlacklistedSite.class);
 		return query.getResultList();
@@ -56,7 +56,7 @@ public class JpaBlacklistedSiteRepository implements BlacklistedSiteRepository {
 	 * @see org.mitre.openid.connect.repository.BlacklistedSiteRepository#getById(java.lang.Long)
 	 */
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public BlacklistedSite getById(Long id) {
 		return manager.find(BlacklistedSite.class, id);
 	}
@@ -65,7 +65,7 @@ public class JpaBlacklistedSiteRepository implements BlacklistedSiteRepository {
 	 * @see org.mitre.openid.connect.repository.BlacklistedSiteRepository#remove(org.mitre.openid.connect.model.BlacklistedSite)
 	 */
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public void remove(BlacklistedSite blacklistedSite) {
 		BlacklistedSite found = manager.find(BlacklistedSite.class, blacklistedSite.getId());
 
@@ -81,7 +81,7 @@ public class JpaBlacklistedSiteRepository implements BlacklistedSiteRepository {
 	 * @see org.mitre.openid.connect.repository.BlacklistedSiteRepository#save(org.mitre.openid.connect.model.BlacklistedSite)
 	 */
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public BlacklistedSite save(BlacklistedSite blacklistedSite) {
 		return saveOrUpdate(blacklistedSite.getId(), manager, blacklistedSite);
 	}
@@ -90,7 +90,7 @@ public class JpaBlacklistedSiteRepository implements BlacklistedSiteRepository {
 	 * @see org.mitre.openid.connect.repository.BlacklistedSiteRepository#update(org.mitre.openid.connect.model.BlacklistedSite, org.mitre.openid.connect.model.BlacklistedSite)
 	 */
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public BlacklistedSite update(BlacklistedSite oldBlacklistedSite, BlacklistedSite blacklistedSite) {
 
 		blacklistedSite.setId(oldBlacklistedSite.getId());
diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaPairwiseIdentifierRepository.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaPairwiseIdentifierRepository.java
index 658517e75..2a37a910d 100644
--- a/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaPairwiseIdentifierRepository.java
+++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaPairwiseIdentifierRepository.java
@@ -38,7 +38,7 @@ import static org.mitre.util.jpa.JpaUtil.saveOrUpdate;
 @Repository
 public class JpaPairwiseIdentifierRepository implements PairwiseIdentifierRepository {
 
-	@PersistenceContext
+	@PersistenceContext(unitName="defaultPersistenceUnit")
 	private EntityManager manager;
 
 	/* (non-Javadoc)
@@ -57,7 +57,7 @@ public class JpaPairwiseIdentifierRepository implements PairwiseIdentifierReposi
 	 * @see org.mitre.openid.connect.repository.PairwiseIdentifierRepository#save(org.mitre.openid.connect.model.PairwiseIdentifier)
 	 */
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public void save(PairwiseIdentifier pairwise) {
 		saveOrUpdate(pairwise.getId(), manager, pairwise);
 	}
diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaUserInfoRepository.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaUserInfoRepository.java
index 936eecd36..fec468cc6 100644
--- a/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaUserInfoRepository.java
+++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaUserInfoRepository.java
@@ -36,7 +36,7 @@ import static org.mitre.util.jpa.JpaUtil.getSingleResult;
 @Repository("jpaUserInfoRepository")
 public class JpaUserInfoRepository implements UserInfoRepository {
 
-	@PersistenceContext
+	@PersistenceContext(unitName="defaultPersistenceUnit")
 	private EntityManager manager;
 
 	/**
diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaWhitelistedSiteRepository.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaWhitelistedSiteRepository.java
index c26c03917..0f157befe 100644
--- a/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaWhitelistedSiteRepository.java
+++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaWhitelistedSiteRepository.java
@@ -39,24 +39,24 @@ import static org.mitre.util.jpa.JpaUtil.saveOrUpdate;
 @Repository
 public class JpaWhitelistedSiteRepository implements WhitelistedSiteRepository {
 
-	@PersistenceContext
+	@PersistenceContext(unitName="defaultPersistenceUnit")
 	private EntityManager manager;
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public Collection<WhitelistedSite> getAll() {
 		TypedQuery<WhitelistedSite> query = manager.createNamedQuery(WhitelistedSite.QUERY_ALL, WhitelistedSite.class);
 		return query.getResultList();
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public WhitelistedSite getById(Long id) {
 		return manager.find(WhitelistedSite.class, id);
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public void remove(WhitelistedSite whitelistedSite) {
 		WhitelistedSite found = manager.find(WhitelistedSite.class, whitelistedSite.getId());
 
@@ -68,13 +68,13 @@ public class JpaWhitelistedSiteRepository implements WhitelistedSiteRepository {
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public WhitelistedSite save(WhitelistedSite whiteListedSite) {
 		return saveOrUpdate(whiteListedSite.getId(), manager, whiteListedSite);
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public WhitelistedSite update(WhitelistedSite oldWhitelistedSite, WhitelistedSite whitelistedSite) {
 		// sanity check
 		whitelistedSite.setId(oldWhitelistedSite.getId());
@@ -83,7 +83,7 @@ public class JpaWhitelistedSiteRepository implements WhitelistedSiteRepository {
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public WhitelistedSite getByClientId(String clientId) {
 		TypedQuery<WhitelistedSite> query = manager.createNamedQuery(WhitelistedSite.QUERY_BY_CLIENT_ID, WhitelistedSite.class);
 		query.setParameter(WhitelistedSite.PARAM_CLIENT_ID, clientId);
@@ -91,7 +91,7 @@ public class JpaWhitelistedSiteRepository implements WhitelistedSiteRepository {
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public Collection<WhitelistedSite> getByCreator(String creatorId) {
 		TypedQuery<WhitelistedSite> query = manager.createNamedQuery(WhitelistedSite.QUERY_BY_CREATOR, WhitelistedSite.class);
 		query.setParameter(WhitelistedSite.PARAM_USER_ID, creatorId);
diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/DefaultApprovedSiteService.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/DefaultApprovedSiteService.java
index f7d0623b9..15145c05f 100644
--- a/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/DefaultApprovedSiteService.java
+++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/DefaultApprovedSiteService.java
@@ -65,7 +65,7 @@ public class DefaultApprovedSiteService implements ApprovedSiteService {
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public ApprovedSite save(ApprovedSite approvedSite) {
 		ApprovedSite a = approvedSiteRepository.save(approvedSite);
 		statsService.resetCache();
@@ -78,7 +78,7 @@ public class DefaultApprovedSiteService implements ApprovedSiteService {
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public void remove(ApprovedSite approvedSite) {
 
 		//Remove any associated access and refresh tokens
@@ -97,7 +97,7 @@ public class DefaultApprovedSiteService implements ApprovedSiteService {
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public ApprovedSite createApprovedSite(String clientId, String userId, Date timeoutDate, Set<String> allowedScopes) {
 
 		ApprovedSite as = approvedSiteRepository.save(new ApprovedSite());
diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/DefaultBlacklistedSiteService.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/DefaultBlacklistedSiteService.java
index f88bfd7de..16c7bf4f3 100644
--- a/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/DefaultBlacklistedSiteService.java
+++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/DefaultBlacklistedSiteService.java
@@ -35,7 +35,7 @@ import com.google.common.base.Strings;
  *
  */
 @Service
-@Transactional
+@Transactional(value="defaultTransactionManager")
 public class DefaultBlacklistedSiteService implements BlacklistedSiteService {
 
 	@Autowired
diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/DefaultWhitelistedSiteService.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/DefaultWhitelistedSiteService.java
index 86c141c8f..d5db58b91 100644
--- a/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/DefaultWhitelistedSiteService.java
+++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/DefaultWhitelistedSiteService.java
@@ -32,7 +32,7 @@ import org.springframework.transaction.annotation.Transactional;
  * 
  */
 @Service
-@Transactional
+@Transactional(value="defaultTransactionManager")
 public class DefaultWhitelistedSiteService implements WhitelistedSiteService {
 
 	@Autowired
diff --git a/uma-server/src/main/java/org/mitre/uma/repository/impl/JpaPermissionRepository.java b/uma-server/src/main/java/org/mitre/uma/repository/impl/JpaPermissionRepository.java
index 213cd7d67..f0adffa4d 100644
--- a/uma-server/src/main/java/org/mitre/uma/repository/impl/JpaPermissionRepository.java
+++ b/uma-server/src/main/java/org/mitre/uma/repository/impl/JpaPermissionRepository.java
@@ -38,11 +38,11 @@ import org.springframework.transaction.annotation.Transactional;
 @Repository
 public class JpaPermissionRepository implements PermissionRepository {
 
-	@PersistenceContext
+	@PersistenceContext(unitName="defaultPersistenceUnit")
 	private EntityManager em;
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public PermissionTicket save(PermissionTicket p) {
 		return JpaUtil.saveOrUpdate(p.getId(), em, p);
 	}
@@ -70,7 +70,7 @@ public class JpaPermissionRepository implements PermissionRepository {
 	 * @see org.mitre.uma.repository.PermissionRepository#saveRawPermission(org.mitre.uma.model.Permission)
 	 */
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public Permission saveRawPermission(Permission p) {
 		return JpaUtil.saveOrUpdate(p.getId(), em, p);
 	}
@@ -97,7 +97,7 @@ public class JpaPermissionRepository implements PermissionRepository {
 	 * @see org.mitre.uma.repository.PermissionRepository#remove(org.mitre.uma.model.PermissionTicket)
 	 */
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public void remove(PermissionTicket ticket) {
 		PermissionTicket found = getByTicket(ticket.getTicket());
 		if (found != null) {
diff --git a/uma-server/src/main/java/org/mitre/uma/repository/impl/JpaResourceSetRepository.java b/uma-server/src/main/java/org/mitre/uma/repository/impl/JpaResourceSetRepository.java
index 2bb6d7192..ffc2bf36d 100644
--- a/uma-server/src/main/java/org/mitre/uma/repository/impl/JpaResourceSetRepository.java
+++ b/uma-server/src/main/java/org/mitre/uma/repository/impl/JpaResourceSetRepository.java
@@ -38,12 +38,12 @@ import org.springframework.transaction.annotation.Transactional;
 @Repository
 public class JpaResourceSetRepository implements ResourceSetRepository {
 
-	@PersistenceContext
+	@PersistenceContext(unitName="defaultPersistenceUnit")
 	private EntityManager em;
 	private static Logger logger = LoggerFactory.getLogger(JpaResourceSetRepository.class);
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public ResourceSet save(ResourceSet rs) {
 		return JpaUtil.saveOrUpdate(rs.getId(), em, rs);
 	}
@@ -54,7 +54,7 @@ public class JpaResourceSetRepository implements ResourceSetRepository {
 	}
 
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public void remove(ResourceSet rs) {
 		ResourceSet found = getById(rs.getId());
 		if (found != null) {
diff --git a/uma-server/src/main/java/org/mitre/uma/service/impl/JpaRegisteredClientService.java b/uma-server/src/main/java/org/mitre/uma/service/impl/JpaRegisteredClientService.java
index 031fbe8b8..458a97c45 100644
--- a/uma-server/src/main/java/org/mitre/uma/service/impl/JpaRegisteredClientService.java
+++ b/uma-server/src/main/java/org/mitre/uma/service/impl/JpaRegisteredClientService.java
@@ -37,7 +37,7 @@ import org.springframework.transaction.annotation.Transactional;
 @Service
 public class JpaRegisteredClientService implements RegisteredClientService {
 
-	@PersistenceContext
+	@PersistenceContext(unitName="defaultPersistenceUnit")
 	private EntityManager em;
 
 	/* (non-Javadoc)
@@ -58,7 +58,7 @@ public class JpaRegisteredClientService implements RegisteredClientService {
 	 * @see org.mitre.openid.connect.client.service.RegisteredClientService#save(java.lang.String, org.mitre.oauth2.model.RegisteredClient)
 	 */
 	@Override
-	@Transactional
+	@Transactional(value="defaultTransactionManager")
 	public void save(String issuer, RegisteredClient client) {