Jms Spring的DefaultMessageListenerContainer是否直接从代理或JCA托管使用连接工厂?

Jms Spring的DefaultMessageListenerContainer是否直接从代理或JCA托管使用连接工厂?,jms,spring-integration,spring-jms,jca,Jms,Spring Integration,Spring Jms,Jca,我有一个Spring集成应用程序,其中有一个JMS入站通道适配器,它将从远程JMS代理中的队列接收消息。我直接从代理的远程JNDI服务查找连接工厂,这就是我用来设置入站通道适配器的内容。我知道在幕后有一个DefaultMessageListenerContainer。根据AbstractMessageListenerContainerJavadocs发现,如果DMLC的sessionTransacted设置为true,则本地JMS事务将用于从代理传递消息 我对将消息接收作为外部管理事务的一部分不

我有一个Spring集成应用程序,其中有一个JMS入站通道适配器,它将从远程JMS代理中的队列接收消息。我直接从代理的远程JNDI服务查找连接工厂,这就是我用来设置入站通道适配器的内容。我知道在幕后有一个DefaultMessageListenerContainer。根据AbstractMessageListenerContainerJavadocs发现,如果DMLC的sessionTransacted设置为true,则本地JMS事务将用于从代理传递消息

我对将消息接收作为外部管理事务的一部分不感兴趣

现在,如果JMS代理提供了一个资源适配器,因此有一个JCA管理的连接工厂,它可能能够参与JBoss应用服务器中配置的JTA事务,而我的Spring集成是在war中打包运行的。我可以使用它,而不是像上面描述的那样直接从代理的JNDI中查找。因为我对全局事务不感兴趣,所以我看不到使用这个JCA连接工厂的价值,而且我不知道JCA对连接/会话的缓存是否会与DMLC缓存策略冲突。此外,我不确定添加JCA层来包装原始连接工厂是否会影响性能

那么,哪种方法是正确的,直接从代理JNDI获取连接工厂,让DMLC处理所有事情,还是采用JCA管理的连接?似乎有一个没有很好记录的学派认为JCA更安全、更健壮,但如果我不使用EJB,我不明白这是怎么回事