[jboss-user] [JBoss Messaging Users] - Rollback Problem in JBM 2.0.0 BETA4

kazuno do-not-reply at jboss.com
Mon Aug 24 01:02:04 EDT 2009


Hello.

I'm evaluating JBoss Messaging 2.0.0 BETA4 .
And, I tried the following procedure to check JBM's rollback functionality.

 1. Start up JBM.
 2. Check MessageCount of ExampleQue by jconsole. and 0 message found.
 3. Producer sends 1000 messages to ExampleQue by a single transaction. and commit.
 4. Check MessageCount of ExampleQue by jconsole. and 1000 messages found.
 5. Consumer tries to receive 1000 messages using a transaction for each message. and makes a rollback one out of ten trials.
 
My Consumer received 30 messages and looks like freezed, seems to wait the arraival of a message.
10 messsages, 100 messages are OK. But at the case of 1000 messages, this problem happens.


My Consumer's output is here.
  
  | message 0 received. payload is 0
  | === Rollback ===
  | message 1 received. payload is 0
  | message 2 received. payload is 1
  | message 3 received. payload is 2
  | message 4 received. payload is 3
  | message 5 received. payload is 4
  | message 6 received. payload is 5
  | message 7 received. payload is 6
  | message 8 received. payload is 7
  | message 9 received. payload is 8
  | message 10 received. payload is 9
  | message 11 received. payload is 10
  | === Rollback ===
  | message 12 received. payload is 10
  | message 13 received. payload is 11
  | message 14 received. payload is 12
  | message 15 received. payload is 13
  | message 16 received. payload is 14
  | message 17 received. payload is 15
  | message 18 received. payload is 16
  | message 19 received. payload is 17
  | message 20 received. payload is 18
  | message 21 received. payload is 19
  | message 22 received. payload is 20
  | === Rollback ===
  | message 23 received. payload is 20
  | message 24 received. payload is 21
  | message 25 received. payload is 22
  | message 26 received. payload is 23
  | message 27 received. payload is 24
  | message 28 received. payload is 25
  | message 29 received. payload is 26
  | message 30 received. payload is 27
  | message 31 received. payload is 28
  | message 32 received. payload is 29
  | message 33 received. payload is 30
  | === Rollback ===
  | 

I confirmed following by jconsole.
 o ExampleQueue has 70 messages.

And my environment is 
 o Windows XP SP3
 o Sun JDK 1.6.0_15
 o JBoss Messaging 2.0.0 BETA4

Any comments or suggestions?



Producer.java

  | import java.util.HashMap;
  | import java.util.Map;
  | 
  | import javax.jms.Connection;
  | import javax.jms.ConnectionFactory;
  | import javax.jms.DeliveryMode;
  | import javax.jms.Message;
  | import javax.jms.MessageProducer;
  | import javax.jms.Queue;
  | import javax.jms.Session;
  | 
  | import org.jboss.messaging.core.config.TransportConfiguration;
  | import org.jboss.messaging.integration.transports.netty.NettyConnectorFactory;
  | import org.jboss.messaging.jms.JBossQueue;
  | import org.jboss.messaging.jms.client.JBossConnectionFactory;
  | 
  | /**
  |  * A Producer.
  |  */
  | public class Producer {
  | 
  | 	public static void main(String[] args) throws Exception {
  | 
  | 		Connection connection = null;
  | 		Queue queue = null;
  | 		Session session = null;
  | 		MessageProducer producer = null;
  | 		
  | 		try {
  | 			
  | 			// Step 1. Create a ConnectionFactory
  | 			Map<String, Object> params = new HashMap<String, Object>();
  | 			params.put("jbm.remoting.netty.host","localhost");			
  | 			params.put("jbm.remoting.netty.port","5445");			
  | 			TransportConfiguration transportConfiguration =
  | 				new TransportConfiguration(NettyConnectorFactory.class.getName(), params);
  | 			ConnectionFactory cf = new JBossConnectionFactory(transportConfiguration);
  | 			
  | 			// Step 2. Create a Connection and start.
  | 			connection = cf.createConnection();
  | 			connection.start();
  | 			
  | 			// Step 3. Create a Session that transactedl.
  | 			session = connection.createSession(true, Session.SESSION_TRANSACTED);
  | 			
  | 			// Step 4. Create a Queue.
  | 			queue = new JBossQueue("ExampleQueue");
  | 			
  | 			// Step 5. Create a Producer.
  | 			producer = session.createProducer(queue);
  | 			
  | 			// Step 7. Set delivery mode to persistent.
  | 			producer.setDeliveryMode(DeliveryMode.PERSISTENT);
  | 			
  | 			// Step 8. Send 1000 messages.
  | 			for (int i = 0; i < 1000; i++) {
  | 				Message message = session.createObjectMessage(new Integer(i));
  | 				producer.send(message);
  | 				System.out.println("message " + Integer.toString(i) + " sent.");
  | 			}
  | 			
  | 			// Step 9. Commit.
  | 			session.commit();
  | 			System.out.println("commited!");
  | 			
  | 			
  | 		} finally {
  | 			if (producer != null) {
  | 				producer.close();
  | 			}
  | 			if (session != null) {
  | 				session.rollback();
  | 				session.close();
  | 			}
  | 			if (connection != null) {
  | 				connection.close();			
  | 			}
  | 		}
  | 		
  | 	}
  | }
  | 

