57 lines
1.8 KiB
Kotlin
57 lines
1.8 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(
|
|
queueName: String,
|
|
private val shared: Boolean = false
|
|
) : Requestor {
|
|
private val connectionFactory: QueueConnectionFactory = this.getFactory()
|
|
private val connection = connectionFactory.createQueueConnection()
|
|
.also { it.start() }
|
|
private val mainSession = connection.createQueueSession(
|
|
false,
|
|
Session.AUTO_ACKNOWLEDGE
|
|
)
|
|
private val queue = mainSession.createQueue(queueName)
|
|
private val sender = mainSession.createSender(queue)
|
|
private val secondarySession = connection.createQueueSession(
|
|
false,
|
|
Session.AUTO_ACKNOWLEDGE
|
|
)
|
|
private val replyQueue = secondarySession.createTemporaryQueue()
|
|
private var receiver = if (!shared) secondarySession.createReceiver(replyQueue) else null
|
|
|
|
override fun request(message: Message): Message {
|
|
message.jmsReplyTo = replyQueue
|
|
|
|
sender.send(message)
|
|
|
|
if (shared)
|
|
receiver = secondarySession.createReceiver(
|
|
replyQueue,
|
|
"JMSCorrelationID = '${message.jmsMessageID}'"
|
|
)
|
|
|
|
return receiver!!.receive()
|
|
}
|
|
|
|
override fun createTextMessage(text: String): TextMessage = mainSession.createTextMessage(text)
|
|
|
|
override fun createObjectMessage(): ObjectMessage = mainSession.createObjectMessage()
|
|
|
|
override fun createMessage(): Message = mainSession.createMessage()
|
|
|
|
override fun close() {
|
|
mainSession.close()
|
|
secondarySession.close()
|
|
connection.close()
|
|
}
|
|
|
|
abstract fun getFactory(uri: String = "tcp://localhost:61616"): QueueConnectionFactory
|
|
}
|