The JMS API resides in the javax.jms package. These are the most important classes and interfaces for our purposes:
Holds business data and routing information. Although you'll find several types of Messages, most of the time you'll use either a TextMessage (that contains textual data in its body) or an ObjectMessage (that holds serializable objects in its body).
Holds messages sent by the Producer to be received by the Consumer(s). A Destination is either a Queue or a Topic that the JMS Server manages on behalf of its clients.
Enables a JMS client to send or receive Messages. Use a Connection to create one or more Sessions.
A ConnectionFactory is either a QueueConnectionFactory or it is a TopicConnectionFactory, depending on the messaging model, and it exists to create Connections.
A Session creates Producers, Consumers, and Messages. A Publish-Subscribe application uses a TopicSession, and a Point-to-Point application uses a QueueSession. Sessions are single-threaded.