Consumer.java

  | import java.util.HashMap;
  | import java.util.Map;
  | 
  | import javax.jms.Connection;
  | import javax.jms.ConnectionFactory;
  | import javax.jms.MessageConsumer;
  | import javax.jms.ObjectMessage;
  | import javax.jms.Queue;
  | import javax.jms.Session;
  | 
  | import org.jboss.messaging.core.config.TransportConfiguration;
  | import org.jboss.messaging.integration.transports.netty.NettyConnectorFactory;
  | import org.jboss.messaging.jms.JBossQueue;
  | import org.jboss.messaging.jms.client.JBossConnectionFactory;
  | 
  | /**
  |  * A Consumer.
  |  */
  | public class Consumer {
  | 
  | 	public static void main(String[] args) throws Exception {
  | 
  | 		Connection connection = null;
  | 		Queue queue = null;
  | 		Session session = null;
  | 		MessageConsumer consumer = null;
  | 		
  | 		try {
  | 			
  | 			// Step 1. Create a ConnectionFactory
  | 			Map<String, Object> params = new HashMap<String, Object>();
  | 			params.put("jbm.remoting.netty.host","localhost");
  | 			params.put("jbm.remoting.netty.port","5445");			
  | 			TransportConfiguration transportConfiguration =
  | 				new TransportConfiguration(NettyConnectorFactory.class.getName(), params);
  | 			ConnectionFactory cf = new JBossConnectionFactory(transportConfiguration);
  | 			
  | 			// Step 2. Create a Connection and start.
  | 			connection = cf.createConnection();
  | 			connection.start();
  | 			queue = new JBossQueue("ExampleQueue");			
  | 						
  | 			// Step 3. Create a Session that transactedl.
  | 			session = connection.createSession(true, Session.SESSION_TRANSACTED);
  | 			
  | 			// Step 4. Create a Queue.
  | 			queue = new JBossQueue("ExampleQueue");
  | 			
  | 			// Step 5. Create a Consumer.
  | 			consumer = session.createConsumer(queue);
  | 						
  | 			// Step 7. Try to eceive 1000 messages, but one in ten messages rollbacked. 
  | 			int commited = 0;
  | 			int rollbacked = 0;
  | 			for (int i = 0; i < 1100; i++) {
  | 				ObjectMessage message = (ObjectMessage)consumer.receive();
  | 				
  | 				String payload = ((Integer)message.getObject()).toString();
  | 				System.out.println("message " + Integer.toString(i) + " received. payload is " + payload);
  | 		        boolean redelivered = message.getJMSRedelivered();
  | 		        
  | 		        if(payload.substring(payload.length() -1, payload.length()).equals("0") && !redelivered) {
  | 		        	System.out.println("=== Rollback ===");
  | 		        	session.rollback();
  | 		        	rollbacked++;
  | 		        } else {
  | 		        	session.commit();
  | 		        	commited++;
  | 		        }
  | 			}
  | 			
  | 			System.out.println("====");
  | 			System.out.println("commited:" + commited);
  | 			System.out.println("rollbacked:" + rollbacked);
  | 								
  | 		} finally {
  | 			if (consumer != null) {
  | 				consumer.close();
  | 			}
  | 			if (session != null) {
  | 				session.rollback();
  | 				session.close();
  | 			}
  | 			if (connection != null) {
  | 				connection.close();			
  | 			}
  | 		}
  | 		
  | 	}
  | }
  | 

