Professional Documents
Culture Documents
Chin-Yi Tsai
JMS
JMS 提供一種可以在 J2EE 程式和元件間傳送訊息
的方式
Message agent
J2EE 應用程式和元件使用 JMS API 和 JMS 溝通
JMS 由五個元素所組成
Provider
Client
Message
Administered object: designation factory, connection
Native server
2
訊息傳遞架構
Point-to-point
同步
Subscriber/publisher
3
Point-to-Point Messaging
Msg
Msg
consumes
Client1 Queue Client2
sends
acknowledges
4
Publish/Subscribe Messaging
subscribes
Msg Client2
delivers
Client1
publishes Topic subscribes
Client3
delivers
5
The basic building blocks of a JMS application
Administered objects
connection factories and destinations
Connections
Sessions
Message producers
Message consumers
Messages
6
JMS API Programming Model
Connection
Factory
creates
Connection
Message Format
Message Header
Message Properties
Message Body
8
javax.jms Package
Connection
Encapsulates a virtual connection with a JMS API provider
Session
Single-threaded context for producing and consuming messages
QueueSender
An object created by a session used for sending messages to a
queue
QueueReceiver
An object created by a session used for receiving messages from
a queue
9
Creating a Point-to-Point JMS API Application
1. Look up a Connection factory using the J.N.D.I. API.
8. Send a control message to the Queue object that allmessages have been
sent.
10
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) {
}
Send message
11
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);
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) {
Publisher
14
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);
connection.start();
15
JavaMail
16
JavaMail API
傳送電子郵件
接收電子郵件
刪除電子郵件
回覆和發送一封電子郵件
發送電子郵件
傳送附加檔案
接收附加檔案
搜索一個電子郵件資料夾
17
Java Mail API Package
javax.mail
Classes modeling a mail system.
javax.mail.event
Listeners and events for the JavaMail API.
javax.mail.internet
Classes specific to Internet mail systems.
javax.mail.search
Message search terms for the JavaMail API.
18
Important Classes
javax.mail.Session
Javax.mail.Message
Javax.mail.Address
Javax.mail.Authenticator
Javax.mail.Transport
Javax.mail.Store
Javax.mail.Folder
19
Main Java mail main classes
收 送
Store
Folder
Folder
Sending a message
props.put("mail.smtp.host", "smtp.jspinsider.com");
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
transport.send(newMessage);
21
接收電子郵件
Session
Store
Store store1 = ses1.getStore(“pop3”);
folder1.close(false);
store1.close();
22
reference
http://java.sun.com/products/javamail/javadocs/ind
ex.html
http://java.sun.com/j2ee/1.4/docs/api/
23