JmsTransactionManager supports lazy resource retrieval
Closes gh-22468
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
* Copyright 2002-2019 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.
|
||||
@@ -29,7 +29,6 @@ import org.junit.Test;
|
||||
|
||||
import org.springframework.jms.StubQueue;
|
||||
import org.springframework.jms.core.JmsTemplate;
|
||||
import org.springframework.jms.core.MessageCreator;
|
||||
import org.springframework.jms.core.SessionCallback;
|
||||
import org.springframework.transaction.TransactionDefinition;
|
||||
import org.springframework.transaction.TransactionStatus;
|
||||
@@ -67,12 +66,9 @@ public class JmsTransactionManagerTests {
|
||||
JmsTransactionManager tm = new JmsTransactionManager(cf);
|
||||
TransactionStatus ts = tm.getTransaction(new DefaultTransactionDefinition());
|
||||
JmsTemplate jt = new JmsTemplate(cf);
|
||||
jt.execute(new SessionCallback<Void>() {
|
||||
@Override
|
||||
public Void doInJms(Session sess) {
|
||||
assertTrue(sess == session);
|
||||
return null;
|
||||
}
|
||||
jt.execute((SessionCallback<Void>) sess -> {
|
||||
assertSame(sess, session);
|
||||
return null;
|
||||
});
|
||||
tm.commit(ts);
|
||||
|
||||
@@ -93,12 +89,9 @@ public class JmsTransactionManagerTests {
|
||||
JmsTransactionManager tm = new JmsTransactionManager(cf);
|
||||
TransactionStatus ts = tm.getTransaction(new DefaultTransactionDefinition());
|
||||
JmsTemplate jt = new JmsTemplate(cf);
|
||||
jt.execute(new SessionCallback<Void>() {
|
||||
@Override
|
||||
public Void doInJms(Session sess) {
|
||||
assertTrue(sess == session);
|
||||
return null;
|
||||
}
|
||||
jt.execute((SessionCallback<Void>) sess -> {
|
||||
assertSame(sess, session);
|
||||
return null;
|
||||
});
|
||||
tm.rollback(ts);
|
||||
|
||||
@@ -119,23 +112,17 @@ public class JmsTransactionManagerTests {
|
||||
JmsTransactionManager tm = new JmsTransactionManager(cf);
|
||||
TransactionStatus ts = tm.getTransaction(new DefaultTransactionDefinition());
|
||||
final JmsTemplate jt = new JmsTemplate(cf);
|
||||
jt.execute(new SessionCallback<Void>() {
|
||||
@Override
|
||||
public Void doInJms(Session sess) {
|
||||
assertTrue(sess == session);
|
||||
return null;
|
||||
}
|
||||
jt.execute((SessionCallback<Void>) sess -> {
|
||||
assertSame(sess, session);
|
||||
return null;
|
||||
});
|
||||
TransactionTemplate tt = new TransactionTemplate(tm);
|
||||
tt.execute(new TransactionCallbackWithoutResult() {
|
||||
@Override
|
||||
protected void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
jt.execute(new SessionCallback<Void>() {
|
||||
@Override
|
||||
public Void doInJms(Session sess) {
|
||||
assertTrue(sess == session);
|
||||
return null;
|
||||
}
|
||||
jt.execute((SessionCallback<Void>) sess -> {
|
||||
assertSame(sess, session);
|
||||
return null;
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -158,23 +145,17 @@ public class JmsTransactionManagerTests {
|
||||
JmsTransactionManager tm = new JmsTransactionManager(cf);
|
||||
TransactionStatus ts = tm.getTransaction(new DefaultTransactionDefinition());
|
||||
final JmsTemplate jt = new JmsTemplate(cf);
|
||||
jt.execute(new SessionCallback<Void>() {
|
||||
@Override
|
||||
public Void doInJms(Session sess) {
|
||||
assertTrue(sess == session);
|
||||
return null;
|
||||
}
|
||||
jt.execute((SessionCallback<Void>) sess -> {
|
||||
assertSame(sess, session);
|
||||
return null;
|
||||
});
|
||||
TransactionTemplate tt = new TransactionTemplate(tm);
|
||||
tt.execute(new TransactionCallbackWithoutResult() {
|
||||
@Override
|
||||
protected void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
jt.execute(new SessionCallback<Void>() {
|
||||
@Override
|
||||
public Void doInJms(Session sess) {
|
||||
assertTrue(sess == session);
|
||||
return null;
|
||||
}
|
||||
jt.execute((SessionCallback<Void>) sess -> {
|
||||
assertSame(sess, session);
|
||||
return null;
|
||||
});
|
||||
status.setRollbackOnly();
|
||||
}
|
||||
@@ -206,33 +187,24 @@ public class JmsTransactionManagerTests {
|
||||
JmsTransactionManager tm = new JmsTransactionManager(cf);
|
||||
TransactionStatus ts = tm.getTransaction(new DefaultTransactionDefinition());
|
||||
final JmsTemplate jt = new JmsTemplate(cf);
|
||||
jt.execute(new SessionCallback<Void>() {
|
||||
@Override
|
||||
public Void doInJms(Session sess) {
|
||||
assertTrue(sess == session);
|
||||
return null;
|
||||
}
|
||||
jt.execute((SessionCallback<Void>) sess -> {
|
||||
assertSame(sess, session);
|
||||
return null;
|
||||
});
|
||||
TransactionTemplate tt = new TransactionTemplate(tm);
|
||||
tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_NOT_SUPPORTED);
|
||||
tt.execute(new TransactionCallbackWithoutResult() {
|
||||
@Override
|
||||
protected void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
jt.execute(new SessionCallback<Void>() {
|
||||
@Override
|
||||
public Void doInJms(Session sess) {
|
||||
assertTrue(sess != session);
|
||||
return null;
|
||||
}
|
||||
jt.execute((SessionCallback<Void>) sess -> {
|
||||
assertNotSame(sess, session);
|
||||
return null;
|
||||
});
|
||||
}
|
||||
});
|
||||
jt.execute(new SessionCallback<Void>() {
|
||||
@Override
|
||||
public Void doInJms(Session sess) {
|
||||
assertTrue(sess == session);
|
||||
return null;
|
||||
}
|
||||
jt.execute((SessionCallback<Void>) sess -> {
|
||||
assertSame(sess, session);
|
||||
return null;
|
||||
});
|
||||
tm.commit(ts);
|
||||
|
||||
@@ -255,33 +227,24 @@ public class JmsTransactionManagerTests {
|
||||
JmsTransactionManager tm = new JmsTransactionManager(cf);
|
||||
TransactionStatus ts = tm.getTransaction(new DefaultTransactionDefinition());
|
||||
final JmsTemplate jt = new JmsTemplate(cf);
|
||||
jt.execute(new SessionCallback<Void>() {
|
||||
@Override
|
||||
public Void doInJms(Session sess) {
|
||||
assertTrue(sess == session);
|
||||
return null;
|
||||
}
|
||||
jt.execute((SessionCallback<Void>) sess -> {
|
||||
assertSame(sess, session);
|
||||
return null;
|
||||
});
|
||||
TransactionTemplate tt = new TransactionTemplate(tm);
|
||||
tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
|
||||
tt.execute(new TransactionCallbackWithoutResult() {
|
||||
@Override
|
||||
protected void doInTransactionWithoutResult(TransactionStatus status) {
|
||||
jt.execute(new SessionCallback<Void>() {
|
||||
@Override
|
||||
public Void doInJms(Session sess) {
|
||||
assertTrue(sess != session);
|
||||
return null;
|
||||
}
|
||||
jt.execute((SessionCallback<Void>) sess -> {
|
||||
assertNotSame(sess, session);
|
||||
return null;
|
||||
});
|
||||
}
|
||||
});
|
||||
jt.execute(new SessionCallback<Void>() {
|
||||
@Override
|
||||
public Void doInJms(Session sess) {
|
||||
assertTrue(sess == session);
|
||||
return null;
|
||||
}
|
||||
jt.execute((SessionCallback<Void>) sess -> {
|
||||
assertSame(sess, session);
|
||||
return null;
|
||||
});
|
||||
tm.commit(ts);
|
||||
|
||||
@@ -310,12 +273,7 @@ public class JmsTransactionManagerTests {
|
||||
JmsTransactionManager tm = new JmsTransactionManager(cf);
|
||||
TransactionStatus ts = tm.getTransaction(new DefaultTransactionDefinition());
|
||||
JmsTemplate jt = new JmsTemplate(cf);
|
||||
jt.send(dest, new MessageCreator() {
|
||||
@Override
|
||||
public Message createMessage(Session session) throws JMSException {
|
||||
return message;
|
||||
}
|
||||
});
|
||||
jt.send(dest, sess -> message);
|
||||
tm.commit(ts);
|
||||
|
||||
verify(producer).send(message);
|
||||
@@ -325,4 +283,39 @@ public class JmsTransactionManagerTests {
|
||||
verify(con).close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLazyTransactionalSession() throws JMSException {
|
||||
ConnectionFactory cf = mock(ConnectionFactory.class);
|
||||
Connection con = mock(Connection.class);
|
||||
final Session session = mock(Session.class);
|
||||
|
||||
JmsTransactionManager tm = new JmsTransactionManager(cf);
|
||||
tm.setLazyResourceRetrieval(true);
|
||||
TransactionStatus ts = tm.getTransaction(new DefaultTransactionDefinition());
|
||||
|
||||
given(cf.createConnection()).willReturn(con);
|
||||
given(con.createSession(true, Session.AUTO_ACKNOWLEDGE)).willReturn(session);
|
||||
|
||||
JmsTemplate jt = new JmsTemplate(cf);
|
||||
jt.execute((SessionCallback<Void>) sess -> {
|
||||
assertSame(sess, session);
|
||||
return null;
|
||||
});
|
||||
tm.commit(ts);
|
||||
|
||||
verify(session).commit();
|
||||
verify(session).close();
|
||||
verify(con).close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLazyWithoutSessionAccess() {
|
||||
ConnectionFactory cf = mock(ConnectionFactory.class);
|
||||
|
||||
JmsTransactionManager tm = new JmsTransactionManager(cf);
|
||||
tm.setLazyResourceRetrieval(true);
|
||||
TransactionStatus ts = tm.getTransaction(new DefaultTransactionDefinition());
|
||||
tm.commit(ts);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user