diff --git a/docker-compose.test.yml b/docker-compose.test.yml
index c2d587df4489a93e0573e97b4063ffbd231466f2..9b67254a36d0a04504b54141f62f5109282518ab 100644
--- a/docker-compose.test.yml
+++ b/docker-compose.test.yml
@@ -11,6 +11,7 @@ services:
     container_name: 'test_corporate_builder2'
     depends_on:
       - test_db
+      - test_mbroker
     working_dir: '/app'
     volumes:
       - .:/app
@@ -27,4 +28,12 @@ services:
     networks:
       test_corporate_network:
         aliases:
-          - corporate_db2
\ No newline at end of file
+          - corporate_db2
+
+  test_mbroker:
+    image: 'rmohr/activemq:5.15.9'
+    container_name: 'test_corporate_broker2'
+    networks:
+      test_corporate_network:
+        aliases:
+          - actvemq
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index 09eba51bf484cfc2417414989601d199d170c9c5..d2affb6d3d1e88d5e3afdddd9e94172a3d2eef48 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,5 +1,7 @@
 version: '3.7'
-
+networks:
+  corporate_app2_prod_net:
+    name: 'ca2pd'
 services:
 
   boot:
@@ -12,9 +14,10 @@ services:
     depends_on:
       - db
     working_dir: '/app'
+    networks:
+      - corporate_app2_prod_net
     volumes:
       - .:/app
-      - m2:/root/.m2
     command: >
       bash -c "/./wait-for-it.sh corporate_db2:5432 -- \
                mvn clean spring-boot:run"
@@ -31,6 +34,8 @@ services:
     image: 'postgres:10-alpine'
     container_name: 'corporate_db2'
     restart: always
+    networks:
+      - corporate_app2_prod_net
     environment:
       POSTGRES_DB: cinema
       POSTGRES_USER: postgres
@@ -40,6 +45,21 @@ services:
     volumes:
       - db_data:/var/lib/postgresql/data
 
+  mbroker:
+    image: 'rmohr/activemq:5.15.9'
+    container_name: 'corporate_broker2'
+    networks:
+      corporate_app2_prod_net:
+        aliases:
+          - actvemq
+    volumes:
+      - active_mq_data:/opt/activemq/data
+      - active_mq_conf:/opt/activemq/conf
+    ports:
+      - 8161:8161
+
 volumes:
   m2:
-  db_data:
\ No newline at end of file
+  db_data:
+  active_mq_data:
+  active_mq_conf:
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 46dd59469a2d448aa4bd8878f619a921ed2d1309..02841372dcc2e8b2e44720c7289a1826089d74f9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,6 +32,22 @@
             <groupId>org.postgresql</groupId>
             <artifactId>postgresql</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-jms</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-mail</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-activemq</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.activemq</groupId>
+            <artifactId>activemq-broker</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/CorporateApp2Application.kt b/src/main/kotlin/com/s3ai/corporate_app2/CorporateApp2Application.kt
index feef50de9919ca0ca70044ac405dc7c9a1bc1589..151fdcb95dfbfbd0da685dd500e733cc86de2088 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/CorporateApp2Application.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/CorporateApp2Application.kt
@@ -2,8 +2,11 @@ package com.s3ai.corporate_app2
 
 import org.springframework.boot.autoconfigure.SpringBootApplication
 import org.springframework.boot.runApplication
+import org.springframework.jms.annotation.EnableJms
+
 
 @SpringBootApplication
