关于JMS规范和多线程的一些疑问
在JMS规范中
ConnectionFactory
Destination(Queue和Topic)
认为是可以受管的,在服务器上可以使用jndi访问。
然后根据JMS规范的描述
ConnectionFactory
Connection
Destination(Queue和Topic)
都是线程安全的,也就是说多个线程公用不会造成并发访问控制的问题。
但是Session对象不是线程安全的,每个Thread都应当有自己的Session,才不会造成并发访问下的异常。
我的问题来了:根据目前我手上的api,不在容器中的话,只有用
Queue sessioncreateQueue(java.lang.String queueName) 和 Topic createTopic(java.lang.String topicName)
才能拿到Destination(Queue和Topic)的对象。而Destination(Queue和Topic)又是可以被多线程共享的。
那我如果再程序中想共享Destination(Queue和Topic)岂不是应该先用Connection去获得Session,然后用Session获得Destination(Queue和Topic)。然后再去关闭Session?
那也就是说说明根据JMS Destination(Queue和Topic) 虽然依赖于 Session创建,但是在使用的时候其实是和Session无关的?
另外还有个小问题是多线程使用同一个Connection对象,创建的Session读取消息时,应该是不会出现并发控制的问题吧?