Как создать JNDI JMS-поиск во встроенном tomcat:Spring boot

Проект Spring-boot, который у меня есть, публикует сообщения в очереди с использованием jms и использует Apache ActiveMq для прослушивания.

Когда используется внешний сервер tomcat, приведенные ниже записи делаются в конфигурационном файле tomcat и принимаются сообщения JMS.

<Resource name="jms/myQCF" 
 auth="Container" 
 type="org.apache.activemq.ActiveMQConnectionFactory" 
 description="JMS Connection Factory"
 factory="org.apache.activemq.jndi.JNDIReferenceFactory" 
 brokerURL="tcp://localhost:61616" 
 brokerName="LocalActiveMQBroker"/>

<Resource name="jms/myAPIQueue" auth="Container" type="org.apache.activemq.command.ActiveMQQueue" 
 description="pubTomyAPIQueue" 
factory="org.apache.activemq.jndi.JNDIReferenceFactory" physicalName="API.QUEUE"/>

При использовании встроенного контейнера tomcat, настройте, как показано ниже, в основном классе весенней загрузки.

@SpringBootApplication открытый класс Приложение расширяет SpringBootServletInitializer {

  public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }


    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    @Bean
    public TomcatEmbeddedServletContainerFactory tomcatFactory() {
        return new TomcatEmbeddedServletContainerFactory() {

            @Override
            protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
                    Tomcat tomcat) {
                tomcat.enableNaming();
                return super.getTomcatEmbeddedServletContainer(tomcat);
            }

            @Override
            protected void postProcessContext(Context context) {
                ContextResource resource = new ContextResource();
                resource.setName("jms/myQCF");
                resource.setType("org.apache.activemq.jndi.ActiveMQInitialContextFactory");
                resource.setProperty("factory", "org.apache.activemq.jndi.JNDIReferenceFactory");
                resource.setProperty("brokerName","LocalActiveMQBroker");
                resource.setAuth("Container");

                context.getNamingResources().addResource(resource);

                resource.setName("jms/myAPIQueue");
                resource.setType("org.apache.activemq.command.ActiveMQQueue");
                resource.setProperty("factory", "org.apache.activemq.jndi.JNDIReferenceFactory");
                resource.setAuth("Container");

                context.getNamingResources().addResource(resource);
            }
        };
        @Bean(destroyMethod="")
    public JndiTemplate jndiTemplate() {
        JndiTemplate jndiTemplate = new JndiTemplate();
        Properties properties = new Properties();
        properties.setProperty("java.naming.factory.initial", "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
        properties.setProperty("java.naming.provider.url", "vm://localhost?broker.persistent=false");
        jndiTemplate.setEnvironment(properties);
        return jndiTemplate;

    }

    @Bean(destroyMethod="")
    public ConnectionFactory jmsConnectionFactory() throws IllegalArgumentException, NamingException {
        JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
        jndiObjectFactoryBean.setJndiName("java:comp/env/jms/myQCF");
        jndiObjectFactoryBean.setJndiTemplate(jndiTemplate());
        jndiObjectFactoryBean.setProxyInterface(ConnectionFactory.class);
        jndiObjectFactoryBean.setLookupOnStartup(false);
        jndiObjectFactoryBean.afterPropertiesSet();
        return (ConnectionFactory)jndiObjectFactoryBean.getObject();
    }


    @Bean(destroyMethod="")
    public JndiObjectFactoryBean queueForPep() throws IllegalArgumentException, NamingException {
        JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
        jndiObjectFactoryBean.setJndiName("java:comp/env/jms/myAPIQueue");
        jndiObjectFactoryBean.setJndiTemplate(jndiTemplate());
        jndiObjectFactoryBean.setProxyInterface(ConnectionFactory.class);
        jndiObjectFactoryBean.setLookupOnStartup(false);
        jndiObjectFactoryBean.afterPropertiesSet();
        return jndiObjectFactoryBean;
    }

    }

Сообщение получает сбой javax.xml.ws.WebServiceException: javax.naming.NamingException: схема Java не распознана

Есть ли какая-либо конфигурация, чтобы сделать?

0 ответов

Другие вопросы по тегам