You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by jp...@apache.org on 2014/12/06 00:24:47 UTC
cxf git commit: CXF-6136 add support for disabling all exception
propogation when tranactions are enabled
Repository: cxf
Updated Branches:
refs/heads/2.7.x-fixes 0b8a12c3c -> 6b5acabe8
CXF-6136 add support for disabling all exception propogation when tranactions are enabled
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/6b5acabe
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/6b5acabe
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/6b5acabe
Branch: refs/heads/2.7.x-fixes
Commit: 6b5acabe808d32d99a52a35f6a987ef547053af9
Parents: 0b8a12c
Author: Jason Pell <jp...@apache.org>
Authored: Sat Dec 6 04:58:51 2014 +1100
Committer: Jason Pell <jp...@apache.org>
Committed: Sat Dec 6 10:12:04 2014 +1100
----------------------------------------------------------------------
.../cxf/transport/jms/JMSConfiguration.java | 13 +++++
.../cxf/transport/jms/JMSDestination.java | 3 +-
.../jms/tx/JMSTransactionClientServerTest.java | 61 ++++++++++++++++----
3 files changed, 64 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cxf/blob/6b5acabe/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
----------------------------------------------------------------------
diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
index dcfc329..f84f3e8 100644
--- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
+++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
@@ -68,6 +68,7 @@ public class JMSConfiguration implements InitializingBean {
private int priority = Message.DEFAULT_PRIORITY;
private long timeToLive = Message.DEFAULT_TIME_TO_LIVE;
private boolean sessionTransacted;
+ private boolean propogateExceptions = true;
private int concurrentConsumers = 1;
private int maxConcurrentConsumers = 1;
@@ -117,6 +118,18 @@ public class JMSConfiguration implements InitializingBean {
}
}
+ /**
+ * if any exceptions encountered executing the service impl should be propagated
+ * to initiate a transaction roll back.
+ */
+ public boolean isPropogateExceptions() {
+ return propogateExceptions;
+ }
+
+ public void setPropogateExceptions(boolean propogateExceptions) {
+ this.propogateExceptions = propogateExceptions;
+ }
+
public boolean isCreateSecurityContext() {
return createSecurityContext;
}
http://git-wip-us.apache.org/repos/asf/cxf/blob/6b5acabe/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
----------------------------------------------------------------------
diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
index 1a81687..c641fcc 100644
--- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
+++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
@@ -248,7 +248,8 @@ public class JMSDestination extends AbstractMultiplexDestination
}
//need to propagate any exceptions back to Spring container
//so transactions can occur
- if (inMessage.getContent(Exception.class) != null && session != null) {
+ if (inMessage.getContent(Exception.class) != null && session != null
+ && jmsConfig.isPropogateExceptions()) {
PlatformTransactionManager m = jmsConfig.getTransactionManager();
if (m != null) {
TransactionStatus status = m.getTransaction(null);
http://git-wip-us.apache.org/repos/asf/cxf/blob/6b5acabe/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/tx/JMSTransactionClientServerTest.java
----------------------------------------------------------------------
diff --git a/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/tx/JMSTransactionClientServerTest.java b/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/tx/JMSTransactionClientServerTest.java
index 714e250..466d644 100644
--- a/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/tx/JMSTransactionClientServerTest.java
+++ b/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/tx/JMSTransactionClientServerTest.java
@@ -46,21 +46,28 @@ public class JMSTransactionClientServerTest extends AbstractBusClientServerTestB
static EmbeddedJMSBrokerLauncher broker;
public static class Server extends AbstractBusTestServerBase {
-
protected void run() {
// create the application context
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("org/apache/cxf/systest/jms/tx/jms_server_config.xml");
context.start();
+ ConnectionFactory connectionFactory
+ = context.getBean("jmsConnectionFactory", ConnectionFactory.class);
+
+ publishEndpoint(connectionFactory, "greeter.queue.noaop", true);
+ publishEndpoint(connectionFactory, "greeter.queue.noaop2", false);
+ }
+
+ private void publishEndpoint(ConnectionFactory connectionFactory, String queueName,
+ boolean propogateExceptions) {
EndpointImpl endpoint = new EndpointImpl(new GreeterImplWithTransaction());
endpoint.setAddress("jms://");
JMSConfiguration jmsConfig = new JMSConfiguration();
- ConnectionFactory connectionFactory
- = context.getBean("jmsConnectionFactory", ConnectionFactory.class);
+ jmsConfig.setPropogateExceptions(propogateExceptions);
jmsConfig.setConnectionFactory(connectionFactory);
- jmsConfig.setTargetDestination("greeter.queue.noaop");
+ jmsConfig.setTargetDestination(queueName);
jmsConfig.setSessionTransacted(true);
jmsConfig.setPubSubDomain(false);
jmsConfig.setUseJms11(true);
@@ -111,8 +118,40 @@ public class JMSTransactionClientServerTest extends AbstractBusClientServerTestB
Greeter greeter = service.getPort(portName, Greeter.class);
doService(greeter, true);
}
+
@Test
public void testNonAopTransaction() throws Exception {
+ Greeter greeter = getServiceClient("greeter.queue.noaop");
+ doService(greeter, false);
+ }
+
+ @Test
+ public void testNonAopTransactionNoPropogation() throws Exception {
+ Greeter greeter = getServiceClient("greeter.queue.noaop2");
+
+ String response1 = new String("Hello ");
+
+ String greeting = greeter.greetMe("Good guy");
+ assertNotNull("No response received from service", greeting);
+ String exResponse = response1 + "Good guy";
+ assertEquals("Get unexpected result", exResponse, greeting);
+
+ try {
+ greeter.greetMe("Bad guy");
+ fail("Should have thrown Exception");
+ } catch (Exception e) {
+ assertTrue(e.getMessage().contains("Got a bad guy call for greetMe"));
+ }
+
+ try {
+ greeter.pingMe();
+ fail("Should have thrown FaultException");
+ } catch (PingMeFault ex) {
+ assertNotNull(ex.getFaultInfo());
+ }
+ }
+
+ private Greeter getServiceClient(String queueName) {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(Greeter.class);
factory.setAddress("jms://");
@@ -121,7 +160,7 @@ public class JMSTransactionClientServerTest extends AbstractBusClientServerTestB
ConnectionFactory connectionFactory
= new PooledConnectionFactory(broker.getBrokerURL());
jmsConfig.setConnectionFactory(connectionFactory);
- jmsConfig.setTargetDestination("greeter.queue.noaop");
+ jmsConfig.setTargetDestination(queueName);
jmsConfig.setPubSubDomain(false);
jmsConfig.setUseJms11(true);
@@ -129,11 +168,10 @@ public class JMSTransactionClientServerTest extends AbstractBusClientServerTestB
jmsConfigFeature.setJmsConfig(jmsConfig);
factory.getFeatures().add(jmsConfigFeature);
- Greeter greeter = (Greeter)factory.create();
- doService(greeter, false);
- }
+ return (Greeter)factory.create();
+ }
+
public void doService(Greeter greeter, boolean doEx) throws Exception {
-
String response1 = new String("Hello ");
try {
@@ -141,12 +179,12 @@ public class JMSTransactionClientServerTest extends AbstractBusClientServerTestB
String greeting = greeter.greetMe("Good guy");
assertNotNull("No response received from service", greeting);
String exResponse = response1 + "Good guy";
- assertEquals("Get unexcpeted result", exResponse, greeting);
+ assertEquals("Get unexpected result", exResponse, greeting);
greeting = greeter.greetMe("Bad guy");
assertNotNull("No response received from service", greeting);
exResponse = response1 + "[Bad guy]";
- assertEquals("Get unexcpeted result", exResponse, greeting);
+ assertEquals("Get unexpected result", exResponse, greeting);
if (doEx) {
try {
@@ -160,5 +198,4 @@ public class JMSTransactionClientServerTest extends AbstractBusClientServerTestB
throw (Exception)ex.getCause();
}
}
-
}