com.ebay.pulsar.sessionizer.impl.LoopbackEventProducer.java Source code

Java tutorial

Introduction

Here is the source code for com.ebay.pulsar.sessionizer.impl.LoopbackEventProducer.java

Source

/*
Pulsar
Copyright (C) 2013-2015 eBay Software Foundation
Licensed under the GPL v2 license.  See LICENSE for full terms.
*/
package com.ebay.pulsar.sessionizer.impl;

import java.util.concurrent.atomic.AtomicLong;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationEvent;

import com.ebay.jetstream.event.JetstreamEvent;
import com.ebay.jetstream.event.JetstreamReservedKeys;
import com.ebay.jetstream.event.support.AbstractEventSource;
import com.ebay.pulsar.sessionizer.model.Session;
import com.ebay.pulsar.sessionizer.util.BinaryFormatSerializer;
import com.ebay.pulsar.sessionizer.util.Constants;

/**
 * An event producer to send events to sessionizer cluster.
 * 
 * @author xingwang
 *
 */
public class LoopbackEventProducer extends AbstractEventSource implements InitializingBean {
    private static final Logger LOGGER = LoggerFactory.getLogger(LoopbackEventProducer.class);

    private static final String AFFINITY_KEY = JetstreamReservedKeys.MessageAffinityKey.toString();
    private final AtomicLong totalOwnershipChangedSessionCounter = new AtomicLong();
    private final AtomicLong totalRestoredSessionSent = new AtomicLong();

    @Override
    public void afterPropertiesSet() throws Exception {

    }

    @Override
    public void pause() {

    }

    @Override
    protected void processApplicationEvent(ApplicationEvent event) {

    }

    @Override
    public void resume() {

    }

    public void forwardSessionEndEvent(String identifier, Session session, String uid) {
        JetstreamEvent jsEvent = createEvent(session, Constants.EVENT_TYPE_SESSION_TRANSFERED_EVENT);
        jsEvent.put(Constants.EVENT_PAYLOAD_SESSION_UNIQUEID, uid);
        jsEvent.put(Constants.EVENT_PAYLOAD_SESSION_TYPE, Integer.valueOf(session.getType()));
        totalOwnershipChangedSessionCounter.incrementAndGet();
        jsEvent.put(AFFINITY_KEY, session.getAffinityKey());
        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("Transfer event: {}", jsEvent);
        }
        super.fireSendEvent(jsEvent);
    }

    public void sendExpirationCheckEvent(JetstreamEvent jsEvent) {
        totalRestoredSessionSent.incrementAndGet();
        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("Transfer event: {}", jsEvent);
        }
        super.fireSendEvent(jsEvent);
    }

    private JetstreamEvent createEvent(Session session, String type) {
        JetstreamEvent jsEvent = new JetstreamEvent();
        jsEvent.setEventType(type);
        jsEvent.put(Constants.EVENT_PAYLOAD_SESSION_PAYLOAD,
                BinaryFormatSerializer.getInstance().getSessionPayload(session).array());
        jsEvent.put(Constants.EVENT_PAYLOAD_SESSION_METADATA,
                BinaryFormatSerializer.getInstance().getSessionMetadata(session).array());
        return jsEvent;
    }

    public long getTotalOwnershipChangedSessionSent() {
        return totalOwnershipChangedSessionCounter.get();
    }

    public long getTotalRestoredSessionSent() {
        return totalRestoredSessionSent.get();
    }
}