java.lang.NoSuchMethodError: org.springframework.jms.config.DefaultJmsListenerContainerFactory.setAutoStartup - PullRequest
0 голосов
/ 03 января 2019

Требуется wso2mb для обмена сообщениями в приложении весенней загрузки. Как установить соединение при весенней загрузке?

Требуется, чтобы слушатель прослушивал очередь JMS и обрабатывал данные соответствующим образом. Есть ли способ сделать это в приложении весенней загрузки. Пробный пример на основе Java, приведенный в https://docs.wso2.com/display/MB300/Sending+and+Receiving+Messages+Using+Queues, который работает отлично.

JARS включены:

andes-client-3.2.19.jar
geronimo-jms_1.1_spec-1.1.0.wso2v1.jar
org.wso2.securevault-1.0.0-wso2v2.jar

группа компиляции: 'org.springframework', имя: 'spring-jms', версия: '4.1.0.RELEASE'

springBootVersion = '2.0.4.RELEASE'

Application.java

@EnableJms
@SpringBootApplication
@ServletComponentScan
public class Application extends SpringBootServletInitializer {

public static final String QPID_ICF = "org.wso2.andes.jndi.PropertiesFileInitialContextFactory";
private static final String CF_NAME_PREFIX = "connectionfactory.";
private static final String CF_NAME = "qpidConnectionfactory";
String userName = "admin";
String password = "admin";
private static String CARBON_CLIENT_ID = "carbon";
private static String CARBON_VIRTUAL_HOST_NAME = "carbon";
private static String CARBON_DEFAULT_HOSTNAME = "localhost";
private static String CARBON_DEFAULT_PORT = "5673";
String queueName = "testQueue";

public static void main(String[] args) {
    ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
    context.getBean(JmsTemplate.class);
}

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

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

@Bean
public JmsListenerContainerFactory<?> myFactory
            (QueueConnectionFactory connectionFactory, DefaultJmsListenerContainerFactoryConfigurer configurer, QueueConnection connection) {

    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    configurer.configure(factory, connectionFactory);
    return factory;
}

@Bean
public QueueConnection myConnection
(QueueConnectionFactory factory) throws JMSException {

    QueueConnection queueConnection = factory.createQueueConnection();
    queueConnection.start();
    return queueConnection;
}



@Bean
public QueueConnectionFactory queueConnectionFactory() throws NamingException {
    Properties properties = new Properties();
    properties.put(Context.INITIAL_CONTEXT_FACTORY, QPID_ICF);
    properties.put(CF_NAME_PREFIX + CF_NAME, getTCPConnectionURL(userName, password));
    properties.put("queue."+ queueName,queueName);
    InitialContext ctx = new InitialContext(properties);
    QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.lookup("qpidConnectionfactory");
    return connFactory;
}

private String getTCPConnectionURL(String username, String password) {
    // amqp://{username}:{password}@carbon/carbon?brokerlist='tcp://{hostname}:{port}'
    return new StringBuffer()
            .append("amqp://").append(username).append(":").append(password)
            .append("@").append(CARBON_CLIENT_ID)
            .append("/").append(CARBON_VIRTUAL_HOST_NAME)
            .append("?brokerlist='tcp://").append(CARBON_DEFAULT_HOSTNAME).append(":").append(CARBON_DEFAULT_PORT).append("'")
            .toString();
}


@Bean
  public MappingJackson2MessageConverter jacksonJmsMessageConverter() {
    MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
    converter.setTargetType(MessageType.TEXT);
    converter.setTypeIdPropertyName("_type");
    return converter;
  }

}

Фактический результат: Исключительная ситуация во время запуска приложения весенней загрузки:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myFactory' defined in com.ext.gr.Application: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: 
Failed to instantiate [org.springframework.jms.config.JmsListenerContainerFactory]: Factory method 'myFactory' threw exception; nested exception is java.lang.NoSuchMethodError: org.springframework.jms.config.DefaultJmsListenerContainerFactory.setAutoStartup
...