Presentation is loading. Please wait.

Presentation is loading. Please wait.

Topics: JMS & JavaMail Chin-Yi Tsai. 2 JMS JMS 提供一種可以在 J2EE 程式和元件間傳送訊息的 方式 Message agent Message agent J2EE 應用程式和元件使用 JMS API 和 JMS 溝通 JMS 由五個元素所組成 Provider.

Similar presentations


Presentation on theme: "Topics: JMS & JavaMail Chin-Yi Tsai. 2 JMS JMS 提供一種可以在 J2EE 程式和元件間傳送訊息的 方式 Message agent Message agent J2EE 應用程式和元件使用 JMS API 和 JMS 溝通 JMS 由五個元素所組成 Provider."— Presentation transcript:

1 Topics: JMS & JavaMail Chin-Yi Tsai

2 2 JMS JMS 提供一種可以在 J2EE 程式和元件間傳送訊息的 方式 Message agent Message agent J2EE 應用程式和元件使用 JMS API 和 JMS 溝通 JMS 由五個元素所組成 Provider Provider Client Client Message Message Administered object: designation factory, connection Administered object: designation factory, connection Native server Native server

3 3 訊息傳遞架構 Point-to-point 同步 同步Subscriber/publisher

4 4 Point-to-Point Messaging Client1 Client2 Queue sends acknowledges consumes Msg

5 5 Publish/Subscribe Messaging Client1 Client2 publishes subscribes Msg Topic Client3 delivers

6 6 The basic building blocks of a JMS application Administered objects connection factories and destinations connection factories and destinationsConnectionsSessions Message producers Message consumers Messages

7 7 JMS API Programming Model Connection creates Msg Destination receives from sends to Connection Factory Destination Message Consumer Session Message Producer creates

8 8 JMS Message Types Message Type Contains Some Methods TextMessageStringgetText,setText MapMessage set of name/value pairs setString,setDouble,setLon g,getDouble,getString BytesMessage stream of uninterpreted bytes writeBytes,readBytes StreamMessage stream of primitive values writeString,writeDouble,writ eLong,readString ObjectMessage serialize object setObject,getObject Message Format Message Header Message Properties Message Body

9 9 javax.jms Package Connection Encapsulates a virtual connection with a JMS API providerSession Single-threaded context for producing and consuming messagesQueueSender An object created by a session used for sending messages to a queueQueueReceiver An object created by a session used for receiving messages from a queue

10 10 Creating a Point-to-Point JMS API Application 1. Look up a Connection factory using the J.N.D.I. API. 2. Look up the message queue using the J.N.D.I. API. 3. Create a Connection using the factory. 4. Create a Session object. 5. Create a MessageSender object. 6. Create one or more Message objects. 7. Send one or more Message objects using the MessageSender object. 8. Send a control message to the Queue object that allmessages have been sent.

