• JavaEE(4)


    1. 在Weblogic服务器上配置PTP消息目的

    配置持久化:

    Services-->Persistence Stores-->New(Create FileStore, Create JDBCStore) (Name: crazyit)

    配置JMS服务器:

    Services-->Messaging-->JMS Servers-->New(Name: crazyitServer; Directory: D:domainsase_domaincrazyit)

    配置JMS模块:

    Services-->Messaging-->JMS Modules-->New(Name: CrazyitModule)

    为JMS模块配置子部署:

    Services-->Messaging-->JMS Modules--><Module Name>-->Subdeployments-->New(Name: my-sub)

    向JMS模块添加资源:

    Services-->Messaging-->JMS Modules--><Module Name>-->Configuration-->New-->Queue(Name: MessageQueue)

    2. 编写PTP消息的生产者

    NetBeans创建java project(JmsPTP) (MessageSender.java)

    需要wlclient.jar, webservices.jar, wljmsclient.jar

    package lee;
    
    import java.util.Properties;
    import javax.jms.Connection;
    import javax.jms.ConnectionFactory;
    import javax.jms.DeliveryMode;
    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.MessageProducer;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    
    public class MessageSender {
        public void sendMessage() throws NamingException, JMSException
        {
            //定义WebLogic默认连接工厂的JNDI
            final String CONNECTION_FACTORY_JNDI = "weblogic.jms.ConnectionFactory";
            
            //获取JNDI服务所需的Context
            Context ctx = getInitialContext();
            
            ConnectionFactory connFactory = (ConnectionFactory)ctx.lookup(CONNECTION_FACTORY_JNDI);
            Destination dest = (Destination)ctx.lookup("MessageQueue");
            Connection conn = connFactory.createConnection();
            Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
            
            MessageProducer sender = session.createProducer(dest);
            sender.setDeliveryMode(DeliveryMode.PERSISTENT);
            sender.setTimeToLive(20000);
            
            TextMessage msg = session.createTextMessage();
            
            msg.setText("Hello");
            sender.send(msg);
            
            msg.setText("Welcome to JMS");
            sender.send(msg);
            
            session.close();
            conn.close();
        }
    
        private Context getInitialContext() {      
            final String INIT_FACTORY = "weblogic.jndi.WLInitialContextFactory";
            final String SERVER_URL = "t3://localhost:7001";
            Context ctx = null;
            try
            {
                Properties props = new Properties();
                props.put(Context.INITIAL_CONTEXT_FACTORY, INIT_FACTORY);
                props.put(Context.PROVIDER_URL , SERVER_URL);
                
                ctx = new InitialContext(props);
            }
            catch(NamingException e)
            {
                System.err.println("不能连接WebLogic Server在:" + SERVER_URL);
                e.printStackTrace();
            }
            return ctx;
        }
        
        public static void main(String[] args) throws Exception
        {
            MessageSender sender = new MessageSender();
            sender.sendMessage();
        }
    }

    3. 编写PTP消息的同步接收者(SyncConsumer.java)

    package lee;
    
    import javax.jms.*;
    import javax.naming.*;
    import java.util.Properties;
    
    public class SyncConsumer {
        public void receiveMessage() throws JMSException, NamingException {
            //定义WebLogic默认连接工厂的JNDI
            final String CONNECTION_FACTORY_JNDI = "weblogic.jms.ConnectionFactory";
            
            //获取JNDI服务所需的Context
            Context ctx = getInitialContext();
    
            ConnectionFactory connFactory = (ConnectionFactory) ctx.lookup(CONNECTION_FACTORY_JNDI);    
            Destination dest = (Destination) ctx.lookup("MessageQueue");
    
            Connection conn = connFactory.createConnection();
            conn.start();
    
            Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
            MessageConsumer receiver = session.createConsumer(dest);
    
            TextMessage msg = (TextMessage) receiver.receive();
            System.out.println(msg);
            System.out.println("同步接收到的消息:" + msg.getText());
    
            session.close();
            conn.close();
        }
    
        //工具方法,用来获取命名服务的Context对象
        private Context getInitialContext() {
            // 参看(4)
        }
    
        public static void main(String[] args) throws Exception {
            SyncConsumer consumer = new SyncConsumer();
            consumer.receiveMessage();
        }
    }

    4. 编写PTP消息的异步接收者(AsyncConsumer.java)

    package lee;
    
    import javax.jms.*;
    import javax.naming.*;
    import java.util.Properties;
    
    //JMS异步消费者就是一个监听器,故实现MessageListener接口
    public class AsyncConsumer implements MessageListener {
        public AsyncConsumer() throws NamingException, JMSException, InterruptedException {
            final String CONNECTION_FACTORY_JNDI = "weblogic.jms.ConnectionFactory";
    
            Context ctx = getInitialContext();
    
            ConnectionFactory connFactory = (ConnectionFactory) ctx.lookup(CONNECTION_FACTORY_JNDI);
            Destination dest = (Destination) ctx.lookup("MessageQueue");
            Connection conn = connFactory.createConnection();
    
            conn.start();
        
            Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
            MessageConsumer receiver = session.createConsumer(dest);
    
            receiver.setMessageListener(this);
            Thread.sleep(20000);
    
            session.close();
            conn.close();
        }
    
        //实现消息监听器必须实现的方法。
        public void onMessage(Message m) {
            TextMessage msg = (TextMessage) m;
            System.out.println(msg);
            try {
                System.out.println("异步接收的消息:" + msg.getText());
            } 
            catch (JMSException ex) {
                ex.printStackTrace();
            }
        }
    
        //工具方法,用来获取命名服务的Context对象
        private Context getInitialContext() {
            // 参看(4)
        }
    
        public static void main(String[] args) throws Exception {
            AsyncConsumer consumer = new AsyncConsumer();
        }
    }
  • 相关阅读:
    默认值设置
    关于设置 存储 内部存储空间只显示图片不显示视频的解决方法
    sd卡的监听
    android 设置时间12/24小时制
    详解BMP木马
    C#中类和接口的设计思想(本人认为比较好的思想,欢迎大家讨论指点)
    从XML中读取数据到内存的实例
    如何在代码中通过命令行创建SQL SERVER 数据库
    Visual Studio 2005 新特性 之 可空类型
    install shield11.5 如何制作卸载程序
  • 原文地址:https://www.cnblogs.com/thlzhf/p/4249139.html
Copyright © 2020-2023  润新知