Package org.jboss.soa.esb.oracle.aq

Source Code of org.jboss.soa.esb.oracle.aq.QueueTest

/**
*
*/
package org.jboss.soa.esb.oracle.aq;


import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.io.FileInputStream;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;

import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

import oracle.jms.AQjmsFactory;
import oracle.jms.AQjmsSession;

import org.junit.Before;
import org.junit.Test;
import org.mockejb.jndi.MockContextFactory;

/**
* @author kstam
*
*/
public class QueueTest
{
    private final static String Q_NAME = "org.jboss.soa.esb.oracle.aq.q.name";
    private final static String MESSAGE_CONTENT="Oracle AQ message content";
    private String user, password, server, instance, schema, driver, portStr, qName;
    private int port;
    /**
     * Tests for completeness of the properties needed ro make a db connection.
     *
     */
    @Test
    public void checkPropertiesInFile()
    {
            System.out.println("user=" + user + ", password=" + password + ", server=" + server
                    + ", port=" + portStr + ", qName=" + qName
                    + ", instance=" + instance + " schema=" + schema + ", driver=" + driver);
            assertNotNull(user);
            assertNotNull(password);
            assertNotNull(server);
            assertNotNull(portStr);
            assertFalse(port==0);
            assertNotNull(instance);
            assertNotNull(schema);
            assertNotNull(driver);  
            assertNotNull(qName);
    }
    /**
     * Tries to make a queueConnection to Oracle using the properties in the
     * oracle-aq.properties file.
     *
     */
    @Test
    public void createQueueConnection()
    {
        QueueConnection queueConnection = null;
        Session session = null;
        System.out.println("Building our own db connection");
        try {
            DataSource ds = AQUtil.getSQLDataSource(server, instance, port, driver, user, password);
            QueueConnectionFactory queueFactory = AQjmsFactory.getQueueConnectionFactory(ds);
            queueConnection = queueFactory.createQueueConnection();
            assertNotNull(queueConnection);
            session = (AQjmsSession) queueConnection.createQueueSession(false,
                    Session.AUTO_ACKNOWLEDGE);
            assertNotNull(session);
        } catch (Throwable e) {
            e.printStackTrace();
            assertTrue(false);
        } finally {
            if (session!=null) {
                try { session.close();
                } catch (Exception e) {}
            }
            if (queueConnection!=null) {
                try { queueConnection.close();
                } catch (Exception e) {}
            }
        }
    }
    /**
     * Tries to locate the specified Q in Oracle using the properties in the
     * oracle-aq.properties file.
     *
     */
    @Test
    public void findGivenQueue()
    {
        boolean foundQueue=false;
        QueueConnection queueConnection = null;
        Session session = null;
        System.out.println("Building our own db connection");
        try {
            DataSource ds = AQUtil.getSQLDataSource(server, instance, port, driver, user, password);
            QueueConnectionFactory queueFactory = AQjmsFactory.getQueueConnectionFactory(ds);
            queueConnection = queueFactory.createQueueConnection();
            assertNotNull(queueConnection);
            session = (AQjmsSession) queueConnection.createQueueSession(false,
                    Session.AUTO_ACKNOWLEDGE);
            assertNotNull(session);
           
            List<DestinationInfo> list = AQUtil.getDestinationInfoList(ds, schema);
            // for each queue
            Iterator<DestinationInfo> iter = list.iterator();
            while (iter.hasNext()) {
                DestinationInfo di = iter.next();
                System.out.println("Found Destination: " + di.getQueueName());
                // register normal queue
                if (di.getQueueName().equalsIgnoreCase(qName)) {
                    System.out.println("Matched up given Queue: " + qName + " with " + di.getQueueName());
                    foundQueue=true;
                }
            }
            assertTrue(foundQueue);
           
        } catch (Throwable e) {
            e.printStackTrace();
            assertTrue(false);
        } finally {
            if (session!=null) {
                try { session.close();
                } catch (Exception e) {}
            }
            if (queueConnection!=null) {
                try { queueConnection.close();
                } catch (Exception e) {}
            }
        }
    }
    /**
     * Sends a message to the specified Q in Oracle and receives the same message.
     */
    public void drainQueue()
    {
        QueueConnection connection = null;
        QueueSession session = null;
        MessageConsumer messageConsumer = null;
        try {
            Hashtable<String,String> env = new Hashtable<String, String>();
            env.put(AQInitialContextFactory.DB_SERVER, server);
            env.put(AQInitialContextFactory.DB_INSTANCE, instance);
            env.put(AQInitialContextFactory.DB_PORT, portStr);
            env.put(AQInitialContextFactory.DB_USER, user);
            env.put(AQInitialContextFactory.DB_PASSWD, password);
            env.put(AQInitialContextFactory.DB_SCHEMA, schema);
            env.put(AQInitialContextFactory.DB_DRIVER, driver);
           
            MockContextFactory.setAsInitial();
            AQInitialContextFactory factory = new AQInitialContextFactory();
            Context context = factory.getInitialContext(env);
            QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory)
                context.lookup(AQInitialContextFactory.QUEUE_CONNECTION_FACTORY);
            connection = queueConnectionFactory.createQueueConnection();
            session = connection.createQueueSession(false,
            QueueSession.AUTO_ACKNOWLEDGE);
            Queue queue = (Queue) context.lookup(qName);
            messageConsumer = session.createReceiver(queue);
            connection.start();
            TextMessage receiveMessage = session.createTextMessage(MESSAGE_CONTENT);
            while (receiveMessage!=null) {
                receiveMessage = (TextMessage) messageConsumer.receive(10);
                if (receiveMessage!=null) System.out.println("Drain:" + receiveMessage.getText());
            }  
        } catch (Exception e) {
            e.printStackTrace();
            assertTrue(false);
        } finally {
            if (messageConsumer!=null) {
                try messageConsumer.close();
                } catch (Exception e) {}
            }
            if (session!=null) {
                try { session.close();
                } catch (Exception e) {}
            }
            if (connection!=null) {
                try { connection.close();
                } catch (Exception e) {}
            }
        }
    }
    /**
     * Sends a message to the specified Q in Oracle and receives the same message.
     */
    @Test
    public void sendAndReceiveMessage()
    {
        drainQueue();
        QueueConnection connection = null;
        QueueSession session = null;
        MessageProducer messageProducer = null;
        MessageConsumer messageConsumer = null;
        try {
            Properties properties = new Properties();
            properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.soa.esb.oracle.aq.AQInitialContextFactory");
            properties.put(AQInitialContextFactory.DB_SERVER, server);
            properties.put(AQInitialContextFactory.DB_INSTANCE, instance);
            properties.put(AQInitialContextFactory.DB_PORT, portStr);
            properties.put(AQInitialContextFactory.DB_USER, user);
            properties.put(AQInitialContextFactory.DB_PASSWD, password);
            properties.put(AQInitialContextFactory.DB_SCHEMA, schema);
            properties.put(AQInitialContextFactory.DB_DRIVER, driver);
            MockContextFactory.setAsInitial();
            Context context = new InitialContext(properties);
            QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory)
                context.lookup(AQInitialContextFactory.QUEUE_CONNECTION_FACTORY);
            connection = queueConnectionFactory.createQueueConnection();
            session = connection.createQueueSession(false,
            QueueSession.AUTO_ACKNOWLEDGE);
            Queue queue = (Queue) context.lookup(qName);
            messageProducer = session.createSender(queue);
            messageConsumer = session.createReceiver(queue);
            connection.start();
            TextMessage sendMessage = session.createTextMessage(MESSAGE_CONTENT);
            messageProducer.send(sendMessage);
            TextMessage receiveMessage = (TextMessage) messageConsumer.receive(2000);
            String receiveContent = receiveMessage.getText();
            assertEquals(MESSAGE_CONTENT, receiveContent);
           
        } catch (Exception e) {
            e.printStackTrace();
            assertTrue(false);
        } finally {
            if (messageProducer!=null) {
                try messageProducer.close();
                } catch (Exception e) {}
            }
            if (messageConsumer!=null) {
                try messageConsumer.close();
                } catch (Exception e) {}
            }
            if (session!=null) {
                try { session.close();
                } catch (Exception e) {}
            }
            if (connection!=null) {
                try { connection.close();
                } catch (Exception e) {}
            }
        }
    }
   
    @Before
    public void readProperyFile() {
        try {
            Properties properties = new Properties();
            properties.load(new FileInputStream("src/test/resources/oracle-aq.properties"));
            if (properties.containsKey(AQInitialContextFactory.DB_DATASOURCE)) {
                String datasourceName = properties.getProperty(AQInitialContextFactory.DB_DATASOURCE);
                System.out.println("Found datasource name: " + datasourceName);
                System.err.println("We can't use a Datasource in JUnit.");
                assertTrue(false);
            } else {
                user     = properties.getProperty(AQInitialContextFactory.DB_USER);
                password = properties.getProperty(AQInitialContextFactory.DB_PASSWD);
                server   = properties.getProperty(AQInitialContextFactory.DB_SERVER);
                instance = properties.getProperty(AQInitialContextFactory.DB_INSTANCE);
                schema   = properties.getProperty(AQInitialContextFactory.DB_SCHEMA);
                driver   = properties.getProperty(AQInitialContextFactory.DB_DRIVER);
                portStr  = properties.getProperty(AQInitialContextFactory.DB_PORT);
                port     = Integer.valueOf(portStr);
                qName    = properties.getProperty(Q_NAME);
            }
        } catch (Exception e) {
            e.printStackTrace();
            assertTrue(false);
        }
    }
   
   
}
TOP

Related Classes of org.jboss.soa.esb.oracle.aq.QueueTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.