Конфигурация Spring Tomcat для JMS (IBM MQ, Tomcat, Spring) - PullRequest
1 голос
/ 21 июня 2019

У меня относительно старое приложение, которое использует Websphere MQ для обмена сообщениями. Он работает на WAS (Websphere Application Server) и использует MDB (Message Driven Beans). Я должен перенести это приложение из Websphere, чтобы Tomcat

Я попытался что-то с помощью Springboot и смог написать пример приложения JMS, которое подключается к очередям и читает сообщения и может обрабатывать их, но не реализовало управление транзакциями с JMS. Теперь меня попросили настроить приложение так, чтобы оно работало на tomcat. Может кто-нибудь, пожалуйста, помогите, как и где я должен настроить конфигурацию в Tomcat. Или какие все изменения потребуются, если упаковать мое приложение Springboot в war и развернуть его на Tomcat.

Вот так выглядит мой код в applicationconfig.java

@Bean(name = "mqQueueConnectionFactory")
    public MQQueueConnectionFactory mqQueueConnectionFactory() {
        MQQueueConnectionFactory mqQueueConnectionFactory = new MQQueueConnectionFactory();
        try {
            mqQueueConnectionFactory.setHostName("hostname");
            mqQueueConnectionFactory.setTransportType(WMQConstants.WMQ_CM_CLIENT);
            mqQueueConnectionFactory.setCCSID(1208);
            mqQueueConnectionFactory.setChannel("channel");
            mqQueueConnectionFactory.setPort(1415);
            mqQueueConnectionFactory.setQueueManager("qManager");
        } catch (Exception e) {
            System.out.println("MQQueueConnectionFactory bean exception" + e);
        }
        return mqQueueConnectionFactory;
    }

    @Bean
    UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter(
            MQQueueConnectionFactory mqQueueConnectionFactory) {
        UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter = new UserCredentialsConnectionFactoryAdapter();
        userCredentialsConnectionFactoryAdapter.setUsername("");
        userCredentialsConnectionFactoryAdapter.setPassword("");
        userCredentialsConnectionFactoryAdapter.setTargetConnectionFactory(mqQueueConnectionFactory);
        return userCredentialsConnectionFactoryAdapter;
    }

    @Bean
    @Primary
    public CachingConnectionFactory cachingConnectionFactory(
            UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter) {
        CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
        cachingConnectionFactory.setTargetConnectionFactory(userCredentialsConnectionFactoryAdapter);
        cachingConnectionFactory.setReconnectOnException(true);
        return cachingConnectionFactory;
    }

    @Bean
    public JmsOperations jmsOperations(CachingConnectionFactory cachingConnectionFactory) {
        JmsTemplate jmsTemplate = new JmsTemplate(cachingConnectionFactory);
        jmsTemplate.setReceiveTimeout(50000);
        return jmsTemplate;
    }

1 Ответ

0 голосов
/ 02 июля 2019
@Bean(name = "wmq")
    public JmsComponent wmQ(@Value(AppConstants.WMQ_CONNECTION_TYPE) int connType,
                            @Value(AppConstants.WMQ_HOST) String hostName,
                            @Value(AppConstants.WMQ_PORT) Integer port,
                            @Value(AppConstants.WMQ_QUEUE_MANAGER) String queueManager,
                            @Value(AppConstants.WMQ_CHANNEL) String channel,
                            @Value(AppConstants.WMQ_CONCURRENT_CONSUMERS) int concurrentConsumers,
                            @Value(AppConstants.WMQ_USERNAME) String username,
                            @Value(AppConstants.WMQ_PASSWORD) String password
                           ) throws JMSException {
        JmsComponent jmsComponent = new JmsComponent();
        MQConnectionFactory mqConnectionFactory = new MQConnectionFactory();
        try {
            mqConnectionFactory.setTransportType(connType);
            mqConnectionFactory.setHostName(hostName);
            mqConnectionFactory.setPort(port);
            mqConnectionFactory.setQueueManager(queueManager);
            mqConnectionFactory.setChannel(channel);
            jmsComponent.setConnectionFactory(mqConnectionFactory);
            JmsConfiguration jmsConfiguration = new JmsConfiguration(mqConnectionFactory);
            jmsConfiguration.setUsername(username);
            jmsConfiguration.setPassword(password);
            jmsConfiguration.setConcurrentConsumers(concurrentConsumers);
            jmsComponent.setConfiguration(jmsConfiguration);
        } catch (JMSException e) {
            String msg = "Error while creating IBM MQ Connection Factory";
            throw new JMSException(msg);
        }
        return jmsComponent;
    }
...