+@EnableJms
 class CorporateApp2Application
 
 fun main(args: Array<String>) {
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/CinemasController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/CinemasController.kt
index 7d6f4a938ff4621c66f54926ffab3b310bb9d2b4..4c78ce5f68b1db0ceb85b7957e80c711eb257534 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/CinemasController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/CinemasController.kt
@@ -2,6 +2,7 @@ package com.s3ai.corporate_app2.controllers
 
 import com.s3ai.corporate_app2.Cinema
 import com.s3ai.corporate_app2.CinemaService
+import com.s3ai.corporate_app2.jms.JMSPublisher
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Controller
 import org.springframework.ui.Model
@@ -16,6 +17,9 @@ class CinemasController {
     @Autowired
     lateinit var cinemaService: CinemaService
 
+    @Autowired
+    lateinit var publisher: JMSPublisher
+
     @GetMapping("/list")
     fun getCinemasBrowsePage(model: Model): String? {
         model.addAttribute("cinemas", cinemaService.findAll())
@@ -27,7 +31,6 @@ class CinemasController {
         val cinema: Cinema?
         if (id.isEmpty()) {
             cinema = Cinema()
-            cinema.id = randomUUID()
             model.addAttribute("action", "Create")
         } else {
             cinema = cinemaService.findById(fromString(id))
@@ -39,7 +42,7 @@ class CinemasController {
 
     @PostMapping("/update")
     fun updateCinema(@ModelAttribute cinema: Cinema): RedirectView {
-        cinemaService.save(cinema)
+        updateItem(cinemaService, cinema, cinema.id, publisher)
         return RedirectView("/cinemas/list")
     }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/TicketsController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/TicketsController.kt
index 389362562e7f362a0ef9f33609ad32d32ce0fcd4..234a961403183f206e7f80bd6fdda05e2be15d55 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/TicketsController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/TicketsController.kt
@@ -4,6 +4,7 @@ import com.s3ai.corporate_app2.CinemaService
 import com.s3ai.corporate_app2.Ticket
 import com.s3ai.corporate_app2.TicketService
 import com.s3ai.corporate_app2.UserService
+import com.s3ai.corporate_app2.jms.JMSPublisher
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Controller
 import org.springframework.ui.Model
@@ -20,6 +21,8 @@ class TicketsController {
     lateinit var userService: UserService
     @Autowired
     lateinit var cinemaService: CinemaService
+    @Autowired
+    lateinit var publisher: JMSPublisher
 
     @GetMapping("/list")
     fun getTicketsBrowsePage(model: Model): String? {
@@ -32,7 +35,6 @@ class TicketsController {
         val ticket: Ticket?
         if (id.isEmpty()) {
             ticket = Ticket()
-            ticket.id = UUID.randomUUID()
             model.addAttribute("action", "Create")
         } else {
             ticket = ticketService.findById(UUID.fromString(id))
@@ -46,7 +48,7 @@ class TicketsController {
 
     @PostMapping("/update")
     fun updateTicket(@ModelAttribute ticket: Ticket): RedirectView {
-        ticketService.save(ticket)
+        updateItem(ticketService, ticket, ticket.id, publisher)
         return RedirectView("/tickets/list")
     }
 
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/UsersController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/UsersController.kt
index 54179542bdaaead96f607c570c8f7046bb4dc781..4ba236218ab05b14fa8da59205c96a8fbbc394a4 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/UsersController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/UsersController.kt
@@ -2,6 +2,7 @@ package com.s3ai.corporate_app2.controllers
 
 import com.s3ai.corporate_app2.User
 import com.s3ai.corporate_app2.UserService
+import com.s3ai.corporate_app2.jms.JMSPublisher
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Controller
 import org.springframework.ui.Model
@@ -15,6 +16,9 @@ class UsersController {
     @Autowired
     lateinit var userService: UserService
 
+    @Autowired
+    lateinit var publisher: JMSPublisher
+
     @GetMapping("/list")
     fun getUsersBrowsePage(model: Model): String? {
         model.addAttribute("users", userService.findAll())
@@ -38,7 +42,7 @@ class UsersController {
 
     @PostMapping("/update")
     fun updateUser(@ModelAttribute user: User): RedirectView {
-        userService.save(user)
+        updateItem(userService, user, user.id, publisher)
         return RedirectView("/users/list")
     }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/controllerUtils.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/controllerUtils.kt
index 1ae2e7b11f4484631bbdb02307aaec482838d2f5..a57aa21550abcbf133dce7a352f78100cf1783d5 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/controllerUtils.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/controllerUtils.kt
@@ -2,6 +2,9 @@ package com.s3ai.corporate_app2.controllers
 
 import com.fasterxml.jackson.dataformat.xml.XmlMapper
 import com.s3ai.corporate_app2.CinemaServices
+import com.s3ai.corporate_app2.jms.JMSPublisher
+import com.s3ai.corporate_app2.jms.persistance.JMSAction
+import com.s3ai.corporate_app2.jms.persistance.JMSEntityAction
 import org.springframework.util.ResourceUtils
 import java.io.StringReader
 import java.io.StringWriter
@@ -11,16 +14,25 @@ import javax.xml.transform.TransformerFactory
 import javax.xml.transform.stream.StreamResult
 import javax.xml.transform.stream.StreamSource
 
+fun publishMessage(publisher: JMSPublisher, entity: String, actionJMS: JMSEntityAction, description: String) {
+    val jmsAction = JMSAction()
+    jmsAction.entity = entity
+    jmsAction.actionJMS = actionJMS
+    jmsAction.actionDescription = description
+    publisher.publish(jmsAction)
+}
 
-fun <T> deleteInstance(id: String, instanceName: String, jpaService: CinemaServices<T>, response: HttpServletResponse): String? {
+fun <T> deleteInstance(id: String, jpaService: CinemaServices<T>, response: HttpServletResponse, publisher: JMSPublisher): String? {
     var responseString: String? = null
     try {
         val itemId = UUID.fromString(id)
-        val user = jpaService.findById(itemId)
-        if (null != user) jpaService.delete(user)
-        else {
+        val item = jpaService.findById(itemId)
+        if (null != item) {
+            jpaService.delete(item)
+            publishMessage(publisher, jpaService.itemName(), JMSEntityAction.DELETE, "Deleted object: $item")
+        } else {
             response.status = HttpServletResponse.SC_NOT_FOUND
-            responseString = "$instanceName was not Found"
+            responseString = "${jpaService.itemName()} was not Found"
         }
     } catch (e: IllegalArgumentException) {
         response.status = HttpServletResponse.SC_BAD_REQUEST
@@ -29,14 +41,33 @@ fun <T> deleteInstance(id: String, instanceName: String, jpaService: CinemaServi
     return responseString
 }
 
-fun <T> getInstance(id: UUID, jpaService: CinemaServices<T>, response: HttpServletResponse): T? {
+fun <T : Any> getInstance(id: UUID, jpaService: CinemaServices<T>, response: HttpServletResponse, publisher: JMSPublisher): T? {
     val item = jpaService.findById(id)
-    if (null != item) return item
-    else response.status = HttpServletResponse.SC_NOT_FOUND
+    publishMessage(publisher, jpaService.itemName(), JMSEntityAction.QUERY, "Queried object with id: $id, Found: $item")
+    if (null != item) {
+        return item
+    } else response.status = HttpServletResponse.SC_NOT_FOUND
     return null
 }
 
-fun XMLTransform(item: Any, resource_name: String): String {
+fun <T : Any> getAllItems(jpaService: CinemaServices<T>, publisher: JMSPublisher): MutableList<T> {
+    val items = jpaService.findAll()
+    publishMessage(publisher, jpaService.itemName(), JMSEntityAction.QUERY, "Queried all items, found ${items.size}.")
+    return items
+}
+
+fun <T : Any> updateItem(jpaService: CinemaServices<T>, item: T, item_id: UUID?, publisher: JMSPublisher) {
+    var action = JMSEntityAction.UPDATE
+    var description = "Item id: $item_id."
+    val updatedItem = jpaService.save(item)
+    if (null == item_id) {
+        action = JMSEntityAction.CREATE
+        description = "New item data: $updatedItem"
+    }
+    publishMessage(publisher, jpaService.itemName(), action, description)
+}
+
+fun xsltTransform(item: Any, resource_name: String): String {
     val xmlMapper = XmlMapper()
     val xslt = StreamSource(ResourceUtils.getFile("classpath:xslt/$resource_name"))
     val xml = StreamSource(StringReader(xmlMapper.writeValueAsString(item)))
@@ -44,13 +75,4 @@ fun XMLTransform(item: Any, resource_name: String): String {
     val sw = StringWriter()
     transformer.transform(xml, StreamResult(sw))
     return sw.toString()
-}
-
-fun <T> getXSLTransformedInstance(id: UUID, jpaService: CinemaServices<T>, resource_name: String, response: HttpServletResponse): String {
-    val item = jpaService.findById(id)
-    if (null == item) response.status = HttpServletResponse.SC_NOT_FOUND
-    else {
-        return XMLTransform(item, resource_name)
-    }
-    return ""
-}
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/CinemaApiController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/CinemaApiController.kt
index b734aa12a01e7d566a5d02fcbb8693177abef7b1..a679374c9834c6eacf36c445c2b71c105e49b619 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/CinemaApiController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/CinemaApiController.kt
@@ -3,6 +3,7 @@ package com.s3ai.corporate_app2.controllers.rest
 import com.s3ai.corporate_app2.Cinema
 import com.s3ai.corporate_app2.CinemaService
 import com.s3ai.corporate_app2.controllers.deleteInstance
+import com.s3ai.corporate_app2.jms.JMSPublisher
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.web.bind.annotation.*
 import java.util.*
@@ -15,6 +16,9 @@ class CinemaApiController {
     @Autowired
     lateinit var cinemaService: CinemaService
 
+    @Autowired
+    lateinit var publisher: JMSPublisher
+
     @GetMapping("/fill")
     fun fillCinemas(): String? {
         val locations: List<String> = listOf("Samara", "Izhevsk", "NeoTokyo", "Bangladesh", "Moscow", "Grozny");
@@ -34,7 +38,7 @@ class CinemaApiController {
 
     @DeleteMapping("/delete")
     fun deleteCinema(@RequestParam(name = "id", required = true) id: String, response: HttpServletResponse): String? {
-        return deleteInstance(id, "Cinema", cinemaService, response)
+        return deleteInstance(id, cinemaService, response, publisher)
     }
 
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/SubscriptionApiController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/SubscriptionApiController.kt
new file mode 100644
index 0000000000000000000000000000000000000000..10d5cccb43ba1aa843092f9130d387af98582432
--- /dev/null
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/SubscriptionApiController.kt
@@ -0,0 +1,30 @@
+package com.s3ai.corporate_app2.controllers.rest
+
+import com.s3ai.corporate_app2.jms.JMSPublisher
+import com.s3ai.corporate_app2.jms.persistance.SubscribersRepository
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.web.bind.annotation.DeleteMapping
+import org.springframework.web.bind.annotation.RequestParam
+import org.springframework.web.bind.annotation.RestController
+import javax.servlet.http.HttpServletResponse
+
+@RestController
+class SubscriptionApiController {
+
+    @Autowired
+    lateinit var service: SubscribersRepository
+
+    @Autowired
+    lateinit var publisher: JMSPublisher
+
+    @DeleteMapping("/delete")
+    fun deleteTicket(@RequestParam(name = "id", required = true) id: Long, response: HttpServletResponse): String {
+        val item = service.findById(id).orElse(null)
+        if (null != item) {
+            service.delete(item)
+            return "Deleted"
+        }
+        response.status = HttpServletResponse.SC_NOT_FOUND
+        return "Subscriber cannot be found"
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/TicketApiController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/TicketApiController.kt
index d7b371151653b0989cb5c912c2e866a67b9d37a4..6de73ce6ee8c794673faa0be57b245872c870425 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/TicketApiController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/TicketApiController.kt
@@ -5,6 +5,7 @@ import com.s3ai.corporate_app2.Ticket
 import com.s3ai.corporate_app2.TicketService
 import com.s3ai.corporate_app2.UserService
 import com.s3ai.corporate_app2.controllers.deleteInstance
+import com.s3ai.corporate_app2.jms.JMSPublisher
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.web.bind.annotation.*
 import java.util.*
@@ -15,11 +16,16 @@ import javax.servlet.http.HttpServletResponse
 class TicketApiController {
     @Autowired
     lateinit var userService: UserService
+
     @Autowired
     lateinit var ticketService: TicketService
+
     @Autowired
     lateinit var cinemaService: CinemaService
 
+    @Autowired
+    lateinit var publisher: JMSPublisher
+
     @GetMapping("/fill")
     fun fillTickets(): String? {
         val wordsFirst = arrayOf("Pirates", "Ladies", "Goblins", "Gangsters", "Programmers", "Hackers", "Wrestlers", "Animals", "Guardians")
@@ -44,7 +50,7 @@ class TicketApiController {
 
     @DeleteMapping("/delete")
     fun deleteTicket(@RequestParam(name = "id", required = true) id: String, response: HttpServletResponse): String? {
-        return deleteInstance(id, "Ticket", ticketService, response)
+        return deleteInstance(id, ticketService, response, publisher)
     }
 
 }
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/UserApiController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/UserApiController.kt
index b9a0a8ca1612c25436ca6f78f8441506a585c79e..193396cb30d3d7f6645b849bbe15b576ec3ee871 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/UserApiController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/UserApiController.kt
@@ -3,6 +3,7 @@ package com.s3ai.corporate_app2.controllers.rest;
 import com.s3ai.corporate_app2.User
 import com.s3ai.corporate_app2.UserService
 import com.s3ai.corporate_app2.controllers.deleteInstance
+import com.s3ai.corporate_app2.jms.JMSPublisher
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.web.bind.annotation.*
 import java.util.*
@@ -12,9 +13,13 @@ import kotlin.random.Random
 @RestController
 @RequestMapping("/api/users")
 class UserApiController {
+
     @Autowired
     lateinit var userService: UserService
 
+    @Autowired
+    lateinit var publisher: JMSPublisher
+
     @GetMapping("/fill")
     fun fillCinemas(): String? {
         val names = arrayOf("Jane", "Mary", "Paul", "Jason", "Keanu", "Andrew", "Joseph", "Jotaro", "Ivan", "Jolyne", "Walther");
@@ -25,7 +30,8 @@ class UserApiController {
             user.id = UUID.randomUUID();
             user.name = "${names.random()} ${surnames.random()}";
             generatedNames.add(user.name.toString())
-            user.age = Random.nextInt(15, 70);
+            user.age = Random.nextInt(15, 70)
+
             userService.save(user);
         }
         return generatedNames.toString()
@@ -33,6 +39,6 @@ class UserApiController {
 
     @DeleteMapping("/delete")
     fun deleteUser(@RequestParam(name = "id", required = true) id: String, response: HttpServletResponse): String? {
-        return deleteInstance(id, "User", userService, response)
+        return deleteInstance(id, userService, response, publisher)
     }
 }
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/json/CinemasJsonController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/json/CinemasJsonController.kt
index 033ea39a4dc654989dd0656349f037526162a3c1..6cd1a4959c9e088f9fe85495ea532e83d70a219d 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/json/CinemasJsonController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/json/CinemasJsonController.kt
@@ -2,7 +2,9 @@ package com.s3ai.corporate_app2.controllers.rest.json
 
 import com.s3ai.corporate_app2.Cinema
 import com.s3ai.corporate_app2.CinemaService
+import com.s3ai.corporate_app2.controllers.getAllItems
 import com.s3ai.corporate_app2.controllers.getInstance
+import com.s3ai.corporate_app2.jms.JMSPublisher
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.MediaType
 import org.springframework.web.bind.annotation.GetMapping
@@ -18,14 +20,17 @@ class CinemasJsonController {
     @Autowired
     lateinit var cinemaService: CinemaService
 
+    @Autowired
+    lateinit var publisher: JMSPublisher
+
     @GetMapping("/all", produces = [MediaType.APPLICATION_JSON_VALUE])
     fun getCinemas(response: HttpServletResponse): MutableList<Cinema> {
-        return cinemaService.findAll()
+        return getAllItems(cinemaService, publisher)
     }
 
     @GetMapping("/item/{id}", produces = [MediaType.APPLICATION_JSON_VALUE])
     fun getCinema(@PathVariable id: UUID, response: HttpServletResponse): Cinema? {
-        return getInstance(id, cinemaService, response)
+        return getInstance(id, cinemaService, response, publisher)
     }
 
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/json/TicketsJsonController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/json/TicketsJsonController.kt
index 12e7eec1804795371bfe8cd0a22c2b943da871c9..95474bdcaeb0976c7ace981adc14ffcd2c5d34e5 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/json/TicketsJsonController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/json/TicketsJsonController.kt
@@ -2,7 +2,9 @@ package com.s3ai.corporate_app2.controllers.rest.json
 
 import com.s3ai.corporate_app2.Ticket
 import com.s3ai.corporate_app2.TicketService
+import com.s3ai.corporate_app2.controllers.getAllItems
 import com.s3ai.corporate_app2.controllers.getInstance
+import com.s3ai.corporate_app2.jms.JMSPublisher
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.MediaType
 import org.springframework.web.bind.annotation.GetMapping
@@ -18,14 +20,17 @@ class TicketsJsonController {
     @Autowired
     lateinit var ticketService: TicketService
 
+    @Autowired
+    lateinit var publisher: JMSPublisher
+
     @GetMapping("/all", produces = [MediaType.APPLICATION_JSON_VALUE])
     fun getTickets(response: HttpServletResponse): MutableList<Ticket> {
-        return ticketService.findAll()
+        return getAllItems(ticketService, publisher)
     }
 
     @GetMapping("/item/{id}", produces = [MediaType.APPLICATION_JSON_VALUE])
     fun getTicket(@PathVariable id: UUID, response: HttpServletResponse): Ticket? {
-        return getInstance(id, ticketService, response)
+        return getInstance(id, ticketService, response, publisher)
     }
 
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/json/UsersJsonController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/json/UsersJsonController.kt
index 72cb67d4e148604740d5f3d14a4526ca545bf35f..a6d10f556184aefd3a21acd28b65babd746fad1b 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/json/UsersJsonController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/json/UsersJsonController.kt
@@ -2,7 +2,9 @@ package com.s3ai.corporate_app2.controllers.rest.json
 
 import com.s3ai.corporate_app2.User
 import com.s3ai.corporate_app2.UserService
+import com.s3ai.corporate_app2.controllers.getAllItems
 import com.s3ai.corporate_app2.controllers.getInstance
+import com.s3ai.corporate_app2.jms.JMSPublisher
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.MediaType
 import org.springframework.web.bind.annotation.GetMapping
@@ -18,14 +20,17 @@ class UsersJsonController {
     @Autowired
     lateinit var userService: UserService
 
+    @Autowired
+    lateinit var publisher: JMSPublisher
+
     @GetMapping("/all", produces = [MediaType.APPLICATION_JSON_VALUE])
     fun getUsers(response: HttpServletResponse): MutableList<User> {
-        return userService.findAll()
+        return getAllItems(userService, publisher)
     }
 
     @GetMapping("/item/{id}", produces = [MediaType.APPLICATION_JSON_VALUE])
     fun getUser(@PathVariable id: UUID, response: HttpServletResponse): User? {
-        return getInstance(id, userService, response)
+        return getInstance(id, userService, response, publisher)
     }
 
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xml/CinemasXmlController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xml/CinemasXmlController.kt
index c5664290c659e70456f6097df0a31c91e7bef535..295c82cc3a6d1ce712bd1a0634a0e0db42c4c5b9 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xml/CinemasXmlController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xml/CinemasXmlController.kt
@@ -2,7 +2,9 @@ package com.s3ai.corporate_app2.controllers.rest.xml
 
 import com.s3ai.corporate_app2.Cinema
 import com.s3ai.corporate_app2.CinemaService
+import com.s3ai.corporate_app2.controllers.getAllItems
 import com.s3ai.corporate_app2.controllers.getInstance
+import com.s3ai.corporate_app2.jms.JMSPublisher
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.MediaType
 import org.springframework.web.bind.annotation.GetMapping
@@ -18,14 +20,17 @@ class CinemasXmlController {
     @Autowired
     lateinit var cinemaService: CinemaService
 
+    @Autowired
+    lateinit var publisher: JMSPublisher
+
     @GetMapping("/all", produces = [MediaType.APPLICATION_XML_VALUE])
     fun getCinemas(response: HttpServletResponse): MutableList<Cinema> {
-        return cinemaService.findAll()
+        return getAllItems(cinemaService, publisher)
     }
 
     @GetMapping("/item/{id}", produces = [MediaType.APPLICATION_XML_VALUE])
     fun getCinema(@PathVariable id: UUID, response: HttpServletResponse): Cinema? {
-        return getInstance(id, cinemaService, response)
+        return getInstance(id, cinemaService, response, publisher)
     }
 
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xml/TicketsXmlController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xml/TicketsXmlController.kt
index ddd5b7910103e9e6c005a47f3d4551ea08fd8c7f..4648abedae86ecea36b5d1d34a4b107c78516afb 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xml/TicketsXmlController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xml/TicketsXmlController.kt
@@ -2,7 +2,9 @@ package com.s3ai.corporate_app2.controllers.rest.xml
 
 import com.s3ai.corporate_app2.Ticket
 import com.s3ai.corporate_app2.TicketService
+import com.s3ai.corporate_app2.controllers.getAllItems
 import com.s3ai.corporate_app2.controllers.getInstance
+import com.s3ai.corporate_app2.jms.JMSPublisher
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.MediaType
 import org.springframework.web.bind.annotation.GetMapping
@@ -18,13 +20,16 @@ class TicketsXmlController {
     @Autowired
     lateinit var ticketService: TicketService
 
+    @Autowired
+    lateinit var publisher: JMSPublisher
+
     @GetMapping("/all", produces = [MediaType.APPLICATION_XML_VALUE])
     fun getTickets(response: HttpServletResponse): MutableList<Ticket> {
-        return ticketService.findAll()
+        return getAllItems(ticketService, publisher)
     }
 
     @GetMapping("/item/{id}", produces = [MediaType.APPLICATION_XML_VALUE])
     fun getTicket(@PathVariable id: UUID, response: HttpServletResponse): Ticket? {
-        return getInstance(id, ticketService, response)
+        return getInstance(id, ticketService, response, publisher)
     }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xml/UsersXmlController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xml/UsersXmlController.kt
index 4de521bf1ec6d54200eb2d943ab6d8b1082d3bc9..cb633d5bad351b0bb80098e838b866d942f6ed5f 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xml/UsersXmlController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xml/UsersXmlController.kt
@@ -2,7 +2,9 @@ package com.s3ai.corporate_app2.controllers.rest.xml
 
 import com.s3ai.corporate_app2.User
 import com.s3ai.corporate_app2.UserService
+import com.s3ai.corporate_app2.controllers.getAllItems
 import com.s3ai.corporate_app2.controllers.getInstance
+import com.s3ai.corporate_app2.jms.JMSPublisher
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.MediaType
 import org.springframework.web.bind.annotation.GetMapping
@@ -18,13 +20,16 @@ class UsersXmlController {
     @Autowired
     lateinit var userService: UserService
 
+    @Autowired
+    lateinit var publisher: JMSPublisher
+
     @GetMapping("/all", produces = [MediaType.APPLICATION_XML_VALUE])
     fun getUsers(response: HttpServletResponse): MutableList<User> {
-        return userService.findAll()
+        return getAllItems(userService, publisher)
     }
 
     @GetMapping("/item/{id}", produces = [MediaType.APPLICATION_XML_VALUE])
     fun getUser(@PathVariable id: UUID, response: HttpServletResponse): User? {
-        return getInstance(id, userService, response)
+        return getInstance(id, userService, response, publisher)
     }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xslt/CinemasXsltController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xslt/CinemasXsltController.kt
index 498cd0a4c3c3e7330ee2e3eb1e19bbbf61a68898..c7253791b17443e9dd538894f18ab78b12890eb3 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xslt/CinemasXsltController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xslt/CinemasXsltController.kt
@@ -1,8 +1,10 @@
 package com.s3ai.corporate_app2.controllers.rest.xslt
 
 import com.s3ai.corporate_app2.CinemaService
-import com.s3ai.corporate_app2.controllers.XMLTransform
-import com.s3ai.corporate_app2.controllers.getXSLTransformedInstance
+import com.s3ai.corporate_app2.controllers.xsltTransform
+import com.s3ai.corporate_app2.controllers.getAllItems
+import com.s3ai.corporate_app2.controllers.getInstance
+import com.s3ai.corporate_app2.jms.JMSPublisher
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.MediaType
 import org.springframework.web.bind.annotation.GetMapping
@@ -18,16 +20,23 @@ class CinemasXsltController {
     @Autowired
     lateinit var cinemaService: CinemaService
 
+    @Autowired
+    lateinit var publisher: JMSPublisher
+
     val xsltResourceName: String = "cinema-process.xslt"
 
     @GetMapping("/all", produces = [MediaType.TEXT_HTML_VALUE])
     fun getCinemas(response: HttpServletResponse): String {
-        return XMLTransform(cinemaService.findAll(), xsltResourceName)
+        return xsltTransform(getAllItems(cinemaService, publisher), xsltResourceName)
     }
 
 
     @GetMapping("/item/{id}", produces = [MediaType.TEXT_HTML_VALUE])
     fun getCinema(@PathVariable id: UUID, response: HttpServletResponse): String? {
-        return getXSLTransformedInstance(id, cinemaService, xsltResourceName, response)
+        val item = getInstance(id, cinemaService, response, publisher)
+        if (null != item) {
+            return xsltTransform(item, xsltResourceName)
+        }
+        return ""
     }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xslt/TicketsXsltController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xslt/TicketsXsltController.kt
index 896eca4cfa2307bd44cbbd5248e43eb0414dfc77..698b878de1173e24fa10ceb196b92e18a5b0bfd7 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xslt/TicketsXsltController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xslt/TicketsXsltController.kt
@@ -1,8 +1,10 @@
 package com.s3ai.corporate_app2.controllers.rest.xslt
 
 import com.s3ai.corporate_app2.TicketService
-import com.s3ai.corporate_app2.controllers.XMLTransform
-import com.s3ai.corporate_app2.controllers.getXSLTransformedInstance
+import com.s3ai.corporate_app2.controllers.xsltTransform
+import com.s3ai.corporate_app2.controllers.getAllItems
+import com.s3ai.corporate_app2.controllers.getInstance
+import com.s3ai.corporate_app2.jms.JMSPublisher
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.MediaType
 import org.springframework.web.bind.annotation.GetMapping
@@ -18,16 +20,23 @@ class TicketsXsltController {
     @Autowired
     lateinit var ticketService: TicketService
 
+    @Autowired
+    lateinit var publisher: JMSPublisher
+
     val xsltResourceName: String = "ticket-process.xslt"
 
     @GetMapping("/all", produces = [MediaType.TEXT_HTML_VALUE])
-    fun getCinemas(response: HttpServletResponse): String {
-        return XMLTransform(ticketService.findAll(), xsltResourceName)
+    fun getTickets(response: HttpServletResponse): String {
+        return xsltTransform(getAllItems(ticketService, publisher), xsltResourceName)
     }
 
 
     @GetMapping("/item/{id}", produces = [MediaType.TEXT_HTML_VALUE])
-    fun getCinema(@PathVariable id: UUID, response: HttpServletResponse): String? {
-        return getXSLTransformedInstance(id, ticketService, xsltResourceName, response)
+    fun getTicket(@PathVariable id: UUID, response: HttpServletResponse): String? {
+        val item = getInstance(id, ticketService, response, publisher)
+        if (null != item) {
+            return xsltTransform(item, xsltResourceName)
+        }
+        return ""
     }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xslt/UsersXsltController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xslt/UsersXsltController.kt
index f07ee83001d9f34d50759b285b85bfaac6f733d5..c798bd48b177065a54169a2dd6c0102d111fc233 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xslt/UsersXsltController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/xslt/UsersXsltController.kt
@@ -1,8 +1,10 @@
 package com.s3ai.corporate_app2.controllers.rest.xslt
 
 import com.s3ai.corporate_app2.UserService
-import com.s3ai.corporate_app2.controllers.XMLTransform
-import com.s3ai.corporate_app2.controllers.getXSLTransformedInstance
+import com.s3ai.corporate_app2.controllers.getAllItems
+import com.s3ai.corporate_app2.controllers.getInstance
+import com.s3ai.corporate_app2.controllers.xsltTransform
+import com.s3ai.corporate_app2.jms.JMSPublisher
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.MediaType
 import org.springframework.web.bind.annotation.GetMapping
@@ -18,16 +20,23 @@ class UsersXsltController {
     @Autowired
     lateinit var userService: UserService
 
+    @Autowired
+    lateinit var publisher: JMSPublisher
+
     val xsltResourceName: String = "user-process.xslt"
 
     @GetMapping("/all", produces = [MediaType.TEXT_HTML_VALUE])
-    fun getCinemas(response: HttpServletResponse): String {
-        return XMLTransform(userService.findAll(), xsltResourceName)
+    fun getUsers(response: HttpServletResponse): String {
+        return xsltTransform(getAllItems(userService, publisher), xsltResourceName)
     }
 
 
     @GetMapping("/item/{id}", produces = [MediaType.TEXT_HTML_VALUE])
-    fun getCinema(@PathVariable id: UUID, response: HttpServletResponse): String? {
-        return getXSLTransformedInstance(id, userService, xsltResourceName, response)
+    fun getUser(@PathVariable id: UUID, response: HttpServletResponse): String? {
+        val item = getInstance(id, userService, response, publisher)
+        if (null != item) {
+            return xsltTransform(item, xsltResourceName)
+        }
+        return ""
     }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/entities.kt b/src/main/kotlin/com/s3ai/corporate_app2/entities.kt
index 28ceb6de27ba2516cba897c2e0c56c4c03ca1897..e3f4d8dee784b5ea2c71a427657120d78b4c9981 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/entities.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/entities.kt
@@ -1,8 +1,6 @@
 package com.s3ai.corporate_app2
 
 import com.fasterxml.jackson.annotation.JsonAutoDetect
-import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty
-import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement
 import org.hibernate.annotations.OnDelete
 import org.hibernate.annotations.OnDeleteAction
 import java.util.*
@@ -73,5 +71,4 @@ class Ticket {
     override fun toString(): String {
         return "Ticket{id=$id, user=$user, cinema=$cinema, movie='$movie'}"
     }
-}
-
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/jms/Config.kt b/src/main/kotlin/com/s3ai/corporate_app2/jms/Config.kt
new file mode 100644
index 0000000000000000000000000000000000000000..55e003c54139624724f8ec4f96e279d4d46ad18e
--- /dev/null
+++ b/src/main/kotlin/com/s3ai/corporate_app2/jms/Config.kt
@@ -0,0 +1,29 @@
+package com.s3ai.corporate_app2.jms
+
+import org.apache.activemq.ActiveMQConnectionFactory
+import org.apache.activemq.command.ActiveMQQueue
+import org.springframework.beans.factory.annotation.Value
+import org.springframework.context.annotation.Bean
+import org.springframework.context.annotation.Configuration
+import org.springframework.jms.core.JmsTemplate
+import javax.jms.Queue
+
+@Configuration
+class Config {
+    @Value("\${spring.activemq.broker-url}")
+    lateinit var brokerURL: String
+
+    @Bean
+    fun queue(): Queue = ActiveMQQueue("cinemas.queue")
+
+    @Bean
+    fun connectionFactory(): ActiveMQConnectionFactory {
+        val factory = ActiveMQConnectionFactory()
+        factory.brokerURL = brokerURL
+        return factory
+    }
+
+    @Bean
+    fun jmsTemplate(): JmsTemplate = JmsTemplate(connectionFactory())
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/jms/JMSPublisher.kt b/src/main/kotlin/com/s3ai/corporate_app2/jms/JMSPublisher.kt
new file mode 100644
index 0000000000000000000000000000000000000000..631df1b2bc79efa432a5e63907aac8a4743aa6d8
--- /dev/null
+++ b/src/main/kotlin/com/s3ai/corporate_app2/jms/JMSPublisher.kt
@@ -0,0 +1,25 @@
+package com.s3ai.corporate_app2.jms
+
+import com.fasterxml.jackson.databind.ObjectMapper
+import com.s3ai.corporate_app2.jms.persistance.JMSAction
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.jms.core.JmsTemplate
+import org.springframework.stereotype.Component
+import javax.jms.Queue
+
+@Component
+class JMSPublisher {
+    @Autowired
+    private lateinit var jmsTemplate: JmsTemplate
+
+
+    @Autowired
+    private lateinit var queue: Queue
+
+    private final val mapper: ObjectMapper = ObjectMapper()
+
+    fun publish(message_obj: JMSAction) {
+        val messageText = mapper.writeValueAsString(message_obj)
+        jmsTemplate.convertAndSend(queue, messageText)
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/jms/JmsConsumer.kt b/src/main/kotlin/com/s3ai/corporate_app2/jms/JmsConsumer.kt
new file mode 100644
index 0000000000000000000000000000000000000000..60b567fb744d71259ff9e1cf1cf0f9b1852a96aa
--- /dev/null
+++ b/src/main/kotlin/com/s3ai/corporate_app2/jms/JmsConsumer.kt
@@ -0,0 +1,60 @@
+package com.s3ai.corporate_app2.jms
+
+import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
+import com.fasterxml.jackson.module.kotlin.readValue
+import com.s3ai.corporate_app2.jms.persistance.JMSAction
+import com.s3ai.corporate_app2.jms.persistance.JMSActionService
+import com.s3ai.corporate_app2.jms.persistance.JMSEntityAction
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.beans.factory.annotation.Value
+import org.springframework.jms.annotation.JmsListener
+import org.springframework.mail.javamail.JavaMailSender
+import org.springframework.mail.javamail.MimeMessageHelper
+import org.springframework.messaging.MessagingException
+import org.springframework.stereotype.Component
+
+
+@Component
+class JmsConsumer {
+
+    @Value("\${target.addresses}")
+    private lateinit var targetUsers: Array<String>
+
+    @Value("\${spring.mail.username}")
+    private lateinit var sourceUser: String
+
+    @Autowired
+    private lateinit var service: JMSActionService
+
+    @Autowired
+    private lateinit var sender: JavaMailSender
+
+    private final val mapper = jacksonObjectMapper()
+
+    fun sendEmail(action: JMSAction): Boolean {
+        val message = sender.createMimeMessage()
+        val helper = MimeMessageHelper(message)
+        try {
+            helper.setFrom(sourceUser)
+            helper.setTo(targetUsers)
+            helper.setText("Entity ${action.entity} was ${action.actionJMS.str}. ${action.actionDescription}")
+            helper.setSubject("Cinemas service notification")
+            sender.send(message)
+        } catch (e: MessagingException) {
+            e.printStackTrace()
+            return false
+        }
+        return true
+
+    }
+
+    @JmsListener(destination = "cinemas.queue")
+    fun consume(action_text: String) {
+        val action: JMSAction = mapper.readValue(action_text)
+        println(action.toString())
+        if (action.actionJMS == JMSEntityAction.DELETE) {
+            action.delivered = sendEmail(action)
+        }
+        service.save(action)
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/jms/persistance/entities.kt b/src/main/kotlin/com/s3ai/corporate_app2/jms/persistance/entities.kt
new file mode 100644
index 0000000000000000000000000000000000000000..8e362dbeac18515be3734d13dc3a0b242c7f4e04
--- /dev/null
+++ b/src/main/kotlin/com/s3ai/corporate_app2/jms/persistance/entities.kt
@@ -0,0 +1,67 @@
+package com.s3ai.corporate_app2.jms.persistance
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect
+import java.util.*
+import javax.persistence.*
+
+enum class JMSEntityAction(val str: String) {
+    UPDATE("updated"),
+    QUERY("queried"),
+    CREATE("created"),
+    DELETE("deleted")
+}
+
+@Entity
+@Table(name = "jms_action")
+@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
+class JMSAction {
+    @Id
+    @Column(name = "ID")
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    var id: UUID? = null
+    @Enumerated(EnumType.STRING)
+    @Column(length = 8, name = "action")
+    lateinit var actionJMS: JMSEntityAction
+    @Column(name = "entity")
+    lateinit var entity: String
+    @Column(name = "description")
+    lateinit var actionDescription: String
+    @Column(name = "delivered")
+    var delivered: Boolean = true
+
+    override fun toString(): String {
+        return "JMSAction{id=$id, action=$actionJMS, entity='$entity', actionDescription='$actionDescription'}"
+    }
+}
+
+@Entity
+@Table(name = "subscriber")
+class Subscriber {
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    var id: Long? = null
+
+    @Column(name = "email")
+    lateinit var email: String
+
+    @ManyToMany
+    @JoinTable(name = "sub_type_mapping",
+            joinColumns = [JoinColumn(name = "subscriber_id", referencedColumnName = "id")],
+            inverseJoinColumns = [JoinColumn(name = "subscription_type_id", referencedColumnName = "id")])
+    var types: List<SubscriptionType> = mutableListOf()
+}
+
+@Entity
+@Table(name = "subscription_type")
+class SubscriptionType {
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    var id: Long? = null
+
+    @Enumerated(EnumType.STRING)
+    @Column(length = 8, name = "type")
+    lateinit var type: JMSEntityAction
+
+    @ManyToMany(mappedBy = "types")
+    var subscribers: List<Subscriber> = mutableListOf()
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/jms/persistance/repositories.kt b/src/main/kotlin/com/s3ai/corporate_app2/jms/persistance/repositories.kt
new file mode 100644
index 0000000000000000000000000000000000000000..2117af34fd36e5d2467e2e00bb889f3e351f227b
--- /dev/null
+++ b/src/main/kotlin/com/s3ai/corporate_app2/jms/persistance/repositories.kt
@@ -0,0 +1,24 @@
+package com.s3ai.corporate_app2.jms.persistance
+
+import org.springframework.data.jpa.repository.JpaRepository
+import org.springframework.data.jpa.repository.Query
+import org.springframework.data.repository.query.Param
+import org.springframework.stereotype.Repository
+import java.util.*
+
+@Repository
+interface JMSActionRepository : JpaRepository<JMSAction, UUID> {
+    @Query(value = "SELECT * FROM public.jms_action WHERE delivered = FALSE", nativeQuery = true)
+    fun findUndelivered(): MutableList<JMSAction>
+}
+
+@Repository
+interface SubscribersRepository : JpaRepository<Subscriber, Long> {
+
+}
+
+@Repository
+interface SubscriptionTypeRepository : JpaRepository<SubscriptionType, Long> {
+    @Query("FROM SubscriptionType WHERE type = :type")
+    fun selectByType(@Param("type") type: JMSEntityAction): List<SubscriptionType>
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/jms/persistance/services.kt b/src/main/kotlin/com/s3ai/corporate_app2/jms/persistance/services.kt
new file mode 100644
index 0000000000000000000000000000000000000000..7683ad43dd0153f465bfd875fab8d3beaebfe44b
--- /dev/null
+++ b/src/main/kotlin/com/s3ai/corporate_app2/jms/persistance/services.kt
@@ -0,0 +1,9 @@
+package com.s3ai.corporate_app2.jms.persistance
+
+import org.springframework.stereotype.Service
+
+@Service
+class JMSActionService(private val jmsActionRepository: JMSActionRepository) {
+    fun save(item: JMSAction): JMSAction = jmsActionRepository.save(item)
+}
+
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/repositories.kt b/src/main/kotlin/com/s3ai/corporate_app2/repositories.kt
index 6077d0af27e30232e62504301f20b3cf4d1769ac..3eed32fda03c68a06b4a0df1d5d079b440b13d55 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/repositories.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/repositories.kt
@@ -1,6 +1,7 @@
 package com.s3ai.corporate_app2
 
 import org.springframework.data.jpa.repository.JpaRepository
+import org.springframework.data.jpa.repository.Query
 import org.springframework.stereotype.Repository
 import java.util.*
 
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/services.kt b/src/main/kotlin/com/s3ai/corporate_app2/services.kt
index 51cf0fbcd93065f44c259907c8861916d8f35ad9..0f51ab0ed7745a51432beed02dce246764129433 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/services.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/services.kt
@@ -1,5 +1,6 @@
 package com.s3ai.corporate_app2
 
+import org.springframework.data.jpa.repository.Query
 import org.springframework.stereotype.Service
 import java.util.*
 
@@ -9,6 +10,7 @@ interface CinemaServices<T> {
     fun findById(id: UUID): T?
     fun save(item: T): T
     fun delete(item: T)
+    fun itemName(): String
 }
 
 @Service
@@ -17,6 +19,7 @@ class CinemaService(private val cinemaRepository: CinemaRepository) : CinemaServ
     override fun findById(id: UUID): Cinema? = cinemaRepository.findById(id).orElse(null)
     override fun save(item: Cinema): Cinema = cinemaRepository.save(item)
     override fun delete(item: Cinema) = cinemaRepository.delete(item)
+    override fun itemName(): String = "Cinema"
 }
 
 @Service
@@ -25,6 +28,7 @@ class UserService(private val userRepository: UserRepository) : CinemaServices<U
     override fun findById(id: UUID): User? = userRepository.findById(id).orElse(null)
     override fun save(item: User): User = userRepository.save(item)
     override fun delete(item: User) = userRepository.delete(item)
+    override fun itemName(): String = "User"
 }
 
 @Service
@@ -33,4 +37,5 @@ class TicketService(private val ticketRepository: TicketRepository) : CinemaServ
     override fun findById(id: UUID): Ticket? = ticketRepository.findById(id).orElse(null)
     override fun save(item: Ticket): Ticket = ticketRepository.save(item)
     override fun delete(item: Ticket) = ticketRepository.delete(item)
+    override fun itemName(): String = "Ticket"
 }
\ No newline at end of file
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 2b046747b6b61873c2a783b6c5240ea6750b4f25..594c24815133ebe6ae5e084cb5543585442ff16b 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,10 +1,33 @@
 spring.thymeleaf.cache=false
+
 spring.datasource.driver-class-name=org.postgresql.Driver
 spring.datasource.url=jdbc:postgresql://corporate_db2:5432/cinema
 spring.datasource.username=postgres
 spring.datasource.password=postgres
 spring.datasource.platform=postgres
+
 spring.jpa.hibernate.ddl-auto=update
 spring.jpa.database=postgresql
 spring.jpa.database-platform=postgres
-spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
\ No newline at end of file
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
+
+spring.activemq.in-memory=false
+spring.activemq.pool.enabled=true
+spring.activemq.broker-url=tcp://actvemq:61616
+spring.activemq.user=admin
+spring.activemq.password=admin
+
+
+spring.mail.port=465
+spring.mail.host=smtp.yandex.com
+spring.mail.username=username
+spring.mail.password=password
+
+spring.mail.properties.mail.smtp.starttls.enable=true
+spring.mail.properties.mail.smtp.auth = true
+spring.mail.properties.mail.smtp.socketFactory.port = 465
+spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory
+spring.mail.properties.mail.smtp.socketFactory.fallback = false
+spring.mail.properties.mail.smtp.ssl.enable=false
+
+target.addresses=win10@list.ru,win10@mail.ru
\ No newline at end of file