ajout TP4

This commit is contained in:
Laureηt 2023-04-22 17:36:19 +02:00
parent c9d7acaedc
commit 12949804d9
Signed by: Laurent
SSH key fingerprint: SHA256:kZEpW8cMJ54PDeCvOhzreNr4FSh6R13CMGH/POoO8DI
4 changed files with 340 additions and 0 deletions

63
TP4/HelloTopic.java Normal file
View file

@ -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;
}
}
}

143
TP4/Irc.java Normal file
View file

@ -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<String> users = new Vector<String>();
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 <name>");
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();
}
}
}

BIN
TP4/archi.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

134
TP4/tp-jms.html Normal file
View file

@ -0,0 +1,134 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="CONTENT-TYPE" content="text/html;
charset=windows-1252">
<title></title>
<meta name="GENERATOR" content="OpenOffice.org 1.1.4 (Win32)">
<meta name="CREATED" content="20051026;11210625">
<meta name="CHANGEDBY" content="Daniel Hagimont">
<meta name="CHANGED" content="20051112;3545775">
<meta name="ProgId" content="Word.Document">
<meta name="Originator" content="Microsoft Word 10">
<meta name="Template" content="C:\PROGRAM FILES\MICROSOFT
OFFICE\OFFICE\html.dot">
<style>
<!--
P { color: #000000 }
P.msonormal { margin-bottom: 0cm; font-family: "Times New Roman" }
A:link { color: #0000ff }
A:visited { color: #800080 }
-->
</style>
</head>
<body dir="ltr" vlink="#800080" text="#000000" link="#0000ff"
lang="fr-FR">
<p align="center"><br>
<br>
</p>
<p style="margin-bottom: 0cm;" align="center"><font
style="font-size: 20pt;" size="5"><b>Cours Systèmes Communicants</b></font></p>
<p align="center"><font style="font-size: 20pt;" size="5"><b>ENSEEIHT
Département Informatique 2ième année</b></font></p>
<p align="center"><font style="font-size: 20pt;" size="5"><b>TP JMS</b></font></p>
<p style="margin-bottom: 0cm;" align="center"><font size="3">Daniel
Hagimont</font></p>
<p style="margin-bottom: 0cm;" align="center"><font size="3">Daniel.Hagimont@enseeiht.fr</font></p>
<p class="msonormal" style="margin-left: 5.08cm; margin-bottom:
0.5cm;"><br>
</p>
<p class="msonormal" style="margin-left: 1.27cm; margin-bottom:
0.5cm;"><a name="_Toc432321016"></a> <font face="Arial"><font
style="font-size: 13pt;" size="3"><b>1.&nbsp;&nbsp;&nbsp;&nbsp;
Objectif</b></font></font></p>
<p style="margin-left: 1.27cm;">L'objectif de ce TP est de
programmer une application répartie en utilisant une implantation
de l'interface JMS vue en cours.</p>
<p class="msonormal" style="margin-left: 1.27cm; margin-bottom:
0.5cm;"> <font face="Arial"><font style="font-size: 13pt;"
size="3"><b>2.&nbsp;&nbsp;&nbsp;&nbsp; Spécification</b></font></font></p>
<p style="margin-left: 1.27cm;">L'objectif est la gestion d'un <i>Forum</i>
de discussion pouvant faire intervenir un nombre quelconque
d'intervenants utilisant une application <i>Irc</i>. Chaque <i>Irc</i>
peut émettre des messages qui sont diffusés à l'ensemble des <i>Irc</i>.
Les messages ne sont pas mémorisés par le <i>Forum</i>. Seuls les
<i>Irc</i> présents sur le <i>Forum</i> reçoivent les messages
émis. Pour émettre, un <i>Irc</i> doit être connecté au <i>Forum</i>.
</p>
<p style="margin-left: 1.27cm;">Nous considérons les opérations
suivantes :</p>
<ul>
<ul>
<li>
<p>Connect : permet à un <i>Irc</i> de se connecter au <i>Forum</i>.</p>
</li>
<li>
<p>Leave : permet à un <i>Irc</i> de se déconnecter du <i>Forum</i>.</p>
</li>
<li>
<p>Write : permet à un <i>Irc</i> d'émettre un message.</p>
</li>
<li>
<p>Who : permet à un <i>Irc</i> de connaître l'ensemble des
intervenants connectés au <i>Forum</i>.</p>
</li>
</ul>
</ul>
<p style="margin-left: 1.27cm;">Nous utilisons JMS en mode
Publish/Subscribe.</p>
<p style="margin-left: 1.27cm;"><br>
<img alt="archi" src="archi.jpg" width="576" height="231"><br>
</p>
<p class="msonormal" style="margin-left: 1.27cm; margin-bottom:
0.5cm;"><br clear="left">
<br>
</p>
<p style="margin-left: 1.27cm;">Lapplication est composée du
fichier <a href="Irc.java">Irc.java</a> qui inclut l'interface
graphique de l'application, que vous devez compléter pour faire
marcher l'application avec JMS.</p>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Un petit
exemple (<a href="HelloTopic.java">HelloTopic.java</a>) vous est
donné pour démarrer.
<p style="margin-left: 1.27cm;">Pour utiliser activeMQ
(l'implantation de JMS) :<br>
</p>
<ul style="margin-left: 40px;">
<li>récupérez apache-active-MQ</li>
<ul>
<li>wget
http://sd-127206.dedibox.fr/hagimont/software/apache-activemq-5.14.0-bin.tar.gz<br>
</li>
</ul>
<li>décompresser l'archive (apache-activemq-5.14.0-bin.tar.gz)
dans un répertoire &lt;activemq_path&gt;</li>
<li>pour lancer un daemon activeMQ :
&lt;activemq_path&gt;/bin/activemq start (et stop pour
l'arrêter)<br>
</li>
<li>si vous utilisez eclipse, le jar à ajouter dans votre
BuildPath est : &lt;activemq_path&gt;/activemq-all-5.14.0.jar</li>
<li>si vous voulez compiler (ou exécuter) en dehors d'eclipse :
javac -cp .:&lt;activemq_path&gt;/lib/* &lt;fichier source
java&gt;</li>
</ul>
<p style="margin-left: 1.27cm;">0) testez l'exemple HelloTopic
ci-dessus<br>
1) commencez par coder les opérations de connexion, emission et
réception de messages<br>
2) implantez une solution gérant la liste des intervenants
connectés<br>
3) rajouter des connexions "durables" : si vous quitter Irc et que
vous vous reconnectez plus tard, vous recevez les messages émis
pendant votre absence.<br>
</p>
</body>
</html>