Package com.espertech.esperio.socket

Source Code of com.espertech.esperio.socket.EsperIOSocketAdapter

/**************************************************************************************
* Copyright (C) 2008 EsperTech, Inc. All rights reserved.                            *
* http://esper.codehaus.org                                                          *
* http://www.espertech.com                                                           *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the GPL license       *
* a copy of which has been included with this distribution in the license.txt file.  *
**************************************************************************************/
package com.espertech.esperio.socket;

import com.espertech.esper.client.ConfigurationException;
import com.espertech.esper.client.EPServiceProviderManager;
import com.espertech.esper.core.EPServiceProviderSPI;
import com.espertech.esperio.socket.config.ConfigurationSocketAdapter;
import com.espertech.esperio.socket.config.SocketConfig;
import com.espertech.esperio.socket.core.EsperSocketService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class EsperIOSocketAdapter
{
    private static Log log = LogFactory.getLog(EsperIOSocketAdapter.class);

    private final ConfigurationSocketAdapter config;
    private final String engineURI;

    private final Map<String, EsperSocketService> sockets = new HashMap<String, EsperSocketService>();

    /**
     * Quickstart constructor.
     * @param config configuration
     */
    public EsperIOSocketAdapter(ConfigurationSocketAdapter config, String engineURI)
    {
        this.config = config;
        this.engineURI = engineURI;
    }

    /**
     * Re-initialize.
     */
    public void initialize()
    {
    }

    /**
     * Start the DDS endpoint.
     */
    public synchronized void start()
    {
        if (log.isInfoEnabled())
        {
            log.info("Starting EsperIO Socket Adapter for engine URI '" + engineURI + "'");
        }

        EPServiceProviderSPI engineSPI = (EPServiceProviderSPI) EPServiceProviderManager.getProvider(engineURI);

        // Configure sockets (input adapter)
        Set<Integer> ports = new HashSet<Integer>();
        for (Map.Entry<String, SocketConfig> entry : config.getSockets().entrySet()) {
            if (sockets.containsKey(entry.getKey())) {
                throw new ConfigurationException("A socket by name '" + entry.getKey() + "' has already been configured.");
            }

            int port = entry.getValue().getPort();
            if (ports.contains(port)) {
                throw new ConfigurationException("A socket for port '" + port + "' has already been configured.");
            }
            ports.add(port);

            EsperSocketService socketService = new EsperSocketService(entry.getKey(), entry.getValue());
            sockets.put(entry.getKey(), socketService);
        }

        // Start sockets
        for (Map.Entry<String, EsperSocketService> entry : sockets.entrySet()) {
            try {
                entry.getValue().start(entry.getKey(), engineSPI);
            }
            catch (IOException e) {
                log.error("Error starting socket '" + entry.getKey() + "' :" + e.getMessage());
            }
        }

        if (log.isInfoEnabled())
        {
            log.info("Completed starting EsperIO Socket Adapter for engine URI '" + engineURI + "'.");
        }
    }

    /**
     * Destroy the adapter.
     */
    public synchronized void destroy()
    {
        if (log.isDebugEnabled())
        {
            log.debug("Destroying Esper Socket Adapter");
        }

        for (EsperSocketService service : sockets.values()) {
            try {
                service.destroy();
            } catch (Throwable t) {
                log.info("Error destroying service '" + service.getServiceName() + "' :" + t.getMessage());
            }
        }
        sockets.clear();
    }
}
TOP

Related Classes of com.espertech.esperio.socket.EsperIOSocketAdapter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.