lm-sistemi-software-distrib.../src/main/kotlin/util/jms/requestor/AbstractRequestor.kt

59 lines
1.8 KiB
Kotlin
Raw Normal View History

2020-04-24 16:58:13 +00:00
package util.jms.requestor
2020-04-22 09:59:55 +00:00
2020-04-24 16:58:13 +00:00
import java.io.Serializable
2020-04-22 09:59:55 +00:00
import javax.jms.Message
import javax.jms.QueueConnectionFactory
import javax.jms.Session
import javax.jms.ObjectMessage
import javax.jms.TextMessage
2020-04-22 16:01:59 +00:00
abstract class AbstractRequestor(
queueName: String,
private val shared: Boolean = false
) : Requestor {
2020-04-22 09:59:55 +00:00
private val connectionFactory: QueueConnectionFactory = this.getFactory()
private val connection = connectionFactory.createQueueConnection()
.also { it.start() }
2020-04-22 16:01:59 +00:00
private val mainSession = connection.createQueueSession(
2020-04-22 09:59:55 +00:00
false,
Session.AUTO_ACKNOWLEDGE
)
2020-04-22 16:01:59 +00:00
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
2020-04-22 09:59:55 +00:00
override fun request(message: Message): Message {
2020-04-22 16:01:59 +00:00
message.jmsReplyTo = replyQueue
2020-04-22 09:59:55 +00:00
sender.send(message)
2020-04-22 16:01:59 +00:00
if (shared)
receiver = secondarySession.createReceiver(
replyQueue,
"JMSCorrelationID = '${message.jmsMessageID}'"
)
return receiver!!.receive()
2020-04-22 09:59:55 +00:00
}
2020-04-22 16:01:59 +00:00
override fun createTextMessage(text: String): TextMessage = mainSession.createTextMessage(text)
2020-04-22 09:59:55 +00:00
2020-04-24 16:58:13 +00:00
override fun createObjectMessage(obj: Serializable?): ObjectMessage =
mainSession.createObjectMessage(obj)
2020-04-22 09:59:55 +00:00
2020-04-22 16:01:59 +00:00
override fun createMessage(): Message = mainSession.createMessage()
2020-04-22 09:59:55 +00:00
override fun close() {
2020-04-22 16:01:59 +00:00
mainSession.close()
secondarySession.close()
2020-04-22 09:59:55 +00:00
connection.close()
}
abstract fun getFactory(uri: String = "tcp://localhost:61616"): QueueConnectionFactory
}