SpringSessionSynchronization's beforeCompletion unbinds after disconnect failure as well
Issue: SPR-13089
This commit is contained in:
		
							parent
							
								
									11401bd5e4
								
							
						
					
					
						commit
						8c337a48a9
					
				|  | @ -1,5 +1,5 @@ | |||
| /* | ||||
|  * Copyright 2002-2014 the original author or authors. | ||||
|  * Copyright 2002-2015 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. | ||||
|  | @ -112,18 +112,21 @@ public class SpringSessionSynchronization implements TransactionSynchronization, | |||
| 
 | ||||
| 	@Override | ||||
| 	public void beforeCompletion() { | ||||
| 		Session session = this.sessionHolder.getSession(); | ||||
| 		if (this.sessionHolder.getPreviousFlushMode() != null) { | ||||
| 			// In case of pre-bound Session, restore previous flush mode. | ||||
| 			session.setFlushMode(this.sessionHolder.getPreviousFlushMode()); | ||||
| 		try { | ||||
| 			Session session = this.sessionHolder.getSession(); | ||||
| 			if (this.sessionHolder.getPreviousFlushMode() != null) { | ||||
| 				// In case of pre-bound Session, restore previous flush mode. | ||||
| 				session.setFlushMode(this.sessionHolder.getPreviousFlushMode()); | ||||
| 			} | ||||
| 			// Eagerly disconnect the Session here, to make release mode "on_close" work nicely. | ||||
| 			session.disconnect(); | ||||
| 		} | ||||
| 		// Eagerly disconnect the Session here, to make release mode "on_close" work nicely. | ||||
| 		session.disconnect(); | ||||
| 
 | ||||
| 		// Unbind at this point if it's a new Session... | ||||
| 		if (this.newSession) { | ||||
| 			TransactionSynchronizationManager.unbindResource(this.sessionFactory); | ||||
| 			this.holderActive = false; | ||||
| 		finally { | ||||
| 			// Unbind at this point if it's a new Session... | ||||
| 			if (this.newSession) { | ||||
| 				TransactionSynchronizationManager.unbindResource(this.sessionFactory); | ||||
| 				this.holderActive = false; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -112,18 +112,21 @@ public class SpringSessionSynchronization implements TransactionSynchronization, | |||
| 
 | ||||
| 	@Override | ||||
| 	public void beforeCompletion() { | ||||
| 		Session session = this.sessionHolder.getSession(); | ||||
| 		if (this.sessionHolder.getPreviousFlushMode() != null) { | ||||
| 			// In case of pre-bound Session, restore previous flush mode. | ||||
| 			session.setFlushMode(this.sessionHolder.getPreviousFlushMode()); | ||||
| 		try { | ||||
| 			Session session = this.sessionHolder.getSession(); | ||||
| 			if (this.sessionHolder.getPreviousFlushMode() != null) { | ||||
| 				// In case of pre-bound Session, restore previous flush mode. | ||||
| 				session.setFlushMode(this.sessionHolder.getPreviousFlushMode()); | ||||
| 			} | ||||
| 			// Eagerly disconnect the Session here, to make release mode "on_close" work nicely. | ||||
| 			session.disconnect(); | ||||
| 		} | ||||
| 		// Eagerly disconnect the Session here, to make release mode "on_close" work nicely. | ||||
| 		session.disconnect(); | ||||
| 
 | ||||
| 		// Unbind at this point if it's a new Session... | ||||
| 		if (this.newSession) { | ||||
| 			TransactionSynchronizationManager.unbindResource(this.sessionFactory); | ||||
| 			this.holderActive = false; | ||||
| 		finally { | ||||
| 			// Unbind at this point if it's a new Session... | ||||
| 			if (this.newSession) { | ||||
| 				TransactionSynchronizationManager.unbindResource(this.sessionFactory); | ||||
| 				this.holderActive = false; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue