Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 如何从spring boot应用程序连接JBOSS EAP 7中配置为JNDI的现有JMS?_Spring Boot - Fatal编程技术网

Spring boot 如何从spring boot应用程序连接JBOSS EAP 7中配置为JNDI的现有JMS?

Spring boot 如何从spring boot应用程序连接JBOSS EAP 7中配置为JNDI的现有JMS?,spring-boot,Spring Boot,我有一个spring引导应用程序,它必须连接到JBOSS eap 7中配置为JNDI的现有JMS。这是我的密码: private static final String INITIAL_CONTEXT_FACTORY = "org.jboss.naming.remote.client.InitialContextFactory"; private static final String CONNECTION_FACTORY = "jms/RemoteConnectionFactory"; @

我有一个spring引导应用程序,它必须连接到JBOSS eap 7中配置为JNDI的现有JMS。这是我的密码:

private static final String INITIAL_CONTEXT_FACTORY = "org.jboss.naming.remote.client.InitialContextFactory";
private static final String CONNECTION_FACTORY = "jms/RemoteConnectionFactory";


@Bean
public ConnectionFactory connectionFactory() {
    try {
        System.out.println("Retrieving JMS queue with JNDI name: " + CONNECTION_FACTORY);
        JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
        jndiObjectFactoryBean.setJndiName(CONNECTION_FACTORY);
        jndiObjectFactoryBean.setJndiEnvironment(getEnvProperties());
        jndiObjectFactoryBean.afterPropertiesSet();

        return (QueueConnectionFactory) jndiObjectFactoryBean.getObject();

    } catch (NamingException e) {
        System.out.println("Error while retrieving JMS queue with JNDI name: [" + CONNECTION_FACTORY + "]");
        e.printStackTrace();
    } catch (Exception ex) {
        System.out.println("Error");
        ex.printStackTrace();
    }
    return null;
}

Properties getEnvProperties() {
    Properties env = new Properties();
    env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);
    env.put(Context.PROVIDER_URL, "http-remoting://<<servername>>:8080");
    env.put(Context.SECURITY_PRINCIPAL, "user");
    env.put(Context.SECURITY_CREDENTIALS, "password");
    return env;
}

@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory connectionFactory) {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    JndiDestinationResolver jndiDestinationResolver = new JndiDestinationResolver();
    jndiDestinationResolver.setJndiEnvironment(getEnvProperties());
    factory.setDestinationResolver(jndiDestinationResolver);
    return factory;
}
private static final String INITIAL\u CONTEXT\u FACTORY=“org.jboss.naming.remote.client.InitialContextFactory”;
私有静态最终字符串连接\u FACTORY=“jms/RemoteConnectionFactory”;
@豆子
公共连接工厂连接工厂(){
试一试{
System.out.println(“检索JNDI名称为“+CONNECTION\u FACTORY”的JMS队列);
JndiObjectFactoryBean JndiObjectFactoryBean=新的JndiObjectFactoryBean();
setJndiName(连接工厂);
setJndiEnvironment(getEnvProperties());
jndiObjectFactoryBean.afterPropertiesSet();
返回(QueueConnectionFactory)jndObjectFactoryBean.getObject();
}捕获(NamingE例外){
System.out.println(“检索JNDI名称为:[“+连接工厂+”]的JMS队列时出错”);
e、 printStackTrace();
}捕获(例外情况除外){
System.out.println(“错误”);
例如printStackTrace();
}
返回null;
}
属性getEnvProperties(){
Properties env=新属性();
环境放置(Context.INITIAL\u Context\u工厂,INITIAL\u Context\u工厂);
env.put(Context.PROVIDER_URL,“http remoting://:8080”);
环境投入(Context.SECURITY_主体,“用户”);
环境put(Context.SECURITY_凭证,“密码”);
返回环境;
}
@豆子
公共默认jmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory ConnectionFactory){
DefaultJmsListenerContainerFactory=新的DefaultJmsListenerContainerFactory();
工厂。设置连接工厂(连接工厂);
JndiDestinationResolver JndiDestinationResolver=新的JndiDestinationResolver();
setJndiEnvironment(getEnvProperties());
factory.setDestinationResolver(JNDIDDestinationResolver);
返回工厂;
}
我得到以下错误:

"javax.naming.CommunicationException: Failed to connect to any server. Servers tried: [http-remoting://<<servername>>:8080 (java.net.ConnectException: Connection refused: no further information)]"
“javax.naming.CommunicationException:无法连接到任何服务器。尝试的服务器:[http remoting://:8080(java.net.ConnectException:连接被拒绝:无进一步信息)]”

您不必手动创建配置

SpringBoot支持JNDI

您可以像这样使用ConnectionFactory:

spring.jms.jndi-name=java:/jms/RemoteConnectionFactory
还请查看以下文档:


您的应用程序在JBoss中是否以WAR文件的形式运行?是的,它已部署为WAR文件谢谢您的回复。我试过上面的,现在我得到下面的错误。请给我任何帮助。原因:org.springframework.beans.beans实例化异常:未能实例化[javax.jms.ConnectionFactory]:工厂方法“ConnectionFactory”引发异常;嵌套异常是org.springframework.jndi.typemistchnamingexception:jndi位置[java:/ConnectionFactory]可用的[classorg.apache.activemq.artemis.jms.client.ActiveMQJMSConnectionFactory]类型的对象不可分配给[javax.jms.ConnectionFactory],所以您在JBoss EAP 7中使用artemis?standalone.xml中RemoteConnectionFactory的配置是什么样子的?请查看下面Jboss中添加的子系统模块。如果我做了任何错误的设置,请告诉我。我没有在jboss中使用artemis。但是springboot自动配置总是希望输入cast。我在Jboss中尝试了不同的连接工厂组合,并将其添加到属性文件的jndi名称中。但每次它都会给我一个类型不匹配的错误。请对此提供帮助。如果没有JNDI,sprintboot和activemq在我的代码设置中可以正常工作