Jms 未识别传输方案:[nsp]

Jms 未识别传输方案:[nsp],jms,activemq,spring-jms,Jms,Activemq,Spring Jms,我正在尝试连接到Spring应用程序中SoftwareAg的通用消息队列。这是我的Config类 @配置 @使能JMS 公共类配置{ @豆子 公共ActiveMQConnectionFactory接收方ActiveMQConnectionFactory(){ ActiveMQConnectionFactory ActiveMQConnectionFactory=新的ActiveMQConnectionFactory(); var properties=新属性(); properties.setP

我正在尝试连接到Spring应用程序中SoftwareAg的通用消息队列。这是我的
Config

@配置
@使能JMS
公共类配置{
@豆子
公共ActiveMQConnectionFactory接收方ActiveMQConnectionFactory(){
ActiveMQConnectionFactory ActiveMQConnectionFactory=新的ActiveMQConnectionFactory();
var properties=新属性();
properties.setProperty(Context.INITIAL_Context_工厂,“com.pcbsys.nirvana.nSpace.NirvanaContextFactory”);
properties.setProperty(Context.PROVIDER\u URL,“nsp://localhost:9200");
activeMQConnectionFactory.buildFromProperties(属性);
返回activeMQConnectionFactory;
}
@豆子
公共默认jmsListenerContainerFactory jmsListenerContainerFactory(){
var factory=new DefaultJmsListenerContainerFactory();
setConnectionFactory(receiverActiveMQConnectionFactory());
factory.setConcurrency(“3-10”);
返回工厂;
}
} 
这是pom.xml的一部分


org.springframework.boot
:

嗯可以和弹簧一起使用。一般来说,适用于ActiveMQ的SpringXML应该适用于UM,只有连接工厂类和URL会相应地更改

我错过了什么

编辑

var properties=新属性();
properties.setProperty(Context.INITIAL_Context_工厂,“com.pcbsys.nirvana.nSpace.NirvanaContextFactory”);
properties.setProperty(Context.PROVIDER\u URL,“nsp://localhost:9200");
Context ctx=新的InitialContext(属性);
return(ConnectionFactory)ctx.lookup(“local_um”);//这

如前所述,您引用的链接说明:

一般来说,适用于ActiveMQ的SpringXML应该只适用于连接工厂类的UM,URL也会相应地更改。[我的重点]

但是,您尚未更改连接工厂类。方法
receiverActiveMQConnectionFactory
返回了一个
ActiveMQConnectionFactory
的实例,这是错误的。此外,该方法将
ActiveMQConnectionFactory.buildFromProperties()
与UM属性一起使用,这就是获得
java.io.IOException
的原因。您不能将这两种实现混合在一起

可能有一种方法可以简单地实例化UM连接工厂实现(类似于ActiveMQ连接工厂实现),但我认为您可能需要查阅UM开发人员指南以获取该信息


也就是说,JNDI是获得对管理对象(即连接工厂和目的地)的引用的推荐方法,这样您的JMS应用程序就可以在提供者之间移植。因此,我建议您简单地使用它。

我终于设法解决了它。这就是我的工作原理:

@配置
@使能JMS
公共类配置{
@豆子
公共默认jmsListenerContainerFactory jmsListenerContainerFactory(){
var factory=new DefaultJmsListenerContainerFactory();
setConnectionFactory(cachingConnectionFactory());
factory.setConcurrency(“3-10”);
返回工厂;
}
@豆子
@初级的
公共CachingConnectionFactory CachingConnectionFactory(){
最终CachingConnectionFactory CachingConnectionFactory=新CachingConnectionFactory();
cachingConnectionFactory.setSessionCacheSize(200);
cachingConnectionFactory.setTargetConnectionFactory((ConnectionFactory)jndiObjectFactoryBean().getObject());
返回cachingConnectionFactory;
}
@豆子
公共JNDemplate JNDemplate(){
最终属性=新属性();
properties.setProperty(Context.INITIAL_Context_工厂,“com.pcbsys.nirvana.nSpace.NirvanaContextFactory”);
properties.setProperty(Context.PROVIDER\u URL,“nsp://local-dev:9200");
final JndiTemplate JndiTemplate=新的JndiTemplate();
setEnvironment(属性);
返回jndemplate;
}
@豆子
公共JndiObjectFactoryBean JndiObjectFactoryBean(){
最终JndiObjectFactoryBean JndiObjectFactoryBean=新JndiObjectFactoryBean();
setJndiTemplate(jndiTemplate());
setJndiName(“jndi_键”);
返回jndObjectFactoryBean;
}
}

我希望它能帮助别人。不要忘记将
nClient.jar
nJMS.jar
添加到类路径中。您可以在UM安装
lib
目录中找到它们。

非常感谢您的快速响应。这是我第一次使用JMS和UM。你能用必要的修改来编辑实现吗?我也从未与UM合作过,但我是ActiveMQ的开发人员,因此我知道你不能像以前那样将这两件事混合在一起。我在网上四处寻找你们想要的信息,但似乎很多UM文档都被锁在了付费墙后面。我想这是对封闭源代码软件的期望。对于开发人员来说,它远不如大多数开源替代方案那么友好。我尝试将实现更改为不使用ActiveMQ。相反,我使用的是一个普通的JMS
ConnectionFactory
。请参见编辑。传递给
ctx.lookup(“local_um”)的
local_um
参数是什么?在这段代码中,
local_um
是您在JNDI中查找的JMS连接工厂的名称。有没有一种方法可以在不使用JNDI的情况下获取
ConnectionFactory
的实例?
Caused by: org.springframework.jms.UncategorizedJmsException: Uncategorized exception occurred during JMS processing; nested exception is javax.jms.JMSException: Could not create Transport. Reason: java.io.IOException: Transport scheme NOT recognized: [nsp]
    at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:311) ~[spring-jms-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:185) ~[spring-jms-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:507) ~[spring-jms-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:584) ~[spring-jms-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:661) ~[spring-jms-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at id.mandiri.co.id.um.Main.lambda$runner$0(Main.java:21) ~[classes/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784) ~[spring-boot-2.2.1.RELEASE.jar:2.2.1.RELEASE]
    ... 5 common frames omitted
Caused by: javax.jms.JMSException: Could not create Transport. Reason: java.io.IOException: Transport scheme NOT recognized: [nsp]
    at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:36) ~[activemq-client-5.15.10.jar:5.15.10]
    at org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:333) ~[activemq-client-5.15.10.jar:5.15.10]
    at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:346) ~[activemq-client-5.15.10.jar:5.15.10]
    at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:304) ~[activemq-client-5.15.10.jar:5.15.10]
    at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:244) ~[activemq-client-5.15.10.jar:5.15.10]
    at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:196) ~[spring-jms-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:494) ~[spring-jms-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    ... 9 common frames omitted
Caused by: java.io.IOException: Transport scheme NOT recognized: [nsp]
    at org.apache.activemq.util.IOExceptionSupport.create(IOExceptionSupport.java:28) ~[activemq-client-5.15.10.jar:5.15.10]
    at org.apache.activemq.transport.TransportFactory.findTransportFactory(TransportFactory.java:185) ~[activemq-client-5.15.10.jar:5.15.10]
    at org.apache.activemq.transport.TransportFactory.connect(TransportFactory.java:64) ~[activemq-client-5.15.10.jar:5.15.10]
    at org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:331) ~[activemq-client-5.15.10.jar:5.15.10]
    ... 14 common frames omitted
Caused by: java.io.IOException: Could not find factory class for resource: META-INF/services/org/apache/activemq/transport/nsp
    at org.apache.activemq.util.FactoryFinder$StandaloneObjectFactory.loadProperties(FactoryFinder.java:98) ~[activemq-client-5.15.10.jar:5.15.10]
    at org.apache.activemq.util.FactoryFinder$StandaloneObjectFactory.create(FactoryFinder.java:60) ~[activemq-client-5.15.10.jar:5.15.10]
    at org.apache.activemq.util.FactoryFinder.newInstance(FactoryFinder.java:148) ~[activemq-client-5.15.10.jar:5.15.10]
    at org.apache.activemq.transport.TransportFactory.findTransportFactory(TransportFactory.java:182) ~[activemq-client-5.15.10.jar:5.15.10]
    ... 16 common frames omitted