From 12949804d9bbdc07181cb90247715e40316a9060 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laure=CE=B7t?= Date: Sat, 22 Apr 2023 17:36:19 +0200 Subject: [PATCH] ajout TP4 --- TP4/HelloTopic.java | 63 +++++++++++++++++++ TP4/Irc.java | 143 ++++++++++++++++++++++++++++++++++++++++++++ TP4/archi.jpg | Bin 0 -> 65047 bytes TP4/tp-jms.html | 134 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 340 insertions(+) create mode 100644 TP4/HelloTopic.java create mode 100644 TP4/Irc.java create mode 100644 TP4/archi.jpg create mode 100644 TP4/tp-jms.html 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 0000000000000000000000000000000000000000..702409795a2eec56239bce4fbc68c57b24a2434b GIT binary patch literal 65047 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𝔞5Ep(o%kzxBiG)nI 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 literal 0 HcmV?d00001 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.
+

+ +