• JMS example


    package com.karl.learn;

    import javax.annotation.PostConstruct;
    import javax.annotation.PreDestroy;
    import javax.ejb.EJB;
    import javax.ejb.Remote;
    import javax.ejb.Stateless;
    import javax.ejb.TransactionAttribute;
    import javax.ejb.TransactionAttributeType;
    import javax.jms.DeliveryMode;
    import javax.jms.JMSException;
    import javax.jms.ObjectMessage;
    import javax.jms.Queue;
    import javax.jms.QueueConnection;
    import javax.jms.QueueConnectionFactory;
    import javax.jms.QueueSender;
    import javax.jms.QueueSession;
    import javax.jms.Session;
    import javax.naming.InitialContext;

    /**
     * EventReceiver
     
    */
    @Stateless(mappedName = EventReporterRemote.JNDI_NAME)
    @Remote(EventReporterRemote.class)
    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    public class EventHandler implements EventReporterRemote {
        private static String destinationName = "/queue/MessageQueue";
        private QueueConnection queueConnection = null;
        private QueueSession queueSession = null;
        private Queue queue = null;

        @Override
        public void notify(Event event) {
            TO to = event.getEventTO();
            if (to == null) {
                System.out.println("Unable to get data from this event "
                        + event.getEventType());
            }
            Message msg = null;
            switch (event.getEventType()) {
            case CREATE:
                msg = new Message(Message.Type.CREATE, to);
                break;
            case DELETE:
                msg = new Message(Message.Type.DELETE, pto);
                break;
            default:
                System.out.println("Wrong event type from this event "
                        + event.getEventType().toString());
            }
            if (msg != null) {
                sendMessage(msg);
            }
        }

        @PostConstruct
        private void init() {
            initQueue();
        }

        private void initQueue() {
            InitialContext ctx = null;
            try {
                ctx = new InitialContext();
                QueueConnectionFactory cf = (QueueConnectionFactory) ctx
                        .lookup("java:/ConnectionFactory");
                queue = (Queue) ctx.lookup(destinationName);
                try {
                    if (queueConnection != null)
                        queueConnection.close();
                    queueConnection = null;
                } catch (Exception ex) {
                    System.out.println("Closing queueConnection error.");
                }
                queueConnection = cf.createQueueConnection();
                queueSession = queueConnection.createQueueSession(false,
                        Session.AUTO_ACKNOWLEDGE);
                queueConnection.start();
            } catch (Exception e) {
                System.out.println("Lookup ConnectionFactory error.", e);
                try {
                    if (queueConnection != null)
                        queueConnection.close();
                } catch (JMSException ignored) {
                    System.out.println("This Exception should be ignored.");
                }
                queueConnection = null;
            } finally {
                if (ctx != null) {
                    try {
                        ctx.close();
                    } catch (Exception e) {
                        System.out.println("Failed in closing context.", e);
                    }
                }
            }
        }

        @PreDestroy
        private void closeConnection() {
            try {
                if (queueConnection != null) {
                    queueConnection.close();
                }
            } catch (JMSException jmse) {
                System.out.println("Could not close connection.", jmse);
            }
        }

        private void sendMessage(Message message) {
            try {
                System.out.println("Send message:" + message.getMessageType());
                if (queueConnection == null || queueSession == null) {
                    initQueue();
                }
                if (queueConnection != null || queueSession != null) {
                    final ObjectMessage message = queueSession
                            .createObjectMessage(message);
                    QueueSender publisher = queueSession.createSender(queue);
                    publisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
                    publisher.send(message);
                } else {
                    System.out.println("No available message queue.");
                }
            } catch (Exception ex) {
                System.out.println("Failed to send message to queue." + ex);
            }
        }
    }
  • 相关阅读:
    Android中库项目、jar包等的使用方法
    rman 使用catalog备份的演示
    好端端的项目重新运行的时候却不行了!!!已解决
    动物:河蚌
    动物:田螺
    动物-鱼:鳖
    动物-鱼:鳝鱼
    动物-鱼:柳根鱼
    动物-鱼:泥鳅
    动物-鱼:刺鳅
  • 原文地址:https://www.cnblogs.com/zhonghan/p/2630963.html
Copyright © 2020-2023  润新知