From 1ab7c5836db4a3039563a57ed057f2f876432475 Mon Sep 17 00:00:00 2001 From: 0qln <0qln@proton.me> Date: Fri, 8 May 2026 11:30:51 +0200 Subject: [PATCH] praktikum3 --- .../configuration/standalone-full.xml | 1158 ++++++++--------- .../example/demo/praktikum3/ChatWindow.java | 41 + .../org/example/demo/praktikum3/Client.java | 36 + .../org/example/demo/praktikum3/Client1.java | 7 + .../org/example/demo/praktikum3/Client2.java | 7 + .../demo/praktikum3/MessageReceiver.java | 40 + .../demo/praktikum3/MessageSender.java | 33 + 7 files changed, 743 insertions(+), 579 deletions(-) create mode 100644 client/src/main/java/org/example/demo/praktikum3/ChatWindow.java create mode 100644 client/src/main/java/org/example/demo/praktikum3/Client.java create mode 100644 client/src/main/java/org/example/demo/praktikum3/Client1.java create mode 100644 client/src/main/java/org/example/demo/praktikum3/Client2.java create mode 100644 client/src/main/java/org/example/demo/praktikum3/MessageReceiver.java create mode 100644 client/src/main/java/org/example/demo/praktikum3/MessageSender.java diff --git a/.wildfly-base/configuration/standalone-full.xml b/.wildfly-base/configuration/standalone-full.xml index d1b1c91..a2d4ff1 100644 --- a/.wildfly-base/configuration/standalone-full.xml +++ b/.wildfly-base/configuration/standalone-full.xml @@ -1,582 +1,582 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=${wildfly.h2.compatibility.mode:REGULAR} - h2 - - - - - org.h2.jdbcx.JdbcDataSource - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${jboss.bind.address:127.0.0.1} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=${wildfly.h2.compatibility.mode:REGULAR} + h2 + + + + + org.h2.jdbcx.JdbcDataSource + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${jboss.bind.address:127.0.0.1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/src/main/java/org/example/demo/praktikum3/ChatWindow.java b/client/src/main/java/org/example/demo/praktikum3/ChatWindow.java new file mode 100644 index 0000000..5841fe2 --- /dev/null +++ b/client/src/main/java/org/example/demo/praktikum3/ChatWindow.java @@ -0,0 +1,41 @@ +package org.example.demo.praktikum3; + +import java.awt.BorderLayout; +import java.awt.FlowLayout; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JTextArea; +import javax.swing.JTextField; + +public class ChatWindow extends JFrame { + private JTextArea textArea; + private MessageReceiver receiver; + + private JPanel inputPanel; + private JTextField messageInput; + private JButton messageSubmit; + private MessageSender sender; + + public ChatWindow(MessageReceiver receiver, MessageSender sender) { + textArea = new JTextArea(); + this.add(BorderLayout.NORTH, textArea); + receiver.setText(textArea); + + inputPanel = new JPanel(); + inputPanel.setLayout(new FlowLayout()); + this.add(BorderLayout.SOUTH, inputPanel); + + messageInput = new JTextField(20); + inputPanel.add(messageInput); + + messageSubmit = new JButton("Submit"); + messageSubmit.addActionListener(e -> { + sender.sendMessage(messageInput.getText()); + }); + inputPanel.add(messageSubmit); + + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } +} diff --git a/client/src/main/java/org/example/demo/praktikum3/Client.java b/client/src/main/java/org/example/demo/praktikum3/Client.java new file mode 100644 index 0000000..531ae3a --- /dev/null +++ b/client/src/main/java/org/example/demo/praktikum3/Client.java @@ -0,0 +1,36 @@ +package org.example.demo.praktikum3; + +import java.util.Properties; +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.Topic; + +public class Client { + private int id; + + public Client(int id) { + this.id = id; + + Properties props = new Properties(); + props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory"); + props.setProperty(Context.PROVIDER_URL, "http-remoting://127.0.0.1:8080"); + + try { + InitialContext context = new InitialContext(props); + ConnectionFactory cf = (ConnectionFactory) context.lookup("jms/RemoteConnectionFactory"); + Topic topic = (Topic) context.lookup("jms/topic/Praktikum3Topic"); + + var sender = new MessageSender(topic, cf, "Sender " + this.id + ": "); + var receiver = new MessageReceiver(topic, cf, null); + var win = new ChatWindow(receiver, sender); + + win.setVisible(true); + win.setTitle("Chat - Sender " + this.id); + receiver.start(); + } catch (NamingException e) { + e.printStackTrace(); + } + } +} diff --git a/client/src/main/java/org/example/demo/praktikum3/Client1.java b/client/src/main/java/org/example/demo/praktikum3/Client1.java new file mode 100644 index 0000000..f984ac8 --- /dev/null +++ b/client/src/main/java/org/example/demo/praktikum3/Client1.java @@ -0,0 +1,7 @@ +package org.example.demo.praktikum3; + +public class Client1 { + public static void main(String[] args) { + new Client(1); + } +} diff --git a/client/src/main/java/org/example/demo/praktikum3/Client2.java b/client/src/main/java/org/example/demo/praktikum3/Client2.java new file mode 100644 index 0000000..134e22f --- /dev/null +++ b/client/src/main/java/org/example/demo/praktikum3/Client2.java @@ -0,0 +1,7 @@ +package org.example.demo.praktikum3; + +public class Client2 { + public static void main(String[] args) { + new Client(2); + } +} diff --git a/client/src/main/java/org/example/demo/praktikum3/MessageReceiver.java b/client/src/main/java/org/example/demo/praktikum3/MessageReceiver.java new file mode 100644 index 0000000..ae84f9e --- /dev/null +++ b/client/src/main/java/org/example/demo/praktikum3/MessageReceiver.java @@ -0,0 +1,40 @@ +package org.example.demo.praktikum3; + +import javax.swing.JTextArea; +import javax.swing.SwingUtilities; +import jakarta.jms.ConnectionFactory; +import jakarta.jms.JMSConsumer; +import jakarta.jms.JMSContext; +import jakarta.jms.Topic; + +public class MessageReceiver extends Thread { + private JTextArea text; + private Topic topic; + private ConnectionFactory cf; + + public MessageReceiver(Topic topic, ConnectionFactory cf, JTextArea text) { + this.text = text; + this.topic = topic; + this.cf = cf; + } + + public JTextArea getText() { + return text; + } + + public void setText(JTextArea text) { + this.text = text; + } + + public void run() { + try (JMSContext context = cf.createContext("guest", "guest")) { + JMSConsumer consumer = context.createConsumer(topic); + while (true) { + String message = consumer.receiveBody(String.class); + if (message != null) { + SwingUtilities.invokeLater(() -> text.append(message + "\n")); + } + } + } + } +} diff --git a/client/src/main/java/org/example/demo/praktikum3/MessageSender.java b/client/src/main/java/org/example/demo/praktikum3/MessageSender.java new file mode 100644 index 0000000..1a163af --- /dev/null +++ b/client/src/main/java/org/example/demo/praktikum3/MessageSender.java @@ -0,0 +1,33 @@ +package org.example.demo.praktikum3; + +import jakarta.jms.ConnectionFactory; +import jakarta.jms.JMSContext; +import jakarta.jms.JMSProducer; +import jakarta.jms.TextMessage; +import jakarta.jms.Topic; + +public class MessageSender { + private String prefix; + private Topic topic; + private ConnectionFactory cf; + + public MessageSender(Topic topic, ConnectionFactory cf, String prefix) { + this.topic = topic; + this.cf = cf; + this.prefix = prefix; + } + + public void sendMessage(String msg) { + var text = prefix + msg; + + try (JMSContext context = cf.createContext("guest", "guest")) { + JMSProducer producer = context.createProducer(); + TextMessage message = context.createTextMessage(text); + producer.send(topic, message); + System.out.println("Message '"+text+"' sent successfully."); + } + catch (Exception e) { + System.out.println("Message '"+text+"' couldn't be sent: " + e); + } + } +}