001: /*
002: * JBoss, Home of Professional Open Source
003: * Copyright 2005, JBoss Inc., and individual contributors as indicated
004: * by the @authors tag. See the copyright.txt in the distribution for a
005: * full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package org.jboss.ejb3.test.mdbtransactions.unit;
023:
024: import javax.jms.Message;
025: import javax.jms.Queue;
026: import javax.jms.QueueConnection;
027: import javax.jms.QueueConnectionFactory;
028: import javax.jms.QueueReceiver;
029: import javax.jms.QueueSender;
030: import javax.jms.QueueSession;
031: import javax.jms.ObjectMessage;
032:
033: import javax.naming.InitialContext;
034: import javax.naming.NamingException;
035:
036: import org.jboss.ejb3.InitialContextFactory;
037: import org.jboss.ejb3.test.mdbtransactions.Entity;
038: import org.jboss.ejb3.test.mdbtransactions.StatelessFacade;
039: import org.jboss.ejb3.test.mdbtransactions.TestStatus;
040: import org.jboss.logging.Logger;
041: import org.jboss.test.JBossTestCase;
042:
043: import junit.framework.Test;
044:
045: /**
046: * @author <a href="mailto:bdecoste@jboss.com">William DeCoste</a>
047: */
048: public class MDBUnitTestCase extends JBossTestCase {
049: private static final Logger log = Logger
050: .getLogger(MDBUnitTestCase.class);
051:
052: static boolean deployed = false;
053:
054: static int test = 0;
055:
056: public MDBUnitTestCase(String name) {
057:
058: super (name);
059:
060: }
061:
062: public void testMdbTransactions() throws Exception {
063: TestStatus status = (TestStatus) getInitialContext().lookup(
064: "TestStatusBean/remote");
065: status.clear();
066:
067: sendMessages("queue/mdbtest", 2);
068:
069: Thread.sleep(5000);
070:
071: assertEquals(1, status.messageCount());
072: assertTrue(status.caughtRollback());
073: }
074:
075: public void testRollback() throws Exception {
076: TestStatus status = (TestStatus) getInitialContext().lookup(
077: "TestStatusBean/remote");
078: status.clear();
079:
080: sendMessages("queue/rollbackmdbtest", 1);
081:
082: Thread.sleep(5000);
083:
084: Queue queue = (Queue) getInitialContext().lookup("queue/DLQ");
085: QueueConnectionFactory factory = getQueueConnectionFactory();
086: QueueConnection connection = factory.createQueueConnection();
087: connection.start();
088: QueueSession session = connection.createQueueSession(false,
089: QueueSession.AUTO_ACKNOWLEDGE);
090: QueueReceiver receiver = session.createReceiver(queue);
091: Message message = receiver.receiveNoWait();
092: assertNotNull(message);
093:
094: session.close();
095: connection.close();
096: }
097:
098: public void testBadCreation() throws Exception {
099: TestStatus status = (TestStatus) getInitialContext().lookup(
100: "TestStatusBean/remote");
101: status.clear();
102:
103: sendMessages("queue/badcreationmdb", 1);
104:
105: Thread.sleep(5000);
106:
107: Queue queue = (Queue) getInitialContext().lookup("queue/DLQ");
108: QueueConnectionFactory factory = getQueueConnectionFactory();
109: QueueConnection connection = factory.createQueueConnection();
110: connection.start();
111: QueueSession session = connection.createQueueSession(false,
112: QueueSession.AUTO_ACKNOWLEDGE);
113: QueueReceiver receiver = session.createReceiver(queue);
114: Message message = receiver.receiveNoWait();
115: assertNotNull(message);
116:
117: session.close();
118: connection.close();
119: }
120:
121: protected void sendMessages(String queueName, int numMessages)
122: throws Exception {
123: QueueConnection connection = null;
124: QueueSender sender = null;
125: QueueSession session = null;
126:
127: Queue queue = (Queue) getInitialContext().lookup(queueName);
128: QueueConnectionFactory factory = getQueueConnectionFactory();
129: connection = factory.createQueueConnection();
130: connection.start();
131: session = connection.createQueueSession(false,
132: QueueSession.AUTO_ACKNOWLEDGE);
133:
134: QueueReceiver receiver = session.createReceiver(queue);
135: Message message = receiver.receiveNoWait();
136: while (message != null)
137: message = receiver.receiveNoWait();
138:
139: Entity entity = new Entity();
140: entity.setName("test-entity");
141: entity.setId(1234L);
142:
143: StatelessFacade stateless = (StatelessFacade) getInitialContext()
144: .lookup("StatelessFacade");
145: stateless.clear(entity);
146:
147: ObjectMessage msg = session.createObjectMessage(entity);
148:
149: sender = session.createSender(queue);
150:
151: for (int i = 0; i < numMessages; ++i)
152: sender.send(msg);
153:
154: session.close();
155: connection.close();
156: }
157:
158: protected QueueConnectionFactory getQueueConnectionFactory()
159: throws Exception {
160: try {
161: return (QueueConnectionFactory) getInitialContext().lookup(
162: "ConnectionFactory");
163: } catch (NamingException e) {
164: return (QueueConnectionFactory) getInitialContext().lookup(
165: "java:/ConnectionFactory");
166: }
167: }
168:
169: protected InitialContext getInitialContext() throws Exception {
170: return InitialContextFactory.getInitialContext();
171: }
172:
173: public static Test suite() throws Exception {
174: return getDeploySetup(MDBUnitTestCase.class,
175: "mdbtransactionstest-service.xml, mdbtransactions-test.jar");
176: }
177:
178: }
|