jbm-configuration.xml

  | <configuration xmlns="urn:jboss:messaging"
  |                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  |                xsi:schemaLocation="urn:jboss:messaging /schema/jbm-configuration.xsd">
  | 
  |    <connectors>
  |       <connector name="netty">
  |          <factory-class>org.jboss.messaging.integration.transports.netty.NettyConnectorFactory</factory-class>
  |          <param key="jbm.remoting.netty.host"  value="${jbm.remoting.netty.host:localhost}" type="String"/>
  |          <param key="jbm.remoting.netty.port"  value="${jbm.remoting.netty.port:5445}" type="Integer"/>
  |       </connector>
  |    </connectors>
  | 
  |    <acceptors>
  |       <acceptor name="netty">
  |          <factory-class>org.jboss.messaging.integration.transports.netty.NettyAcceptorFactory</factory-class>
  |          <param key="jbm.remoting.netty.host"  value="${jbm.remoting.netty.host:localhost}" type="String"/>
  |          <param key="jbm.remoting.netty.port"  value="${jbm.remoting.netty.port:5445}" type="Integer"/>
  |       </acceptor>
  |    </acceptors>
  | 
  |    <security-settings>
  |       <security-setting match="#">
  |          <permission type="createTempQueue" roles="guest"/>
  |          <permission type="deleteTempQueue" roles="guest"/>
  |          <permission type="consume" roles="guest"/>
  |          <permission type="send" roles="guest"/>
  |       </security-setting>
  |    </security-settings>
  | 
  |    <address-settings>
  |       <!--default for catch all-->
  |       <address-setting match="#">
  |          <clustered>false</clustered>
  |          <dead-letter-address>jms.queue.DLQ</dead-letter-address>
  |          <expiry-address>jms.queue.ExpiryQueue</expiry-address>
  |          <redelivery-delay>0</redelivery-delay>
  |          <max-size-bytes>-1</max-size-bytes>
  |          <page-size-bytes>10485760</page-size-bytes>
  |          <distribution-policy-class>org.jboss.messaging.core.server.impl.RoundRobinDistributor</distribution-policy-class>
  |          <message-counter-history-day-limit>10</message-counter-history-day-limit>
  |       </address-setting>
  |    </address-settings>
  | 
  |    <paging-directory>../data/paging</paging-directory>
  |    <bindings-directory>../data/bindings</bindings-directory>
  |    <journal-directory>../data/journal</journal-directory>
  |    <large-messages-directory>../data/large-messages</large-messages-directory>
  |    
  | </configuration>
  | 

jbm-jms.xml

  | <configuration xmlns="urn:jboss:messaging"
  | 	       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  | 	       xsi:schemaLocation="urn:jboss:messaging /schema/jbm-jms.xsd">
  | 	
  | 	<connection-factory name="ConnectionFactory">
  | 		<connector-ref connector-name="netty"/>
  | 		<entries>
  | 			<entry name="ConnectionFactory"/>
  | 			<entry name="XAConnectionFactory"/>
  | 			<entry name="java:/ConnectionFactory"/>
  | 			<entry name="java:/XAConnectionFactory"/>
  | 		</entries>
  | 	</connection-factory>
  | 	
  | 	<queue name="DLQ">
  | 		<entry name="/queue/DLQ"/>
  | 	</queue>
  | 	<queue name="ExpiryQueue">
  | 		<entry name="/queue/ExpiryQueue"/>
  | 	</queue>   
  | 	<queue name="ExampleQueue">
  | 		<entry name="/queue/ExampleQueue"/>
  | 	</queue>
  | 	<topic name="ExampleTopic">
  | 		<entry name="/topic/ExampleTopic"/>
  | 	</topic>
  | 	
  | </configuration>
  |  

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4251065#4251065

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4251065



More information about the jboss-user mailing list