package org.jacorb.transport; /* * JacORB - a free Java ORB * * Copyright (C) 1997-2014 Gerald Brose / The JacORB Team. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ import java.util.Iterator; import java.util.List; import org.jacorb.config.Configurable; import org.jacorb.config.Configuration; import org.jacorb.config.ConfigurationException; import org.jacorb.orb.giop.TransportListener; import org.omg.CORBA.LocalObject; import org.slf4j.Logger; /** * * A default implementation of the * * @see org.jacorb.transport.Current interface. Provides access to information * about a Transport - the Traits. * * @author Iliyan Jeliazkov * */ public class DefaultCurrentImpl extends LocalObject implements Current, TransportListener, Configurable { private int statistics_provider_index_ = -1; /** * ctor */ public DefaultCurrentImpl() { } @Override public void configure(Configuration configuration) throws ConfigurationException { logger_ = configuration.getLogger("org.jacorb.transport.current"); // Plug-in a statistics provider, we know how to use List statsProviderClassNames = configuration.getAttributeList( "jacorb.connection.statistics_providers"); statsProviderClassNames.add(DefaultStatisticsProvider.class.getName()); StringBuffer buff = new StringBuffer(); for (Iterator iter = statsProviderClassNames.iterator (); iter.hasNext ();) { buff.append (iter.next ()); if (iter.hasNext ()) buff.append (','); } configuration.setAttribute("jacorb.connection.statistics_providers", buff.toString()); statistics_provider_index_ = statsProviderClassNames.size () - 1; } // // TCPConnectionListener interface // @Override public void transportSelected(Event event) { tss_transport_event_.set (event); if (logger_.isInfoEnabled ()) { logger_.info ("Transport selected " + event); } } /** * Retrieves the last event for the current thread. * * @return Event * @throws NoContext */ protected Event getLatestTransportCurentEvent() throws NoContext { Event e = (Event) tss_transport_event_.get (); if (e == null) { if (logger_.isErrorEnabled ()) { logger_.error ("No events were available. Is traits() called outside of an upcall or interceptor?"); } throw new NoContext (); } return e; } /** * A thread-specific storage for the Transport the thread has chosen. Null, * if no transport has been chosen yet. */ private static final ThreadLocal tss_transport_event_ = new ThreadLocal (); /** * A logger. */ private Logger logger_; @Override public int id() throws NoContext { Event e = getLatestTransportCurentEvent(); return e.hashCode(); } @Override public long bytes_sent() throws NoContext { Event e = getLatestTransportCurentEvent(); DefaultStatisticsProvider p = (DefaultStatisticsProvider)e.getStatisticsProvider (statistics_provider_index_); return p.bytes_sent_; } @Override public long bytes_received() throws NoContext { Event e = getLatestTransportCurentEvent(); DefaultStatisticsProvider p = (DefaultStatisticsProvider)e.getStatisticsProvider (statistics_provider_index_); return p.bytes_received_; } @Override public long messages_sent() throws NoContext { Event e = getLatestTransportCurentEvent(); DefaultStatisticsProvider p = (DefaultStatisticsProvider)e.getStatisticsProvider (statistics_provider_index_); return p.messages_sent_; } @Override public long messages_received() throws NoContext { Event e = getLatestTransportCurentEvent(); DefaultStatisticsProvider p = (DefaultStatisticsProvider)e.getStatisticsProvider (statistics_provider_index_); return p.messages_received_; } @Override public long open_since() throws NoContext { Event e = getLatestTransportCurentEvent(); DefaultStatisticsProvider p = (DefaultStatisticsProvider)e.getStatisticsProvider (statistics_provider_index_); return p.created_; } }