Author: olegk
Date: Sun Aug 5 12:49:41 2012
New Revision: 1369567
URL: http://svn.apache.org/viewvc?rev=1369567&view=rev
Log:
Basic support for SSL connections; custom connection manager (presently just a
logging facade around BasicNIOConnPool)
Added:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFConnection.java
- copied, changed from r1369328,
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/LoggingNHttpClientConnection.java
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFConnectionManager.java
(with props)
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFPlainConnectionFactory.java
(with props)
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFSSLConnectionFactory.java
(with props)
Removed:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/LoggingNHttpClientConnection.java
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/LoggingNHttpClientConnectionFactory.java
Modified:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPTransportFactory.java
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/LoggingIOSession.java
Modified:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPTransportFactory.java
URL:
http://svn.apache.org/viewvc/cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPTransportFactory.java?rev=1369567&r1=1369566&r2=1369567&view=diff
==============================================================================
---
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPTransportFactory.java
(original)
+++
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPTransportFactory.java
Sun Aug 5 12:49:41 2012
@@ -37,6 +37,7 @@ import org.apache.cxf.transport.http.HTT
import org.apache.cxf.ws.addressing.EndpointReferenceType;
import org.apache.http.impl.DefaultConnectionReuseStrategy;
import org.apache.http.impl.nio.DefaultHttpClientIODispatch;
+import org.apache.http.impl.nio.pool.BasicNIOConnFactory;
import org.apache.http.impl.nio.pool.BasicNIOConnPool;
import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
import org.apache.http.impl.nio.reactor.IOReactorConfig;
@@ -117,15 +118,19 @@ public class AsyncHTTPTransportFactory e
// Create client-side HTTP protocol handler
HttpAsyncRequestExecutor protocolHandler = new
HttpAsyncRequestExecutor();
// Create client-side I/O event dispatch
- final LoggingNHttpClientConnectionFactory connFactory = new
LoggingNHttpClientConnectionFactory(params);
- final IOEventDispatch ioEventDispatch = new
DefaultHttpClientIODispatch(protocolHandler, connFactory);
+ final CXFPlainConnectionFactory plainConnFactory = new
CXFPlainConnectionFactory(params);
+ final CXFSSLConnectionFactory sslConnFactory = new
CXFSSLConnectionFactory(params);
+ final IOEventDispatch ioEventDispatch = new
DefaultHttpClientIODispatch(protocolHandler,
+ plainConnFactory);
// Create client-side I/O reactor
IOReactorConfig config = new IOReactorConfig();
config.setTcpNoDelay(true);
final ConnectingIOReactor ioReactor = new
DefaultConnectingIOReactor(config);
// Create HTTP connection pool
- pool = new BasicNIOConnPool(ioReactor, connFactory, params);
+ BasicNIOConnFactory poolConnFactory = new BasicNIOConnFactory(
+ plainConnFactory, sslConnFactory);
+ pool = new BasicNIOConnPool(ioReactor, poolConnFactory, params);
pool.setDefaultMaxPerRoute(1000);
pool.setMaxTotal(5000);
Copied:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFConnection.java
(from r1369328,
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/LoggingNHttpClientConnection.java)
URL:
http://svn.apache.org/viewvc/cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFConnection.java?p2=cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFConnection.java&p1=cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/LoggingNHttpClientConnection.java&r1=1369328&r2=1369567&rev=1369567&view=diff
==============================================================================
---
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/LoggingNHttpClientConnection.java
(original)
+++
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFConnection.java
Sun Aug 5 12:49:41 2012
@@ -35,7 +35,7 @@ import org.apache.http.params.HttpParams
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class LoggingNHttpClientConnection extends DefaultNHttpClientConnection
{
+class CXFConnection extends DefaultNHttpClientConnection {
private static final AtomicLong COUNT = new AtomicLong();
@@ -46,7 +46,7 @@ public class LoggingNHttpClientConnectio
private final String id;
- public LoggingNHttpClientConnection(
+ public CXFConnection(
final IOSession session,
final HttpResponseFactory responseFactory,
final ByteBufferAllocator allocator,
Added:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFConnectionManager.java
URL:
http://svn.apache.org/viewvc/cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFConnectionManager.java?rev=1369567&view=auto
==============================================================================
---
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFConnectionManager.java
(added)
+++
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFConnectionManager.java
Sun Aug 5 12:49:41 2012
@@ -0,0 +1,235 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.cxf.transport.http.asyncclient;
+
+import java.io.IOException;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.http.HttpHost;
+import org.apache.http.concurrent.BasicFuture;
+import org.apache.http.concurrent.FutureCallback;
+import org.apache.http.impl.nio.pool.BasicNIOConnPool;
+import org.apache.http.impl.nio.pool.BasicNIOPoolEntry;
+import org.apache.http.nio.NHttpClientConnection;
+import org.apache.http.nio.pool.NIOConnFactory;
+import org.apache.http.nio.reactor.ConnectingIOReactor;
+import org.apache.http.nio.reactor.IOEventDispatch;
+import org.apache.http.nio.reactor.IOReactorStatus;
+import org.apache.http.params.HttpParams;
+import org.apache.http.pool.PoolStats;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CXFConnectionManager {
+
+ private static final Logger LOG =
LoggerFactory.getLogger(BasicNIOConnPool.class);
+
+ private final ConnectingIOReactor ioreactor;
+ private final BasicNIOConnPool pool;
+
+ public CXFConnectionManager(
+ final ConnectingIOReactor ioreactor,
+ final NIOConnFactory<HttpHost, NHttpClientConnection> connFactory,
+ final long timeToLive,
+ final TimeUnit tunit,
+ final HttpParams params) {
+ super();
+ this.ioreactor = ioreactor;
+ this.pool = new BasicNIOConnPool(ioreactor, connFactory, params);
+ }
+
+ @Override
+ protected void finalize() throws Throwable {
+ try {
+ shutdown();
+ } finally {
+ super.finalize();
+ }
+ }
+
+ public void execute(final IOEventDispatch eventDispatch) throws
IOException {
+ this.ioreactor.execute(eventDispatch);
+ }
+
+ public IOReactorStatus getStatus() {
+ return this.ioreactor.getStatus();
+ }
+
+ public void shutdown(long waitMs) throws IOException {
+ LOG.debug("Connection manager is shutting down");
+ this.pool.shutdown(waitMs);
+ LOG.debug("Connection manager shut down");
+ }
+
+ public void shutdown() throws IOException {
+ LOG.debug("Connection manager is shutting down");
+ this.pool.shutdown(2000);
+ LOG.debug("Connection manager shut down");
+ }
+
+ private String format(final HttpHost route, final Object state) {
+ StringBuilder buf = new StringBuilder();
+ buf.append("[route: ").append(route).append("]");
+ if (state != null) {
+ buf.append("[state: ").append(state).append("]");
+ }
+ return buf.toString();
+ }
+
+ private String formatStats(final HttpHost route) {
+ StringBuilder buf = new StringBuilder();
+ PoolStats totals = this.pool.getTotalStats();
+ PoolStats stats = this.pool.getStats(route);
+ buf.append("[total kept alive:
").append(totals.getAvailable()).append("; ");
+ buf.append("route allocated: ").append(stats.getLeased() +
stats.getAvailable());
+ buf.append(" of ").append(stats.getMax()).append("; ");
+ buf.append("total allocated: ").append(totals.getLeased() +
totals.getAvailable());
+ buf.append(" of ").append(totals.getMax()).append("]");
+ return buf.toString();
+ }
+
+ private String format(final BasicNIOPoolEntry entry) {
+ StringBuilder buf = new StringBuilder();
+ buf.append("[id: ").append(entry.getId()).append("]");
+ buf.append("[route: ").append(entry.getRoute()).append("]");
+ Object state = entry.getState();
+ if (state != null) {
+ buf.append("[state: ").append(state).append("]");
+ }
+ return buf.toString();
+ }
+
+ public Future<BasicNIOPoolEntry> leaseConnection(
+ final HttpHost route,
+ final Object state,
+ final long connectTimeout,
+ final TimeUnit tunit,
+ final FutureCallback<BasicNIOPoolEntry> callback) {
+ if (route == null) {
+ throw new IllegalArgumentException("HTTP route may not be null");
+ }
+ if (tunit == null) {
+ throw new IllegalArgumentException("Time unit may not be null");
+ }
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Connection request: " + format(route, state) +
formatStats(route));
+ }
+ BasicFuture<BasicNIOPoolEntry> future = new
BasicFuture<BasicNIOPoolEntry>(callback);
+ this.pool.lease(route, state, connectTimeout, tunit, new
InternalPoolEntryCallback(future));
+ return future;
+ }
+
+ public void releaseConnection(
+ final BasicNIOPoolEntry entry,
+ final long keepalive,
+ final TimeUnit tunit) {
+ if (entry == null) {
+ throw new IllegalArgumentException("Pool entry may not be null");
+ }
+ if (tunit == null) {
+ throw new IllegalArgumentException("Time unit may not be null");
+ }
+ if (this.pool.isShutdown()) {
+ return;
+ }
+ this.pool.release(entry, !entry.isClosed());
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Connection released: " + format(entry) +
formatStats(entry.getRoute()));
+ }
+ }
+
+ public PoolStats getTotalStats() {
+ return this.pool.getTotalStats();
+ }
+
+ public PoolStats getStats(final HttpHost route) {
+ return this.pool.getStats(route);
+ }
+
+ public void setMaxTotal(int max) {
+ this.pool.setMaxTotal(max);
+ }
+
+ public void setDefaultMaxPerRoute(int max) {
+ this.pool.setDefaultMaxPerRoute(max);
+ }
+
+ public void setMaxPerRoute(final HttpHost route, int max) {
+ this.pool.setMaxPerRoute(route, max);
+ }
+
+ public int getMaxTotal() {
+ return this.pool.getMaxTotal();
+ }
+
+ public int getDefaultMaxPerRoute() {
+ return this.pool.getDefaultMaxPerRoute();
+ }
+
+ public int getMaxPerRoute(final HttpHost route) {
+ return this.pool.getMaxPerRoute(route);
+ }
+
+ public void closeIdleConnections(long idleTimeout, final TimeUnit tunit) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Closing connections idle longer than " + idleTimeout +
" " + tunit);
+ }
+ this.pool.closeIdle(idleTimeout, tunit);
+ }
+
+ public void closeExpiredConnections() {
+ LOG.debug("Closing expired connections");
+ this.pool.closeExpired();
+ }
+
+ class InternalPoolEntryCallback implements
FutureCallback<BasicNIOPoolEntry> {
+
+ private final BasicFuture<BasicNIOPoolEntry> future;
+
+ public InternalPoolEntryCallback(final BasicFuture<BasicNIOPoolEntry>
future) {
+ super();
+ this.future = future;
+ }
+
+ public void completed(final BasicNIOPoolEntry entry) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Connection leased: " + format(entry) +
formatStats(entry.getRoute()));
+ }
+ if (!this.future.completed(entry)) {
+ pool.release(entry, true);
+ }
+ }
+
+ public void failed(final Exception ex) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Connection request failed", ex);
+ }
+ this.future.failed(ex);
+ }
+
+ public void cancelled() {
+ LOG.debug("Connection request cancelled");
+ this.future.cancel(true);
+ }
+
+ }
+
+}
Propchange:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFConnectionManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFConnectionManager.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFConnectionManager.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFPlainConnectionFactory.java
URL:
http://svn.apache.org/viewvc/cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFPlainConnectionFactory.java?rev=1369567&view=auto
==============================================================================
---
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFPlainConnectionFactory.java
(added)
+++
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFPlainConnectionFactory.java
Sun Aug 5 12:49:41 2012
@@ -0,0 +1,53 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.cxf.transport.http.asyncclient;
+
+import org.apache.http.HttpResponseFactory;
+import org.apache.http.annotation.Immutable;
+import org.apache.http.impl.nio.DefaultNHttpClientConnection;
+import org.apache.http.impl.nio.DefaultNHttpClientConnectionFactory;
+import org.apache.http.nio.reactor.IOSession;
+import org.apache.http.nio.util.ByteBufferAllocator;
+import org.apache.http.params.HttpParams;
+
+@Immutable
+class CXFPlainConnectionFactory extends DefaultNHttpClientConnectionFactory {
+
+ public CXFPlainConnectionFactory(
+ final HttpResponseFactory responseFactory,
+ final ByteBufferAllocator allocator,
+ final HttpParams params) {
+ super(responseFactory, allocator, params);
+ }
+
+ public CXFPlainConnectionFactory(final HttpParams params) {
+ super(params);
+ }
+
+ @Override
+ protected DefaultNHttpClientConnection createConnection(
+ final IOSession session,
+ final HttpResponseFactory responseFactory,
+ final ByteBufferAllocator allocator,
+ final HttpParams params) {
+ return new CXFConnection(session, responseFactory, allocator, params);
+ }
+
+}
Propchange:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFPlainConnectionFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFPlainConnectionFactory.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFPlainConnectionFactory.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFSSLConnectionFactory.java
URL:
http://svn.apache.org/viewvc/cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFSSLConnectionFactory.java?rev=1369567&view=auto
==============================================================================
---
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFSSLConnectionFactory.java
(added)
+++
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFSSLConnectionFactory.java
Sun Aug 5 12:49:41 2012
@@ -0,0 +1,65 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.cxf.transport.http.asyncclient;
+
+import javax.net.ssl.SSLContext;
+
+import org.apache.http.HttpResponseFactory;
+import org.apache.http.annotation.Immutable;
+import org.apache.http.impl.nio.DefaultNHttpClientConnection;
+import org.apache.http.impl.nio.SSLNHttpClientConnectionFactory;
+import org.apache.http.nio.reactor.IOSession;
+import org.apache.http.nio.reactor.ssl.SSLSetupHandler;
+import org.apache.http.nio.util.ByteBufferAllocator;
+import org.apache.http.params.HttpParams;
+
+@Immutable
+class CXFSSLConnectionFactory extends SSLNHttpClientConnectionFactory {
+
+ public CXFSSLConnectionFactory(
+ final SSLContext sslcontext,
+ final SSLSetupHandler sslHandler,
+ final HttpResponseFactory responseFactory,
+ final ByteBufferAllocator allocator,
+ final HttpParams params) {
+ super(sslcontext, sslHandler, responseFactory, allocator, params);
+ }
+
+ public CXFSSLConnectionFactory(
+ final SSLContext sslcontext,
+ final SSLSetupHandler sslHandler,
+ final HttpParams params) {
+ super(sslcontext, sslHandler, params);
+ }
+
+ public CXFSSLConnectionFactory(final HttpParams params) {
+ super(params);
+ }
+
+ @Override
+ protected DefaultNHttpClientConnection createConnection(
+ final IOSession session,
+ final HttpResponseFactory responseFactory,
+ final ByteBufferAllocator allocator,
+ final HttpParams params) {
+ return new CXFConnection(session, responseFactory, allocator, params);
+ }
+
+}
Propchange:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFSSLConnectionFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFSSLConnectionFactory.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFSSLConnectionFactory.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/LoggingIOSession.java
URL:
http://svn.apache.org/viewvc/cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/LoggingIOSession.java?rev=1369567&r1=1369566&r2=1369567&view=diff
==============================================================================
---
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/LoggingIOSession.java
(original)
+++
cxf/sandbox/dkulp_async_clients/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/LoggingIOSession.java
Sun Aug 5 12:49:41 2012
@@ -30,12 +30,7 @@ import org.apache.http.nio.reactor.Sessi
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * Decorator class intended to transparently extend an {@link IOSession}
- * with basic event logging capabilities using Commons Logging.
- *
- */
-public class LoggingIOSession implements IOSession {
+class LoggingIOSession implements IOSession {
private static final Logger LOG = LoggerFactory.getLogger(IOSession.class);