11 11 try { INitialContext jnidiContext = new InitialContext(); queueConnectionFactory = (QueueConnectionFactory) jndiContext.lookup( "QueueConnectionFactory" ); queue = (Queue) jndiContext.lookup( queueName ); queueConnection = queueConnectionFactory.createQueueConnection( ); queueSession = queueConnection.createQueueSession( false, Session.AUTO_ACKNOWLEDGE ); queueSender = queueSession.createSender( queue ); message = queueSession.createTextMessage( ); message.setText( "This is a simple message” ); queueSender.send( message ); queueConnection.close( ); } catch (JMSException e) { System.out.println("Exception occurred: " + } Send message

12 12 try { InitialContext jndiContext = new InitialContext(); factory = (QueueConnectionFactory) jndiContext.lookup("QueueConnectionFactory"); queue = (Queue) jndiContext.lookup(queueName); QueueConnection connection = factory.createQueueConnection (); QueueSession session = connection.createQueueSession(false, QueueSession.CLIENT_ACKNOWLEDGE ); receiver = session.createReceiver(queue); receiver.setMessageListener (new MessageListener(){ public void onMessage (Message newMessage){ try { TextMessage message = (TextMessage) newMessage; System.out.println("Message received "); System.out.println( message.getText() ); message.acknowledge ( ); } catch (Exception e) {} } }); connection.start(); } catch (JMSException e){ } catch (NamingException e) { } Receive message

13 13 Creating a Publish/Subscribe JMS API Application 1. Look up a TopicConnection factory using the J.N.D.I. API. 2. Look up a Topic object using the J.N.D.I. API. 3. Create Connection and Session objects. 4. Create a TopicPublisher object. 5. Create one or more Message objects. 6. Publish one or more messages using the TopicPublisher object.

14 14 try { topicConnectionFactory = (TopicConnectionFactory) jndiContext.lookup("TopicConnectionFactory"); topic = (Topic) jndiContext.lookup(topicName); topicConnection = topicConnectionFactory.createTopicConnection(); topicSession = topicConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); topicPublisher = topicSession.createPublisher(topic); message = topicSession.createTextMessage(); message.setText("This is a simple publish/subscribe message”); topicPublisher.publish(message); } catch (JMSException e) { System.out.println("Exception occurred: " + e.toString()); } Publisher

15 15 try { TopicConnectionFactory factory =(TopicConnectionFactory) jndiContext.lookup("TopicConnectionFactory"); topic = (Topic) jndiContext.lookup(topicName); TopicConnection connection = factory.createTopicConnection (); TopicSession session = connection.createTopicSession(false, TopicSession.CLIENT_ACKNOWLEDGE ); subscriber = session.createSubscriber(topic); subscriber.setMessageListener (new MessageListener(){ public void onMessage (Message newMessage){ try { TextMessage message = (TextMessage) newMessage; System.out.println("Message received "); System.out.println( message.getText() ); message.acknowledge (); } catch (Exception e) {} } }); connection.start(); } catch (JMSException e){ } Subscriber

16 16 JavaMail

17 17 JavaMail API 傳送電子郵件接收電子郵件刪除電子郵件回覆和發送一封電子郵件發送電子郵件傳送附加檔案接收附加檔案搜索一個電子郵件資料夾

18 18 Java Mail API Package javax.mail Classes modeling a mail system. Classes modeling a mail system.javax.mail.event Listeners and events for the JavaMail API. Listeners and events for the JavaMail API.javax.mail.internet Classes specific to Internet mail systems. Classes specific to Internet mail systems.javax.mail.search Message search terms for the JavaMail API. Message search terms for the JavaMail API.

19 19 Important Classes javax.mail.Session Javax.mail.Message Javax.mail.AddressJavax.mail.Authenticator Javax.mail.Transport Javax.mail.Store Javax.mail.Folder

20 20 Main Java mail main classes Messag e Session FolderFolder Transport Connection to server Sending mail using SMTP Receiving mail using POP or IMAP Store Connection to a remove mail folder (mainly the INBOX) Receive and array of messages Sending a message 收送

21 21傳送電子郵件 Session sendMailSession; Storestore; Transport transport; Properties props = new Properties(); sendMailSession = Session.getInstance(props, null); props.put("mail.smtp.host", "smtp.jspinsider.com"); Message newMessage = new MimeMessage(sendMailSession); newMessage.setFrom(new InternetAddress(request.getParameter("from"))); newMessage.setRecipient(Message.RecipientType.TO, new InternetAddress ( request.getParameter ("to"))); newMessage.setSubject(request.getParameter("subject")); newMessage.setSentDate(new Date()); newMessage.setText(request.getParameter("text")); transport = sendMailSession.getTransport("smtp"); transport.send(newMessage); Session Message Transport

22 22接收電子郵件 Properties props = new Properties( ); Session ses1 = Session.getDefaultInstance( props, null ); Store store1 = ses1.getStore(“pop3”); Store1.connect( host, username, password); Folder folder1 = store1.getFolder(“INBOX”); Folder1.open(Folder.READ_ONLY); Message msg[] = folder1.getMessage(); folder1.close(false); store1.close(); Session Store Folder Message

23 23 reference http://java.sun.com/products/javamail/javadocs/ind ex.html http://java.sun.com/products/javamail/javadocs/ind ex.html http://java.sun.com/j2ee/1.4/docs/api/


Download ppt "Topics: JMS & JavaMail Chin-Yi Tsai. 2 JMS JMS 提供一種可以在 J2EE 程式和元件間傳送訊息的 方式 Message agent Message agent J2EE 應用程式和元件使用 JMS API 和 JMS 溝通 JMS 由五個元素所組成 Provider."

Similar presentations


Ads by Google