国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

EnterpriseJavaBeansDistilled...

2019-11-18 16:19:25
字體:
供稿:網(wǎng)友
消息驅(qū)動(dòng)bean(續(xù))

jms 應(yīng)用客戶程序

to get a better idea of how JMS is used, we can create a java application whose sole purpose is receiving and PRocessing reservation messages. We will develop a very simple JMS client that simply prints a description of each ticket as it receives the messages. We'll assume that the TravelAgent EJB is using the TextMessage to send a description of the ticket to the JMS clients. The following code shows how the JMS application client might look:

為更好的理解如何使用JMS,可以開發(fā)一個(gè)Java應(yīng)用,其唯一的用途在于接收和處理預(yù)定消息。在這里,將開發(fā)一個(gè)非常簡(jiǎn)單的JMS客戶。當(dāng)該客戶接收到消息時(shí),會(huì)打印出所每張票的描述信息。假定TravelAgent EJB使用TextMessage以發(fā)送票的描述給JMS客戶。下列代碼顯示了JMS應(yīng)用客戶可能的樣子:

import javax.jms.Message;

import javax.jms.TextMessage;

import javax.jms.TopicConnectionFactory;

import javax.jms.TopicConnection;

import javax.jms.Topicsession;

import javax.jms.Topic;

import javax.jms.Session;

import javax.jms.TopicSubscriber;

import javax.jms.JMSException;

import javax.naming.InitialContext;





public class JmsClient_1 implements javax.jms.MessageListener {



    public static void main(String[]args) throws Exception {

        

        if(args.length != 2)

            throw new Exception("Wrong number of arguments");

        

        new JmsClient_1(args[0], args[1]);

        

        while(true){Thread.sleep(10000);}

        

    }

        

    public JmsClient_1(String factoryName, String topicName) throws Exception {

            

        InitialContext jndiContext = getInitialContext();

        

        TopicConnectionFactory factory = (TopicConnectionFactory)

            jndiContext.lookup("TopicFactoryNameGoesHere");

        

        Topic topic = (Topic)jndiContext.lookup("TopicNameGoesHere");



        TopicConnection connect = factory.createTopicConnection();



        TopicSession session =

            connect.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);



        TopicSubscriber subscriber = session.createSubscriber(topic);



        subscriber.setMessageListener(this);

        

        connect.start();

    }

    

    public void onMessage(Message message) {

        try {

        

            TextMessage textMsg = (TextMessage)message;

            String text = textMsg.getText();

            System.out.println("/n RESERVATION RECIEVED:/n"+text);

        

        } catch(JMSException jmsE) {

            jmsE.printStackTrace();

        }

    }

    

    public static InitialContext getInitialContext() {

        // 創(chuàng)建具體產(chǎn)品廠商的JNDI上下文

    }

}

    JmsClient_1的構(gòu)建器含有來自JNDI InitialContext的TopicConnectionFactory和Topic。這些對(duì)象是使用具體廠商產(chǎn)品的properties創(chuàng)建的,從而使得客戶能夠連接到TravelAgent EJB使用的同一JMS供應(yīng)者。比如,WebLogic應(yīng)用服務(wù)器中g(shù)etInitialContext()方法的代碼如下:(JNDI也允許將properties放置在jndi.properties文件中,該文件包含有用于InitialContext的property值,并能夠在運(yùn)行時(shí)被動(dòng)態(tài)找到。本書中,顯式的給出了properties值。)

public static InitialContext getInitialContext() {

    Properties env = new Properties();

    env.put(Context.SECURITY_PRINCIPAL, "guest");

    env.put(Context.SECURITY_CREDENTIALS, "guest");

    env.put(Context.INITIAL_CONTEXT_FACTORY,

       "weblogic.jndi.WLInitialContextFactory");

    env.put(Context.PROVIDER_URL, "t3://localhost:7001");

    return new InitialContext(env);

}

一旦客戶獲得了TopicConnectionFactory和Topic,就可以采取和TravelAgent EJB相同的方式創(chuàng)建TopicConnection和TopicSession。它們的主要區(qū)別在于這里的TopicSession對(duì)象創(chuàng)建了TopicSubscriber對(duì)象,而不是TopicPublisher。其中,TopicSubscriber被明確設(shè)計(jì)成處理來自特定Topic的消息:

TopicSession session = 

    connect.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);



TopicSubscriber subscriber = session.createSubscriber(topic);



subscriber.setMessageListener(this);

        

connect.start();

TopicSubscriber能直接接收消息,或者能夠?qū)⑾⒌奶幚砦山o接口javax.jms.MessageLister。在例子中,JmsClient_1實(shí)現(xiàn)了MessageListener接口,使得它可以處理消息。MessageListener對(duì)象實(shí)現(xiàn)了單一的方法,onMessage(),每當(dāng)新消息發(fā)送到訂閱者的topic中時(shí),該方法都會(huì)被調(diào)用。在這里,每次TravelAgent EJB發(fā)送預(yù)定消息到topic中時(shí),JMS客戶中的onMessage()方法都會(huì)被調(diào)用,使得它能夠接收到消息的拷貝并處理它:

public void onMessage(Message message) {

    try {

        TextMessage textMsg = (TextMessage)message;

        String text = textMsg.getText();

        System.out.println("/n RESERVATION RECIEVED:/n"+text);

        

    } catch(JMSException jmsE) {

        jmsE.printStackTrace();

    }

}


待續(xù)。。。。。。。。

bill-轉(zhuǎn)自:csdn進(jìn)入討論組討論。

(出處:http://m.survivalescaperooms.com)



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 清新县| 唐河县| 杭州市| 宁武县| 温宿县| 赣州市| 普兰店市| 新竹市| 共和县| 清远市| 松滋市| 南乐县| 乐陵市| 上高县| 东光县| 军事| 祁东县| 禹城市| 蓬溪县| 周宁县| 台湾省| 舟曲县| 金山区| 兴宁市| 苗栗县| 昌图县| 蒙阴县| 洞头县| 铅山县| 五河县| 宣化县| 闽侯县| 铁岭县| 乌鲁木齐县| 景德镇市| 城步| 黔南| 武乡县| 句容市| 尉氏县| 荥经县|