ch.cern.hbase.thirdparty.io.netty.example.objectecho.ObjectEchoServer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hbase-shaded-netty Show documentation
Show all versions of hbase-shaded-netty Show documentation
Pulls down netty.io, relocates nd then makes a fat new jar with them all in it.
The newest version!
/*
* Copyright 2012 The Netty Project
*
* The Netty Project 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 ch.cern.hbase.thirdparty.io.netty.example.objectecho;
import ch.cern.hbase.thirdparty.io.netty.bootstrap.ServerBootstrap;
import ch.cern.hbase.thirdparty.io.netty.channel.ChannelInitializer;
import ch.cern.hbase.thirdparty.io.netty.channel.ChannelPipeline;
import ch.cern.hbase.thirdparty.io.netty.channel.EventLoopGroup;
import ch.cern.hbase.thirdparty.io.netty.channel.nio.NioEventLoopGroup;
import ch.cern.hbase.thirdparty.io.netty.channel.socket.SocketChannel;
import ch.cern.hbase.thirdparty.io.netty.channel.socket.nio.NioServerSocketChannel;
import ch.cern.hbase.thirdparty.io.netty.example.echo.EchoServer;
import ch.cern.hbase.thirdparty.io.netty.handler.codec.serialization.ClassResolvers;
import ch.cern.hbase.thirdparty.io.netty.handler.codec.serialization.ObjectDecoder;
import ch.cern.hbase.thirdparty.io.netty.handler.codec.serialization.ObjectEncoder;
import ch.cern.hbase.thirdparty.io.netty.handler.logging.LogLevel;
import ch.cern.hbase.thirdparty.io.netty.handler.logging.LoggingHandler;
import ch.cern.hbase.thirdparty.io.netty.handler.ssl.SslContext;
import ch.cern.hbase.thirdparty.io.netty.handler.ssl.SslContextBuilder;
import ch.cern.hbase.thirdparty.io.netty.handler.ssl.util.SelfSignedCertificate;
/**
* Modification of {@link EchoServer} which utilizes Java object serialization.
*/
public final class ObjectEchoServer {
static final boolean SSL = System.getProperty("ssl") != null;
static final int PORT = Integer.parseInt(System.getProperty("port", "8007"));
public static void main(String[] args) throws Exception {
// Configure SSL.
final SslContext sslCtx;
if (SSL) {
SelfSignedCertificate ssc = new SelfSignedCertificate();
sslCtx = SslContextBuilder.forServer(ssc.certificate(), ssc.privateKey()).build();
} else {
sslCtx = null;
}
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new ChannelInitializer() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline p = ch.pipeline();
if (sslCtx != null) {
p.addLast(sslCtx.newHandler(ch.alloc()));
}
p.addLast(
new ObjectEncoder(),
new ObjectDecoder(ClassResolvers.cacheDisabled(null)),
new ObjectEchoServerHandler());
}
});
// Bind and start to accept incoming connections.
b.bind(PORT).sync().channel().closeFuture().sync();
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
}