The problem with a generic term like Peer-to-Peer (P2P) network computing is that it inevitably means different things to different people, and so you will find the term applied to a variety of systems. For example, you will find the term applied to:
A D V E R T I S E M E N T
Centralized systems where every peer connects to a server which coordinates and manages communication.
Decentralized systems, where peers run independently without the need for centralized services.
Brokered systems where peers connect to a server in order to discover other peers, but then manage the communication themselves.
Project JXTA defines a set of protocols that can be used to construct peer-to-peer systems using any of the centralized, brokered and decentralized approaches. J2EE is intended for server-side computing, which suggests it is most suited for a centralized peer-to-peer system. A good way to get a better appreciation of the differences is to study a simple example application. This first article will introduce a very simple JMS chat application for the exchange of messages between users. The choice of a chat application is deliberate because Project JXTA already supplies a demonstration application called myJXTA (which is also known by its former name of InstantP2P) that includes a sophisticated chat capability.
Peer-to-peer example code using JMS
The JMS chat application was deployed and tested using the Java 2 SDK, Enterprise Edition Version 1.3 so this is the environment that will be assumed. To run the JMSChat example you must have installed the latest version of the Java 2 SDK, Enterprise Edition Version 1.3. You should first install the required version of the Java 2 SDK, Standard Edition, if not already installed. The links to the appropriate locations are given below:
This section contains instructions on how to create and run a simple JMS chat program. It is an adaptation of the publish/subscribe (pub/sub) example provided by the JMS tutorial. Before you can run the example, you need to make sure your environment is set appropriately. Table 1 shows how to set the environment variables needed to run J2EE applications on Windows and UNIX platforms.
The JMSChat client is a multi-threaded Java program that uses a pub/sub topic for broadcasting messages to all subscribers to the topic. It uses separate threads for publishing messages to the topic and for receiving messages from the topic. These threads are implemented by the JMSChatThread class.
The publishing thread does the following:
Performs a JNDI lookup of the TopicConnectionFactory and topic
Creates a connection and session
Creates a TopicPublisher
Creates a TextMessage
Publishes messages to the topic
Closes the connection, which automatically closes the session and TopicPublisher
The receiving thread does the following:
Performs a JNDI lookup of the TopicConnectionFactory and topic
Creates a connection and session
Creates a TopicSubscriber
Starts the connection, causing message delivery to begin
Listens for the messages published to the topic
Closes the connection, which automatically closes the session and TopicSubscriber
Publish/Subscribe (pub/sub)
A pub/sub application has the following characteristics:
A pub/sub producer is publisher
A message may have multiple subscribers
A pub/sub destination is a topic
A pub/sub consumer is a subscriber
An email newsletter application may use a publish/subscribe model. Everyone who is interested in the newsletter becomes a subscriber, and when a new message is published (say the head of HR sends out new info), that message is sent to all subscribers.
Writing the Pub/Sub Client Programs. The publishing program (SimpleTopicPublisher.java) performs the following steps:
Performs the JNDI API lookup of the TopicConnectionFactory and topics.
Creates the connections and a sessions.
Creates the TopicPublisher.
Creates the TextMessage.
Publishes one or more messages to the topics.
Closes the connection, which automatically closes the session and the TopicPublisher.
The receiving program (SimpleTopicSubscriber.java) performs the following steps:
Performs the JNDI API lookup of the TopicConnectionFactory and topics.
Creates the connection and a sessions.
Creates the TopicSubscriber.
Creates an instance of the TextListener class and registers it as the message listener for a TopicSubscriber.
Starts the connection, causing the message delivery to begin.
Listens for the messages published to the topic, stopping when the user enters the letters(characters) q or Q (Quit).
Closes the connection, which automatically closes the session and TopicSubscriber.
The message listener (TextListener.java) follows these steps:
When the message arrives, the onMessage method is called automatically.
The onMessage method converts the incoming message to a TextMessage and displays its appropriate contents.