esg.gateway.service.ESGGatewayServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for esg.gateway.service.ESGGatewayServiceImpl.java

Source

/***************************************************************************
*                                                                          *
*  Organization: Lawrence Livermore National Lab (LLNL)                    *
*   Directorate: Computation                                               *
*    Department: Computing Applications and Research                       *
*      Division: S&T Global Security                                       *
*        Matrix: Atmospheric, Earth and Energy Division                    *
*       Program: PCMDI                                                     *
*       Project: Earth Systems Grid (ESG) Data Node Software Stack         *
*  First Author: Gavin M. Bell (gavin@llnl.gov)                            *
*                                                                          *
****************************************************************************
*                                                                          *
*   Copyright (c) 2009, Lawrence Livermore National Security, LLC.         *
*   Produced at the Lawrence Livermore National Laboratory                 *
*   Written by: Gavin M. Bell (gavin@llnl.gov)                             *
*   LLNL-CODE-420962                                                       *
*                                                                          *
*   All rights reserved. This file is part of the:                         *
*   Earth System Grid (ESG) Data Node Software Stack, Version 1.0          *
*                                                                          *
*   For details, see http://esgf.org/esg-node/                    *
*   Please also read this link                                             *
*    http://esgf.org/LICENSE                                      *
*                                                                          *
*   * Redistribution and use in source and binary forms, with or           *
*   without modification, are permitted provided that the following        *
*   conditions are met:                                                    *
*                                                                          *
*   * Redistributions of source code must retain the above copyright       *
*   notice, this list of conditions and the disclaimer below.              *
*                                                                          *
*   * Redistributions in binary form must reproduce the above copyright    *
*   notice, this list of conditions and the disclaimer (as noted below)    *
*   in the documentation and/or other materials provided with the          *
*   distribution.                                                          *
*                                                                          *
*   Neither the name of the LLNS/LLNL nor the names of its contributors    *
*   may be used to endorse or promote products derived from this           *
*   software without specific prior written permission.                    *
*                                                                          *
*   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS    *
*   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT      *
*   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS      *
*   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL LAWRENCE    *
*   LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR     *
*   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,           *
*   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT       *
*   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF       *
*   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND    *
*   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,     *
*   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT     *
*   OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF     *
*   SUCH DAMAGE.                                                           *
*                                                                          *
***************************************************************************/

/**
   Description:
    
**/
package esg.gateway.service;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.impl.*;

import java.net.MalformedURLException;
import java.net.InetAddress;

import com.caucho.hessian.client.HessianProxyFactory;
import com.caucho.hessian.client.HessianRuntimeException;

import esg.common.Utils;
import esg.common.service.ESGRemoteEvent;
import esg.node.service.ESGDataNodeService;

public class ESGGatewayServiceImpl implements ESGGatewayService {

    private static final Log log = LogFactory.getLog(ESGGatewayServiceImpl.class);
    private HessianProxyFactory factory = null;
    private ESGDataNodeService datanodeService = null;

    public ESGGatewayServiceImpl() {
        log.info("ESGGatewayServiceImpl instantiated...");
        factory = new HessianProxyFactory();
    }

    //ingress ping request...
    public boolean ping() {
        log.trace("Gateway service got \"ping\"");
        return true;
    }

    //ingress registration request... returns registration event to remote caller's notify method...
    public void register(ESGRemoteEvent evt) {
        log.trace("Gateway service got \"register\" call from datanode with event: [" + evt + "]");

        //Triage incoming revent...
        if (evt.getMessageType() != ESGRemoteEvent.REGISTER) {
            log.trace("Registration called with wrong event type... dropping on floor...");
            return;
        }

        //Create the string for *our* callback address...
        String myLocation = null;
        try {
            myLocation = "http://" + InetAddress.getLocalHost().getCanonicalHostName() + "/esg-node/gateway";
        } catch (java.net.UnknownHostException ex) {
            log.error("Could not build proper location string for myself", ex);
        }

        //Create proxy endpoint for data node service that sent us this event.
        try {
            datanodeService = (ESGDataNodeService) factory.create(ESGDataNodeService.class, evt.getSource());
        } catch (MalformedURLException ex) {
            log.warn("Could not connect to serviceURL [" + evt.getSource() + "]", ex);
        }

        //Assemble info to create an event and send it to data node in response to this 'register' call.
        try {
            ESGRemoteEvent registrationResponseEvent = new ESGRemoteEvent(myLocation, ESGRemoteEvent.REGISTER,
                    Utils.nextSeq());
            log.trace("Completing Registration By Making Remote Call to \"notify\" method, sending: "
                    + registrationResponseEvent);
            //Since no longer as of 2011-04-25 supporting notify method on the datanode service... 
            //if(datanodeService.notify(registrationResponseEvent))
            //log.trace("Registration Request Successfully Submitted...");
            //else
            log.trace("Registration Request Rejected");
        } catch (HessianRuntimeException ex) {
            log.error("Problem calling \"register\" on [" + evt.getSource() + "] " + ex.getMessage());
        }
    }

    //ingress remote event to be handled....
    public void handleESGRemoteEvent(ESGRemoteEvent evt) {
        log.trace("Gateway service got \"handleESGRemoteEvent\" call with event: [" + evt + "]");
    }

}