/* * 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 com.stratio.deep.core.extractor.client; import java.util.List; import javax.net.ssl.SSLException; import org.apache.spark.Partition; import com.stratio.deep.commons.config.ExtractorConfig; import com.stratio.deep.commons.exception.DeepExtractorInitializationException; import com.stratio.deep.commons.querybuilder.UpdateQueryBuilder; import com.stratio.deep.commons.rdd.IExtractor; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.ssl.SslContext; import io.netty.handler.ssl.util.InsecureTrustManagerFactory; /** * The extractor client. */ public class ExtractorClient<T> implements IExtractor<T, ExtractorConfig<T>> { static final boolean SSL = System.getProperty("ssl") != null; static final String HOST = System.getProperty("host", "127.0.0.1"); static final int PORT = Integer.parseInt(System.getProperty("port", "8463")); private static final long serialVersionUID = -7076154908311072669L; private transient EventLoopGroup group = new NioEventLoopGroup(); private transient Channel ch; private ExtractorClientHandler<T> handler; public ExtractorClient initialize() throws DeepExtractorInitializationException { try { // Configure SSL. final SslContext sslCtx; if (SSL) { sslCtx = SslContext.newClientContext(InsecureTrustManagerFactory.INSTANCE); } else { sslCtx = null; } Bootstrap b = new Bootstrap(); b.group(group).channel(NioSocketChannel.class).handler(new ExtractorClientInitializer<T>(sslCtx)); // Make a new connection. this.ch = b.connect(HOST, PORT).sync().channel(); // Get the handler instance to initiate the request. this.handler = ch.pipeline().get(ExtractorClientHandler.class); } catch (SSLException | InterruptedException e) { throw new DeepExtractorInitializationException(e); } return this; } public void finish() { ch.close(); group.shutdownGracefully(); } @Override public boolean hasNext() { return handler.hasNext(); } @Override public T next() { return handler.next(); } @Override public void initIterator(Partition dp, ExtractorConfig<T> config) { handler.initIterator(dp, config); } @Override public void saveRDD(T t) { handler.saveRDD(t); } @Override public void initSave(ExtractorConfig<T> config, T first, UpdateQueryBuilder queryBuilder) { handler.initSave(config, first, queryBuilder); } @Override public List<String> getPreferredLocations(Partition split) { return null; } @Override public void close() { handler.close(); return; } /* * (non-Javadoc) * * @see com.stratio.deep.rdd.IDeepRDD#getPartitions(IDeepJobConfig, int) */ @Override public Partition[] getPartitions(ExtractorConfig<T> config) { return this.handler.getPartitions(config); } }