lm-sistemi-software-distrib.../src/main/kotlin/drills/drill07/exercise3/requestor/AbstractRequestor.kt

43 lines
1.3 KiB
Kotlin

package drills.drill07.exercise3.requestor
import javax.jms.Message
import javax.jms.QueueConnectionFactory
import javax.jms.Session
import javax.jms.ObjectMessage
import javax.jms.TextMessage
abstract class AbstractRequestor(val queueName: String) : Requestor {
private val connectionFactory: QueueConnectionFactory = this.getFactory()
private val connection = connectionFactory.createQueueConnection()
.also { it.start() }
private val session = connection.createQueueSession(
false,
Session.AUTO_ACKNOWLEDGE
)
private val queue = session.createQueue(queueName)
private val sender = session.createSender(queue)
override fun request(message: Message): Message {
val tmpQueue = session.createTemporaryQueue()
message.jmsReplyTo = tmpQueue
sender.send(message)
val tmpReceiver = session.createReceiver(tmpQueue)
return tmpReceiver.receive()
}
override fun createTextMessage(text: String): TextMessage = session.createTextMessage(text)
override fun createObjectMessage(): ObjectMessage = session.createObjectMessage()
override fun createMessage(): Message = session.createMessage()
override fun close() {
session.close()
connection.close()
}
abstract fun getFactory(uri: String = "tcp://localhost:61616"): QueueConnectionFactory
}