The Talon Manual

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
java
java
/**
 * Copyright (c) 2017 Neeve Research & Consulting LLC. All Rights Reserved.
 * Confidential and proprietary information of Neeve Research & Consulting LLC.
 * CopyrightVersion 1.0
 */
package com.neeve.esprocessor36hostnameprovider;
import java.net.InetAddress*;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import com.neeve.aep.AepEngine*;
import com.neeve.aep.IAepEnvironmentProvider;
import com.neeve.aep.IAepEnvironmentProvider.BufferManager;
import com.neeve.aep.IAepEnvironmentProvider.TransactionAction;
import com.neeve.lang.XString;


/**
 * A simple environment provider that returns the current local host name. 
 */
public class HostNameEnvironmentProvider {
    private final class ProviderImpl implements IAepEnvironmentProvider {
        @Override
        public void setBufferManager(BufferManager bufferManager) {
            HostNameEnvironmentProvider.this.bufferManager = bufferManager;
        }
 
        @Override
        public void onTransactionStart(ByteBuffer buffer, TransactionAction action) {
            HostNameEnvironmentProvider.this.buffer = buffer;
            HostNameEnvironmentProvider.this.action = action;
        }

        @Override
        public void onTransactionEnd() {}

        @Override
        public void close() {}
    }

    // Set by the environment provider impl
    private final ProviderImpl provider = new ProviderImpl();
    private BufferManager bufferManager;
    private TransactionAction action;
    private ByteBuffer buffer;
 
	// stores the local host name
    private final XString localHostName;
    public HostNameEnvironmentProvider() {
        String host = null;
        try {
            host = InetAddress.getLocalHost().getHostName();
        }
        catch (UnknownHostException e) {
            host = "unknown";
        }
        localHostName = XString.create(host);
    }
 
    /**
     * Registers the environment provider with the AepEngine.
     *
     * @param engine the engine with which to register. 
     */
    public void register(AepEngine engine) {
        engine.registerEnvironmentProvider(provider);
    }

    /**
     * Looks up the local host name in an HA consistent fashion. 
     *  
     * @param hostName The XString into which to copy the current host name.
     */
    public void getHostNameTo(XString hostName) {
        if (action == TransactionAction.Playback) {
            short len = buffer.getShort();
            hostName.setValue(buffer, buffer.position(), len);
            buffer.position(buffer.position() + len);
        }
        else {
            if (buffer.remaining() < localHostName.getSerializedLength() + 2) {
                buffer = bufferManager.resize(buffer.capacity() * 2);
            }
            // record the value
            buffer.putShort((short)localHostName.getSerializedLength());
            localHostName.copyInto(buffer, buffer.position());
            buffer.position(buffer.position() + localHostName.getSerializedLength());
            // and copy into for the application
            hostName.setValue(localHostName);
        }
    }
}