diff --git a/TP4/HelloTopic.java b/TP4/HelloTopic.java new file mode 100644 index 0000000..41de38b --- /dev/null +++ b/TP4/HelloTopic.java @@ -0,0 +1,63 @@ + +import javax.jms.Connection; +import javax.jms.ConnectionFactory; +import javax.jms.Destination; +import javax.jms.Message; +import javax.jms.MessageConsumer; +import javax.jms.MessageListener; +import javax.jms.MessageProducer; +import javax.jms.Session; +import javax.jms.TextMessage; + +import org.apache.activemq.ActiveMQConnection; +import org.apache.activemq.ActiveMQConnectionFactory; + +public class HelloTopic { + + private static String url = ActiveMQConnection.DEFAULT_BROKER_URL; + private static String subject = "MyTopic"; + + public static void main(String argv[]) { + + try { + + ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url); + + Connection connection = connectionFactory.createConnection(); + connection.start(); + + Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); + + Destination destination = session.createTopic(subject); + + MessageProducer producer = session.createProducer(destination); + MessageConsumer consumer = session.createConsumer(destination); + + MessageListener listener = new MessageListener() { + public void onMessage(Message msg) { + try { + TextMessage textmsg = (TextMessage)msg; + System.out.println("received : "+textmsg.getText()); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + }; + + consumer.setMessageListener(listener); + + TextMessage message = session.createTextMessage("Hello welcome to ActiveMQ!"); + producer.send(message); + System.out.println("Sentage '" + message.getText() + "'"); + Thread.sleep(1000); + + connection.close(); + + } catch (Exception ex) { + ex.printStackTrace(); + return; + } + + + } +} diff --git a/TP4/Irc.java b/TP4/Irc.java new file mode 100644 index 0000000..c096235 --- /dev/null +++ b/TP4/Irc.java @@ -0,0 +1,143 @@ + +import java.awt.Button; +import java.awt.Color; +import java.awt.FlowLayout; +import java.awt.Frame; +import java.awt.TextArea; +import java.awt.TextField; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Enumeration; +import java.util.Vector; + +import javax.jms.Connection; +import javax.jms.ConnectionFactory; +import javax.jms.Message; +import javax.jms.MessageConsumer; +import javax.jms.MessageListener; +import javax.jms.MessageProducer; +import javax.jms.Session; +import javax.jms.StreamMessage; +import javax.jms.Topic; + +import org.apache.activemq.ActiveMQConnection; +import org.apache.activemq.ActiveMQConnectionFactory; + +public class Irc { + public static TextArea text; + public static TextField data; + public static Frame frame; + + public static String url = ActiveMQConnection.DEFAULT_BROKER_URL; + public static String subject = "MyQueue"; + + public static Vector users = new Vector(); + public static String myName; + + public static ConnectionFactory connectionFactory; + public static Connection connection; + public static Session session; + public static MessageConsumer consumer; + public static MessageProducer producer; + public static Topic topic; + + public static void main(String argv[]) { + + if (argv.length != 1) { + System.out.println("java Irc "); + return; + } + myName = argv[0]; + + // creation of the GUI + frame=new Frame(); + frame.setLayout(new FlowLayout()); + + text=new TextArea(10,55); + text.setEditable(false); + text.setForeground(Color.red); + frame.add(text); + + data=new TextField(55); + frame.add(data); + + Button write_button = new Button("write"); + write_button.addActionListener(new writeListener()); + frame.add(write_button); + + Button connect_button = new Button("connect"); + connect_button.addActionListener(new connectListener()); + frame.add(connect_button); + + Button who_button = new Button("who"); + who_button.addActionListener(new whoListener()); + frame.add(who_button); + + Button leave_button = new Button("leave"); + leave_button.addActionListener(new leaveListener()); + frame.add(leave_button); + + frame.setSize(470,300); + text.setBackground(Color.black); + frame.setVisible(true); + } + + /* allow to print something in the window */ + public static void print(String msg) { + try { + text.append(msg+"\n"); + } catch (Exception ex) { + ex.printStackTrace(); + } + } +} + + + +// action invoked when the "write" button is clicked +class writeListener implements ActionListener { + public void actionPerformed (ActionEvent ae) { + try { + System.out.println("write button pressed"); + } catch (Exception ex) { + ex.printStackTrace(); + } + } +} + +// action invoked when the "connect" button is clicked +class connectListener implements ActionListener { + public void actionPerformed (ActionEvent ae) { + try { + System.out.println("connect button pressed"); + } catch (Exception ex) { + ex.printStackTrace(); + } + } +} + + + +// action invoked when the "who" button is clicked +class whoListener implements ActionListener { + public void actionPerformed (ActionEvent ae) { + try { + System.out.println("who button pressed"); + } catch (Exception ex) { + ex.printStackTrace(); + } + } +} + + +// action invoked when the "leave" button is clicked +class leaveListener implements ActionListener { + public void actionPerformed (ActionEvent ae) { + try { + System.out.println("leave button pressed"); + } catch (Exception ex) { + ex.printStackTrace(); + } + } +} + diff --git a/TP4/archi.jpg b/TP4/archi.jpg new file mode 100644 index 0000000..7024097 Binary files /dev/null and b/TP4/archi.jpg differ diff --git a/TP4/tp-jms.html b/TP4/tp-jms.html new file mode 100644 index 0000000..26338f2 --- /dev/null +++ b/TP4/tp-jms.html @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + +


+
+

+

Cours Systèmes Communicants

+

ENSEEIHT + + + + + – Département Informatique – 2ième année

+

TP JMS

+

Daniel + Hagimont

+

Daniel.Hagimont@enseeiht.fr

+


+

+

1.     + + + + + Objectif

+

L'objectif de ce TP est de + programmer une application répartie en utilisant une implantation + de l'interface JMS vue en cours.

+

2.     Spécification

+

L'objectif est la gestion d'un Forum + de discussion pouvant faire intervenir un nombre quelconque + d'intervenants utilisant une application Irc. Chaque Irc + peut émettre des messages qui sont diffusés à l'ensemble des Irc. + Les messages ne sont pas mémorisés par le Forum. Seuls les + Irc présents sur le Forum reçoivent les messages + émis. Pour émettre, un Irc doit être connecté au Forum. +

+

Nous considérons les opérations + suivantes :

+
    +
      +
    • +

      Connect : permet à un Irc de se connecter au Forum.

      +
    • +
    • +

      Leave : permet à un Irc de se déconnecter du Forum.

      +
    • +
    • +

      Write : permet à un Irc d'émettre un message.

      +
    • +
    • +

      Who : permet à un Irc de connaître l'ensemble des + intervenants connectés au Forum.

      +
    • +
    +
+

Nous utilisons JMS en mode + Publish/Subscribe.

+


+ archi
+

+


+
+

+

L’application est composée du + fichier Irc.java qui inclut l'interface + graphique de l'application, que vous devez compléter pour faire + marcher l'application avec JMS.

+             Un petit + exemple (HelloTopic.java) vous est + donné pour démarrer. +

Pour utiliser activeMQ + (l'implantation de JMS) :
+

+
    +
  • récupérez apache-active-MQ
  • +
      +
    • wget +http://sd-127206.dedibox.fr/hagimont/software/apache-activemq-5.14.0-bin.tar.gz
      +
    • +
    +
  • décompresser l'archive (apache-activemq-5.14.0-bin.tar.gz) + dans un répertoire <activemq_path>
  • +
  • pour lancer un daemon activeMQ : + <activemq_path>/bin/activemq start (et stop pour + l'arrêter)
    +
  • +
  • si vous utilisez eclipse, le jar à ajouter dans votre + BuildPath est : <activemq_path>/activemq-all-5.14.0.jar
  • +
  • si vous voulez compiler (ou exécuter) en dehors d'eclipse : + javac -cp .:<activemq_path>/lib/* <fichier source + java>
  • +
+

0) testez l'exemple HelloTopic + ci-dessus
+ 1) commencez par coder les opérations de connexion, emission et + réception de messages
+ 2) implantez une solution gérant la liste des intervenants + connectés
+ 3) rajouter des connexions "durables" : si vous quitter Irc et que + vous vous reconnectez plus tard, vous recevez les messages émis + pendant votre absence.
+

+ +