10_5_JMS · JavaWebinar/masterjava@838ec71 · GitHub
Skip to content

Commit 838ec71

Browse files
committed
10_5_JMS
1 parent 1c89512 commit 838ec71

8 files changed

Lines changed: 171 additions & 5 deletions

File tree

config_templates/context.xml

Lines changed: 14 additions & 0 deletions

parent-web/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
<properties>
2020
<maven.resources.overwrite>true</maven.resources.overwrite>
21+
<activemq.version>5.15.2</activemq.version>
2122
</properties>
2223

2324
<build>

services/mail-service/pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,5 +99,12 @@
9999
<artifactId>jersey-bean-validation</artifactId>
100100
<version>${jersey.version}</version>
101101
</dependency>
102+
103+
<dependency>
104+
<groupId>org.apache.activemq</groupId>
105+
<artifactId>activemq-all</artifactId>
106+
<version>${activemq.version}</version>
107+
<scope>provided</scope>
108+
</dependency>
102109
</dependencies>
103110
</project>
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package ru.javaops.masterjava.service.mail.listeners;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
5+
import javax.jms.*;
6+
import javax.naming.InitialContext;
7+
import javax.servlet.ServletContextEvent;
8+
import javax.servlet.ServletContextListener;
9+
import javax.servlet.annotation.WebListener;
10+
11+
@WebListener
12+
@Slf4j
13+
public class JmsMailListener implements ServletContextListener {
14+
private Thread listenerThread = null;
15+
private QueueConnection connection;
16+
17+
@Override
18+
public void contextInitialized(ServletContextEvent sce) {
19+
try {
20+
InitialContext initCtx = new InitialContext();
21+
QueueConnectionFactory connectionFactory =
22+
(QueueConnectionFactory) initCtx.lookup("java:comp/env/jms/ConnectionFactory");
23+
connection = connectionFactory.createQueueConnection();
24+
QueueSession queueSession = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
25+
Queue queue = (Queue) initCtx.lookup("java:comp/env/jms/queue/MailQueue");
26+
QueueReceiver receiver = queueSession.createReceiver(queue);
27+
connection.start();
28+
log.info("Listen JMS messages ...");
29+
listenerThread = new Thread(() -> {
30+
try {
31+
while (!Thread.interrupted()) {
32+
Message m = receiver.receive();
33+
// TODO implement mail sending
34+
if (m instanceof TextMessage) {
35+
TextMessage tm = (TextMessage) m;
36+
String text = tm.getText();
37+
log.info("Received TextMessage with text '{}'", text);
38+
}
39+
}
40+
} catch (Exception e) {
41+
log.error("Receiving messages failed: " + e.getMessage(), e);
42+
}
43+
});
44+
listenerThread.start();
45+
} catch (Exception e) {
46+
log.error("JMS failed: " + e.getMessage(), e);
47+
}
48+
}
49+
50+
@Override
51+
public void contextDestroyed(ServletContextEvent sce) {
52+
if (connection != null) {
53+
try {
54+
connection.close();
55+
} catch (JMSException ex) {
56+
log.warn("Couldn't close JMSConnection: ", ex);
57+
}
58+
}
59+
if (listenerThread != null) {
60+
listenerThread.interrupt();
61+
}
62+
}
63+
}

web/webapp/pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,12 @@
3131
<artifactId>mail-api</artifactId>
3232
<version>${project.version}</version>
3333
</dependency>
34+
35+
<dependency>
36+
<groupId>org.apache.activemq</groupId>
37+
<artifactId>activemq-client</artifactId>
38+
<scope>provided</scope>
39+
<version>${activemq.version}</version>
40+
</dependency>
3441
</dependencies>
3542
</project>
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package ru.javaops.masterjava.webapp;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
5+
import javax.jms.*;
6+
import javax.naming.InitialContext;
7+
import javax.servlet.ServletConfig;
8+
import javax.servlet.ServletException;
9+
import javax.servlet.annotation.WebServlet;
10+
import javax.servlet.http.HttpServlet;
11+
import javax.servlet.http.HttpServletRequest;
12+
import javax.servlet.http.HttpServletResponse;
13+
import java.io.IOException;
14+
import java.lang.IllegalStateException;
15+
16+
@WebServlet("/sendJms")
17+
@Slf4j
18+
public class JmsSendServlet extends HttpServlet {
19+
private Connection connection;
20+
private Session session;
21+
private MessageProducer producer;
22+
23+
@Override
24+
public void init(ServletConfig config) throws ServletException {
25+
super.init(config);
26+
try {
27+
InitialContext initCtx = new InitialContext();
28+
ConnectionFactory connectionFactory = (ConnectionFactory) initCtx.lookup("java:comp/env/jms/ConnectionFactory");
29+
connection = connectionFactory.createConnection();
30+
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
31+
producer = session.createProducer((Destination) initCtx.lookup("java:comp/env/jms/queue/MailQueue"));
32+
} catch (Exception e) {
33+
throw new IllegalStateException("JMS init failed", e);
34+
}
35+
}
36+
37+
@Override
38+
public void destroy() {
39+
if (connection != null) {
40+
try {
41+
connection.close();
42+
} catch (JMSException ex) {
43+
log.warn("Couldn't close JMSConnection: ", ex);
44+
}
45+
}
46+
}
47+
48+
@Override
49+
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
50+
String result;
51+
try {
52+
log.info("Start sending");
53+
req.setCharacterEncoding("UTF-8");
54+
resp.setCharacterEncoding("UTF-8");
55+
String users = req.getParameter("users");
56+
String subject = req.getParameter("subject");
57+
String body = req.getParameter("body");
58+
result = sendJms(users, subject, body);
59+
log.info("Processing finished with result: {}", result);
60+
} catch (Exception e) {
61+
log.error("Processing failed", e);
62+
result = e.toString();
63+
}
64+
resp.getWriter().write(result);
65+
}
66+
67+
private synchronized String sendJms(String users, String subject, String body) throws JMSException {
68+
TextMessage testMessage = session.createTextMessage();
69+
testMessage.setText(subject);
70+
producer.send(testMessage);
71+
return "Successfully sent JMS message";
72+
}
73+
}

web/webapp/src/main/java/ru/javaops/masterjava/webapp/SendServlet.java renamed to web/webapp/src/main/java/ru/javaops/masterjava/webapp/SoapSendServlet.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
import javax.servlet.http.Part;
1616
import java.io.IOException;
1717

18-
@WebServlet("/send")
18+
@WebServlet("/sendSoap")
1919
@Slf4j
2020
@MultipartConfig
21-
public class SendServlet extends HttpServlet {
21+
public class SoapSendServlet extends HttpServlet {
2222
@Override
2323
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
2424
String result;

web/webapp/src/main/webapp/WEB-INF/templates/users.html

Lines changed: 4 additions & 3 deletions

0 commit comments

Comments
 (0)