com.ttech.cordovabuild.infrastructure.queue.QueuePoller.java Source code

Java tutorial

Introduction

Here is the source code for com.ttech.cordovabuild.infrastructure.queue.QueuePoller.java

Source

/*
 * Copyright  2013 Turkcell Teknoloji Inc. and individual contributors
 * by the @authors tag. See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.ttech.cordovabuild.infrastructure.queue;

import com.hazelcast.core.HazelcastInstanceNotActiveException;
import com.hazelcast.core.IQueue;
import com.ttech.cordovabuild.domain.application.ApplicationBuilt;
import com.ttech.cordovabuild.domain.application.ApplicationService;
import com.ttech.cordovabuild.domain.application.BuiltType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DataAccessException;

import java.util.concurrent.TimeUnit;

/**
 * Created with IntelliJ IDEA.
 * User: capacman
 * Date: 9/5/13
 * Time: 3:43 PM
 * To change this template use File | Settings | File Templates.
 */
public class QueuePoller implements Runnable {
    private static final Logger LOGGER = LoggerFactory.getLogger(QueuePoller.class);
    private final QueueListener listener;
    private final ApplicationService applicationService;
    private final BuiltType builtType;
    private final IQueue<Long> queue;

    public QueuePoller(QueueListener listener, ApplicationService applicationService, BuiltType builtType,
            IQueue<Long> queue) {
        this.listener = listener;
        this.applicationService = applicationService;
        this.builtType = builtType;
        this.queue = queue;
    }

    @Override
    public void run() {
        Long builtID = null;
        while (true) {
            try {
                builtID = queue.poll(1000, TimeUnit.MILLISECONDS);
                if (builtID != null) {
                    ApplicationBuilt built = applicationService.findApplicationBuilt(builtID);
                    listener.onBuilt(built, builtType);
                }
            } catch (InterruptedException e) {
                LOGGER.info("queue polling for {} has been interrupted", e);
                break;
            } catch (HazelcastInstanceNotActiveException e) {
                LOGGER.warn("hazelcast is going down stop threads");
                break;
            } catch (DataAccessException e) {
                LOGGER.error("could not get applicationBuilt for {}", builtID, e);
                //TODO implement built failed
            } catch (Exception e) {
                LOGGER.error("unexpected error", e);
            }
        }
    }
}