add drill 07
This commit is contained in:
parent
d8f4e8bedf
commit
10bf3e3588
31
src/main/kotlin/drills/drill07/exercise1/point1/Receiver.kt
Normal file
31
src/main/kotlin/drills/drill07/exercise1/point1/Receiver.kt
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package drills.drill07.exercise1.point1
|
||||||
|
|
||||||
|
import org.apache.activemq.ActiveMQConnectionFactory
|
||||||
|
import javax.jms.QueueConnectionFactory
|
||||||
|
import javax.jms.Session
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val url = "tcp://localhost:61616"
|
||||||
|
val factory: QueueConnectionFactory = ActiveMQConnectionFactory(url)
|
||||||
|
|
||||||
|
val connection = factory.createQueueConnection()
|
||||||
|
connection.start()
|
||||||
|
|
||||||
|
val session = connection.createQueueSession(
|
||||||
|
false,
|
||||||
|
Session.CLIENT_ACKNOWLEDGE
|
||||||
|
)
|
||||||
|
|
||||||
|
val queue = session.createQueue("ack")
|
||||||
|
val receiver = session.createReceiver(queue)
|
||||||
|
|
||||||
|
repeat(100) {
|
||||||
|
val msg = receiver.receive()
|
||||||
|
val value = msg.getIntProperty("value")
|
||||||
|
println(value)
|
||||||
|
msg.acknowledge()
|
||||||
|
}
|
||||||
|
|
||||||
|
session.close()
|
||||||
|
connection.close()
|
||||||
|
}
|
29
src/main/kotlin/drills/drill07/exercise1/point1/Sender.kt
Normal file
29
src/main/kotlin/drills/drill07/exercise1/point1/Sender.kt
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
package drills.drill07.exercise1.point1
|
||||||
|
|
||||||
|
import org.apache.activemq.ActiveMQConnectionFactory
|
||||||
|
import javax.jms.QueueConnectionFactory
|
||||||
|
import javax.jms.Session
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val url = "tcp://localhost:61616"
|
||||||
|
val factory: QueueConnectionFactory = ActiveMQConnectionFactory(url)
|
||||||
|
val connection = factory.createQueueConnection()
|
||||||
|
|
||||||
|
val session = connection.createQueueSession(
|
||||||
|
false,
|
||||||
|
Session.AUTO_ACKNOWLEDGE
|
||||||
|
)
|
||||||
|
|
||||||
|
val queue = session.createQueue("ack")
|
||||||
|
val sender = session.createSender(queue)
|
||||||
|
|
||||||
|
val msg = session.createMessage()
|
||||||
|
|
||||||
|
repeat(100) {
|
||||||
|
msg.setIntProperty("value", it)
|
||||||
|
sender.send(msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
session.close()
|
||||||
|
connection.close()
|
||||||
|
}
|
41
src/main/kotlin/drills/drill07/exercise1/point2/Receiver.kt
Normal file
41
src/main/kotlin/drills/drill07/exercise1/point2/Receiver.kt
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
package drills.drill07.exercise1.point2
|
||||||
|
|
||||||
|
import org.apache.activemq.ActiveMQConnectionFactory
|
||||||
|
import javax.jms.QueueConnectionFactory
|
||||||
|
import javax.jms.Session
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val url = "tcp://localhost:61616"
|
||||||
|
val factory: QueueConnectionFactory = ActiveMQConnectionFactory(url)
|
||||||
|
|
||||||
|
val connection = factory.createQueueConnection()
|
||||||
|
connection.start()
|
||||||
|
|
||||||
|
val session = connection.createQueueSession(
|
||||||
|
true,
|
||||||
|
Session.SESSION_TRANSACTED
|
||||||
|
)
|
||||||
|
|
||||||
|
val queue = session.createQueue("transacted")
|
||||||
|
val receiver = session.createReceiver(queue)
|
||||||
|
|
||||||
|
repeat(10) {
|
||||||
|
val msg = receiver.receive()
|
||||||
|
val value = msg.getIntProperty("value")
|
||||||
|
println(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
println("retry")
|
||||||
|
session.rollback()
|
||||||
|
|
||||||
|
repeat(10) {
|
||||||
|
val msg = receiver.receive()
|
||||||
|
val value = msg.getIntProperty("value")
|
||||||
|
println(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
session.commit()
|
||||||
|
|
||||||
|
session.close()
|
||||||
|
connection.close()
|
||||||
|
}
|
31
src/main/kotlin/drills/drill07/exercise1/point2/Sender.kt
Normal file
31
src/main/kotlin/drills/drill07/exercise1/point2/Sender.kt
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package drills.drill07.exercise1.point2
|
||||||
|
|
||||||
|
import org.apache.activemq.ActiveMQConnectionFactory
|
||||||
|
import javax.jms.QueueConnectionFactory
|
||||||
|
import javax.jms.Session
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val url = "tcp://localhost:61616"
|
||||||
|
val factory: QueueConnectionFactory = ActiveMQConnectionFactory(url)
|
||||||
|
val connection = factory.createQueueConnection()
|
||||||
|
|
||||||
|
val session = connection.createQueueSession(
|
||||||
|
true,
|
||||||
|
Session.SESSION_TRANSACTED
|
||||||
|
)
|
||||||
|
|
||||||
|
val queue = session.createQueue("transacted")
|
||||||
|
val sender = session.createSender(queue)
|
||||||
|
|
||||||
|
val msg = session.createMessage()
|
||||||
|
|
||||||
|
repeat(10) {
|
||||||
|
msg.setIntProperty("value", it)
|
||||||
|
sender.send(msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
session.commit()
|
||||||
|
|
||||||
|
session.close()
|
||||||
|
connection.close()
|
||||||
|
}
|
35
src/main/kotlin/drills/drill07/exercise2/Replier.kt
Normal file
35
src/main/kotlin/drills/drill07/exercise2/Replier.kt
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package drills.drill07.exercise2
|
||||||
|
|
||||||
|
import org.apache.activemq.ActiveMQConnectionFactory
|
||||||
|
import javax.jms.Queue
|
||||||
|
import javax.jms.QueueConnectionFactory
|
||||||
|
import javax.jms.Session
|
||||||
|
import javax.jms.TextMessage
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val url = "tcp://localhost:61616"
|
||||||
|
val factory: QueueConnectionFactory = ActiveMQConnectionFactory(url)
|
||||||
|
|
||||||
|
val connection = factory.createQueueConnection()
|
||||||
|
connection.start()
|
||||||
|
|
||||||
|
val session = connection.createQueueSession(
|
||||||
|
false,
|
||||||
|
Session.AUTO_ACKNOWLEDGE
|
||||||
|
)
|
||||||
|
|
||||||
|
val queue = session.createQueue("requestor")
|
||||||
|
val receiver = session.createReceiver(queue)
|
||||||
|
|
||||||
|
val msg = receiver.receive() as TextMessage
|
||||||
|
println(msg.text)
|
||||||
|
|
||||||
|
val replyQueue = msg.jmsReplyTo as Queue
|
||||||
|
val sender = session.createSender(replyQueue)
|
||||||
|
val replyMsg = session.createTextMessage("Echo ${msg.text}")
|
||||||
|
|
||||||
|
sender.send(replyMsg)
|
||||||
|
|
||||||
|
session.close()
|
||||||
|
connection.close()
|
||||||
|
}
|
35
src/main/kotlin/drills/drill07/exercise2/Requestor.kt
Normal file
35
src/main/kotlin/drills/drill07/exercise2/Requestor.kt
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package drills.drill07.exercise2
|
||||||
|
|
||||||
|
import org.apache.activemq.ActiveMQConnectionFactory
|
||||||
|
import javax.jms.QueueConnectionFactory
|
||||||
|
import javax.jms.Session
|
||||||
|
import javax.jms.TextMessage
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val url = "tcp://localhost:61616"
|
||||||
|
val factory: QueueConnectionFactory = ActiveMQConnectionFactory(url)
|
||||||
|
val connection = factory.createQueueConnection()
|
||||||
|
connection.start()
|
||||||
|
|
||||||
|
val session = connection.createQueueSession(
|
||||||
|
false,
|
||||||
|
Session.AUTO_ACKNOWLEDGE
|
||||||
|
)
|
||||||
|
|
||||||
|
val queue = session.createQueue("requestor")
|
||||||
|
val sender = session.createSender(queue)
|
||||||
|
|
||||||
|
val tmpQueue = session.createTemporaryQueue()
|
||||||
|
val receiver = session.createReceiver(tmpQueue)
|
||||||
|
|
||||||
|
val msg = session.createTextMessage("Hello Home!")
|
||||||
|
msg.jmsReplyTo = tmpQueue
|
||||||
|
|
||||||
|
sender.send(msg)
|
||||||
|
|
||||||
|
val replyMsg = receiver.receive() as TextMessage
|
||||||
|
println(replyMsg.text)
|
||||||
|
|
||||||
|
session.close()
|
||||||
|
connection.close()
|
||||||
|
}
|
17
src/main/kotlin/drills/drill07/exercise3/hello/Replier.kt
Normal file
17
src/main/kotlin/drills/drill07/exercise3/hello/Replier.kt
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package drills.drill07.exercise3.hello
|
||||||
|
|
||||||
|
import drills.drill07.exercise3.replier.ActiveMQReplier
|
||||||
|
import drills.drill07.exercise3.replier.Replier
|
||||||
|
import javax.jms.TextMessage
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val replier: Replier = ActiveMQReplier("hello")
|
||||||
|
|
||||||
|
replier.start()
|
||||||
|
|
||||||
|
replier.onRequest {
|
||||||
|
val msg = it as TextMessage
|
||||||
|
println(msg.text)
|
||||||
|
replier.createTextMessage("Echo ${msg.text}")
|
||||||
|
}
|
||||||
|
}
|
15
src/main/kotlin/drills/drill07/exercise3/hello/Requestor.kt
Normal file
15
src/main/kotlin/drills/drill07/exercise3/hello/Requestor.kt
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package drills.drill07.exercise3.hello
|
||||||
|
|
||||||
|
import drills.drill07.exercise3.requestor.ActiveMQRequestor
|
||||||
|
import drills.drill07.exercise3.requestor.Requestor
|
||||||
|
import javax.jms.TextMessage
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val requestor: Requestor = ActiveMQRequestor("hello")
|
||||||
|
|
||||||
|
val msg = requestor.request(requestor.createTextMessage("Hello Home!")) as TextMessage
|
||||||
|
|
||||||
|
println(msg.text)
|
||||||
|
|
||||||
|
requestor.close()
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
package drills.drill07.exercise3.replier
|
||||||
|
|
||||||
|
import javax.jms.Message
|
||||||
|
import javax.jms.Queue
|
||||||
|
import javax.jms.QueueConnectionFactory
|
||||||
|
import javax.jms.Session
|
||||||
|
import javax.jms.ObjectMessage
|
||||||
|
import javax.jms.TextMessage
|
||||||
|
|
||||||
|
abstract class AbstarctReplier(val queueName: String) : Replier {
|
||||||
|
private val factory: QueueConnectionFactory = this.getFactory()
|
||||||
|
private val connection = factory.createQueueConnection()
|
||||||
|
private val session = connection.createQueueSession(
|
||||||
|
false,
|
||||||
|
Session.AUTO_ACKNOWLEDGE
|
||||||
|
)
|
||||||
|
private val queue = session.createQueue(queueName)
|
||||||
|
private val receiver = session.createReceiver(queue)
|
||||||
|
|
||||||
|
override fun onRequest(buildResponse: (Message) -> Message) {
|
||||||
|
receiver.setMessageListener {
|
||||||
|
val replyQueue = it.jmsReplyTo as Queue
|
||||||
|
val sender = session.createSender(replyQueue)
|
||||||
|
sender.send(buildResponse(it))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createTextMessage(text: String): TextMessage = session.createTextMessage(text)
|
||||||
|
|
||||||
|
override fun createObjectMessage(): ObjectMessage = session.createObjectMessage()
|
||||||
|
|
||||||
|
override fun createMessage(): Message = session.createMessage()
|
||||||
|
|
||||||
|
override fun start() {
|
||||||
|
connection.start()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun close() {
|
||||||
|
session.close()
|
||||||
|
connection.close()
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract fun getFactory(uri: String = "tcp://localhost:61616"): QueueConnectionFactory
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package drills.drill07.exercise3.replier
|
||||||
|
|
||||||
|
import org.apache.activemq.ActiveMQConnectionFactory
|
||||||
|
import javax.jms.QueueConnectionFactory
|
||||||
|
|
||||||
|
class ActiveMQReplier(queueName: String) : AbstarctReplier(queueName) {
|
||||||
|
override fun getFactory(uri: String): QueueConnectionFactory = ActiveMQConnectionFactory(uri)
|
||||||
|
}
|
14
src/main/kotlin/drills/drill07/exercise3/replier/Replier.kt
Normal file
14
src/main/kotlin/drills/drill07/exercise3/replier/Replier.kt
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package drills.drill07.exercise3.replier
|
||||||
|
|
||||||
|
import javax.jms.Message
|
||||||
|
import javax.jms.ObjectMessage
|
||||||
|
import javax.jms.TextMessage
|
||||||
|
|
||||||
|
interface Replier {
|
||||||
|
fun onRequest(buildResponse: (Message) -> Message)
|
||||||
|
fun createTextMessage(text: String = ""): TextMessage
|
||||||
|
fun createObjectMessage(): ObjectMessage
|
||||||
|
fun createMessage(): Message
|
||||||
|
fun start()
|
||||||
|
fun close()
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
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
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package drills.drill07.exercise3.requestor
|
||||||
|
|
||||||
|
import org.apache.activemq.ActiveMQConnectionFactory
|
||||||
|
import javax.jms.QueueConnectionFactory
|
||||||
|
|
||||||
|
class ActiveMQRequestor(queueName: String) : AbstractRequestor(queueName) {
|
||||||
|
override fun getFactory(uri: String): QueueConnectionFactory = ActiveMQConnectionFactory(uri)
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package drills.drill07.exercise3.requestor
|
||||||
|
|
||||||
|
import javax.jms.Message
|
||||||
|
import javax.jms.ObjectMessage
|
||||||
|
import javax.jms.TextMessage
|
||||||
|
|
||||||
|
interface Requestor {
|
||||||
|
fun request(message: Message): Message
|
||||||
|
fun createTextMessage(text: String = ""): TextMessage
|
||||||
|
fun createObjectMessage(): ObjectMessage
|
||||||
|
fun createMessage(): Message
|
||||||
|
fun close()
|
||||||
|
}
|
21
src/main/kotlin/drills/drill07/exercise4/Replier.kt
Normal file
21
src/main/kotlin/drills/drill07/exercise4/Replier.kt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package drills.drill07.exercise4
|
||||||
|
|
||||||
|
import drills.drill07.exercise3.replier.ActiveMQReplier
|
||||||
|
import drills.drill07.exercise3.replier.Replier
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val replier: Replier = ActiveMQReplier("hello")
|
||||||
|
|
||||||
|
replier.start()
|
||||||
|
|
||||||
|
replier.onRequest {
|
||||||
|
val n = it.getIntProperty("fact")
|
||||||
|
val resultMessage = replier.createMessage()
|
||||||
|
resultMessage.setLongProperty("result", fact(n))
|
||||||
|
resultMessage
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun fact(n: Int): Long {
|
||||||
|
return if (n <= 1) 1 else n * fact(n - 1)
|
||||||
|
}
|
20
src/main/kotlin/drills/drill07/exercise4/Requestor.kt
Normal file
20
src/main/kotlin/drills/drill07/exercise4/Requestor.kt
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package drills.drill07.exercise4
|
||||||
|
|
||||||
|
import drills.drill07.exercise3.requestor.ActiveMQRequestor
|
||||||
|
import drills.drill07.exercise3.requestor.Requestor
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val requestor: Requestor = ActiveMQRequestor("hello")
|
||||||
|
|
||||||
|
println("Enter the number of which you want to calculate the factorial:")
|
||||||
|
val n = readLine()?.toInt()
|
||||||
|
|
||||||
|
val sendMessage = requestor.createMessage()
|
||||||
|
.also { it.setIntProperty("fact", n!!) }
|
||||||
|
|
||||||
|
val replyMessage = requestor.request(sendMessage)
|
||||||
|
|
||||||
|
println("The factorial of $n is ${replyMessage.getLongProperty("result")}")
|
||||||
|
|
||||||
|
requestor.close()
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user