All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apacheextras.camel.component.wmq.WMQComponent Maven / Gradle / Ivy

/**************************************************************************************
 https://camel-extra.github.io

 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU Lesser General Public License
 as published by the Free Software Foundation; either version 3
 of the License, or (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.


 You should have received a copy of the GNU Lesser General Public
 License along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 02110-1301, USA.

 http://www.gnu.org/licenses/lgpl-3.0-standalone.html
 ***************************************************************************************/
package org.apacheextras.camel.component.wmq;

import com.ibm.mq.MQQueueManager;
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.impl.UriEndpointComponent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Hashtable;
import java.util.Map;
import java.util.Properties;

public class WMQComponent extends UriEndpointComponent {

    private final static Logger LOGGER = LoggerFactory.getLogger(WMQComponent.class);

    public WMQComponent() {
        super(WMQEndpoint.class);
    }

    public WMQComponent(CamelContext camelContext) {
        super(camelContext, WMQEndpoint.class);
    }

    @Override
    public Endpoint createEndpoint(String uri, String remaining, Map parameters) throws Exception {
        return new WMQEndpoint(uri, this, remaining);
    }

    public MQQueueManager getQueueManager() {
        return getQueueManager("default", null, null, null, null, null, null);
    }

    public MQQueueManager getQueueManager(String name, String hostname, String port, String channel, String userID, String password, String CCSID) {
        if (name == null) {
            LOGGER.warn("QueueManager name not defined, fallback to default");
            name = "default";
        }
        LOGGER.debug("Connecting to MQQueueManager {} ...", name);
        Properties qmProperties = new Properties();
        if (hostname != null && port != null && channel != null) {
            qmProperties.put(name + ".hostname", hostname);
            qmProperties.put(name + ".port", port);
            qmProperties.put(name + ".channel", channel);
            if (userID != null) {
                qmProperties.put(name + ".userID", userID);
            }
            if (password != null) {
                qmProperties.put(name + ".password", password);
            }
            if (CCSID != null) {
                qmProperties.put(name + ".CCSID", CCSID);
            }
        } else {
            InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("mq.properties");
            try {
                LOGGER.debug("Loading mq.properties from the classloader ...");
                qmProperties.load(inputStream);
            } catch (Exception e) {
                LOGGER.debug("mq.properties not found in the classloader, trying from etc folder");
                try {
                    FileInputStream fileInputStream = new FileInputStream(new File(new File(new File(System.getProperty("karaf.home")), "etc"), "mq.properties"));
                    qmProperties.load(fileInputStream);
                    LOGGER.debug("mq.properties loaded from etc/mq.properties");
                } catch (Exception e1) {
                    LOGGER.debug("mq.properties not found from etc folder, falling to default");
                    qmProperties.put(name + ".hostname", "localhost");
                    qmProperties.put(name + ".port", "7777");
                    qmProperties.put(name + ".channel", "QM_TEST.SVRCONN");
                }
            }
        }
        if (qmProperties.get(name + ".hostname") == null) {
            throw new IllegalArgumentException(name + ".hostname property is missing");
        }
        if (qmProperties.get(name + ".port") == null) {
            throw new IllegalArgumentException(name + ".port property is missing");
        }
        if (qmProperties.get(name + ".channel") == null) {
            throw new IllegalArgumentException(name + ".channel property is missing");
        }
        Hashtable connectionProperties = new Hashtable();
        connectionProperties.put("hostname", (String) qmProperties.get(name + ".hostname"));
        connectionProperties.put("port", Integer.parseInt((String) qmProperties.get(name + ".port")));
        connectionProperties.put("channel", (String) qmProperties.get(name + ".channel"));
        if (qmProperties.get(name + ".userID") != null) {
            connectionProperties.put("userID", (String) qmProperties.get(name + ".userID"));
        }
        if (qmProperties.get(name + ".password") != null) {
            connectionProperties.put("password", (String) qmProperties.get(name + ".password"));
        }
        if (qmProperties.get(name + ".CCSID") != null) {
            connectionProperties.put("CCSID", (String) qmProperties.get(name + ".CCSID"));
        }
        try {
            LOGGER.info("Connecting to MQQueueManager {} on {}:{} (channel {})", new String[]{name,
                    (String) qmProperties.get(name + ".hostname"),
                    (String) qmProperties.get(name + ".port"),
                    (String) qmProperties.get(name + ".channel")});
            return new MQQueueManager(name, connectionProperties);
        } catch (Exception e) {
            throw new IllegalStateException("Can't create MQQueueManager", e);
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy