package com.oracle.example.jms.uoo; import com.oracle.example.jms.Constants; import weblogic.jms.extensions.WLConnection; import weblogic.jms.extensions.WLMessageProducer; import weblogic.jms.extensions.WLSession; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.annotation.Resource; import javax.ejb.LocalBean; import javax.ejb.Stateless; import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; import javax.jms.ConnectionFactory; import javax.jms.JMSException; import javax.jms.Queue; import javax.jms.Session; import java.util.logging.Logger; /** * ************************************************************************** * <p/> * This code is provided for example purposes only. Oracle does not assume * any responsibility or liability for the consequences of using this code. * If you choose to use this code for any reason, including but not limited * to its use as an example you do so at your own risk and without the support * of Oracle. * <p/> * This code is provided under the following licenses: * <p/> * GNU General Public License (GPL-2.0) * COMMON DEVELOPMENT AND DISTRIBUTION LICENSE Version 1.0 (CDDL-1.0) * <p/> * <p/> * **************************************************************************** */ @Stateless(name = "UOOProducerEJB", mappedName = "ejb/UOOProducer") @LocalBean public class UOOProducerEJB { public static final String JMS_CF_JNDI = "com/oracle/example/jms/uoo/cf"; public static final String JMS_QUEUE_JNDI = "com/oracle/example/jms/uoo/queue"; private static final Logger logger = Logger.getLogger(UOOProducerEJB.class.getName()); @Resource(name = JMS_CF_JNDI, type = ConnectionFactory.class) private ConnectionFactory connectionFactory; @Resource(name = JMS_QUEUE_JNDI, type = Queue.class) private Queue queue; private WLConnection connection; private WLSession session; private WLMessageProducer queueProducer; @PostConstruct public void initialize() { try { connection = (WLConnection) connectionFactory.createConnection(); session = (WLSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE); queueProducer = (WLMessageProducer) session.createProducer(queue); } catch (JMSException e) { if (connection != null) { try { connection.close(); } catch (JMSException f) { e.printStackTrace(); } } } } @PreDestroy public void closeConnection() { try { if (connection != null) { connection.close(); } } catch (JMSException e) { e.printStackTrace(); } } @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public void sendRegularMessageBatch() { try { sendMessageBatch("Hello World!!", 10, 1000); } catch (Exception e) { e.printStackTrace(); } } @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public void sendDiscreteUOO() { try { sendDiscreteUnitOfOrder("Discrete UOO", 11, 1000); } catch (Exception e) { e.printStackTrace(); } } @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public void sendMixedUOO() { try { sendParallelUnitsOfOrder("Intermixed UOO", 11, 1000); } catch (Exception e) { e.printStackTrace(); } } @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public void sendMessageBatch(String pMessageBase, int pMessageCount, long pIntervalTimeInMillis) throws JMSException { beginSession(false); for (int x = 1; x <= pMessageCount; x++) { String text = pMessageBase + "-" + x; queueProducer.send(session.createTextMessage(text)); sleep(pIntervalTimeInMillis); } endSession(); } @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) private void sendDiscreteUnitOfOrder(String pMessage, int pMessageCount, int pIntervalTimeInMillis) throws JMSException { beginSession(false); String uooName = java.util.UUID.randomUUID().toString(); queueProducer.setUnitOfOrder(uooName); System.out.println("Using Unit of Order=[" + uooName + "]"); for (int x = 1; x <= pMessageCount; x++) { String text = pMessage + " (" + x + ")"; queueProducer.send(session.createTextMessage(text)); sleep(pIntervalTimeInMillis); } endSession(); } @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) private void sendParallelUnitsOfOrder(String pMessage, int pMessageCount, int pIntervalTimeInMillis) throws JMSException { beginSession(false); String uooName1 = java.util.UUID.randomUUID().toString(); String uooName2 = java.util.UUID.randomUUID().toString(); String uooName3 = java.util.UUID.randomUUID().toString(); for (int x = 1; x <= pMessageCount; x++) { String text = pMessage + " (" + x + ")"; queueProducer.setUnitOfOrder(uooName1); queueProducer.send(session.createTextMessage(text)); queueProducer.setUnitOfOrder(uooName2); queueProducer.send(session.createTextMessage(text)); queueProducer.setUnitOfOrder(uooName3); queueProducer.send(session.createTextMessage(text)); sleep(pIntervalTimeInMillis); } endSession(); } protected static void sleep(long time) { try { Thread.sleep(time); } catch (Exception e) { e.printStackTrace(); } } protected void beginSession(boolean pTransacted) throws JMSException { session = (WLSession) connection.createSession(pTransacted, 0); queueProducer = (WLMessageProducer) session.createProducer(queue); } protected void endSession() throws JMSException { queueProducer.close(); session.close(); } }