2. запуск
Проблема в том, что в зависимостях отсутствует необходимая библиотека для Jakarta Naming. Давайте обновим pom.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>jms-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jakarta.jakartaee-api.version>10.0.0</jakarta.jakartaee-api.version>
<wildfly.version>27.0.0.Final</wildfly.version>
</properties>
<dependencies>
<!-- Jakarta EE API -->
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-api</artifactId>
<version>${jakarta.jakartaee-api.version}</version>
<scope>provided</scope>
</dependency>
<!-- JMS API -->
<dependency>
<groupId>jakarta.jms</groupId>
<artifactId>jakarta.jms-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- WildFly Remote Client -->
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-client-all</artifactId>
<version>${wildfly.version}</version>
</dependency>
<!-- Jakarta Naming и JNDI -->
<dependency>
<groupId>jakarta.naming</groupId>
<artifactId>jakarta.naming-api</artifactId>
<version>2.0.1</version>
</dependency>
</dependencies>
<build>
<finalName>jms-demo</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Ключевые изменения:
1. Добавлена зависимость jakarta.naming-api
2. Добавлена зависимость wildfly-client-all
3. Обновлены версии плагинов
Также обновим JMSStandaloneClient.java
:
package com.example.jms;
import jakarta.jms.*;
import jakarta.naming.Context;
import jakarta.naming.InitialContext;
import java.util.Properties;
public class JMSStandaloneClient {
public static void main(String[] args) {
try {
// Настройка подключения к WildFly
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY,
"org.wildfly.naming.client.WildFlyInitialContextFactory");
props.put(Context.PROVIDER_URL, "remote+http://localhost:8080");
props.put(Context.SECURITY_PRINCIPAL, "admin"); // Логин
props.put(Context.SECURITY_CREDENTIALS, "password"); // Пароль
// Создание контекста
try (Context context = new InitialContext(props)) {
// Получение фабрики подключений и очереди
ConnectionFactory connectionFactory =
(ConnectionFactory) context.lookup("java:/ConnectionFactory");
Queue queue = (Queue) context.lookup("java:/jms/queue/ExampleQueue");
// Создание соединения
try (Connection connection = connectionFactory.createConnection()) {
connection.start();
// Создание сессии
try (Session session = connection.createSession(
false, Session.AUTO_ACKNOWLEDGE)) {
// Создание получателя сообщений
MessageConsumer consumer = session.createConsumer(queue);
// Получение сообщения с таймаутом
Message message = consumer.receive(5000);
if (message instanceof TextMessage textMessage) {
System.out.println("Получено сообщение: " +
textMessage.getText());
} else {
System.out.println("Сообщений нет");
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Дополнительные настройки WildFly
- Создайте пользователя в WildFly:
# В директории WildFly
./bin/add-user.sh
- Выберите Management User
-
Введите логин и пароль
-
Настройте подключение:
# В standalone-full.xml
<subsystem xmlns="urn:jboss:domain:remoting:6.0">
<endpoint/>
<http-connector name="http-remoting-connector"
connector-ref="default"
security-realm="ManagementRealm"/>
</subsystem>
Порядок действий
- Обновите
pom.xml
- Обновите
JMSStandaloneClient.java
- Пересоберите проект:
mvn clean package
- Запустите WildFly
- Разверните приложение
- Отправьте сообщение через веб-интерфейс
- Запустите standalone-клиент
Вопросы?