[ 
https://issues.apache.org/jira/browse/GORA-497?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16063305#comment-16063305
 ] 

ASF GitHub Bot commented on GORA-497:
-------------------------------------

Github user djkevincr commented on a diff in the pull request:

    https://github.com/apache/gora/pull/110#discussion_r124050129
  
    --- Diff: 
gora-cassandra-cql/src/main/java/org/apache/gora/cassandra/store/CassandraStore.java
 ---
    @@ -0,0 +1,788 @@
    +/*
    + *  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.gora.cassandra.store;
    +
    +import com.datastax.driver.core.Cluster;
    +import com.datastax.driver.core.ConsistencyLevel;
    +import com.datastax.driver.core.HostDistance;
    +import com.datastax.driver.core.KeyspaceMetadata;
    +import com.datastax.driver.core.PoolingOptions;
    +import com.datastax.driver.core.ProtocolOptions;
    +import com.datastax.driver.core.ProtocolVersion;
    +import com.datastax.driver.core.QueryOptions;
    +import com.datastax.driver.core.Session;
    +import com.datastax.driver.core.SocketOptions;
    +import com.datastax.driver.core.TableMetadata;
    +import com.datastax.driver.core.TypeCodec;
    +import com.datastax.driver.core.policies.ConstantReconnectionPolicy;
    +import com.datastax.driver.core.policies.DCAwareRoundRobinPolicy;
    +import com.datastax.driver.core.policies.DefaultRetryPolicy;
    +import com.datastax.driver.core.policies.DowngradingConsistencyRetryPolicy;
    +import com.datastax.driver.core.policies.ExponentialReconnectionPolicy;
    +import com.datastax.driver.core.policies.FallthroughRetryPolicy;
    +import com.datastax.driver.core.policies.LatencyAwarePolicy;
    +import com.datastax.driver.core.policies.LoggingRetryPolicy;
    +import com.datastax.driver.core.policies.RoundRobinPolicy;
    +import com.datastax.driver.core.policies.TokenAwarePolicy;
    +import com.datastax.driver.mapping.Mapper;
    +import com.datastax.driver.mapping.MappingManager;
    +import org.apache.gora.cassandra.bean.CassandraKey;
    +import org.apache.gora.cassandra.bean.ClusterKeyField;
    +import org.apache.gora.cassandra.bean.Field;
    +import org.apache.gora.cassandra.bean.KeySpace;
    +import org.apache.gora.cassandra.bean.PartitionKeyField;
    +import org.apache.gora.persistency.BeanFactory;
    +import org.apache.gora.persistency.Persistent;
    +import org.apache.gora.query.PartitionQuery;
    +import org.apache.gora.query.Query;
    +import org.apache.gora.query.Result;
    +import org.apache.gora.store.DataStore;
    +import org.apache.gora.store.DataStoreFactory;
    +import org.jdom.Attribute;
    +import org.jdom.Document;
    +import org.jdom.Element;
    +import org.jdom.JDOMException;
    +import org.jdom.input.SAXBuilder;
    +import org.slf4j.Logger;
    +import org.slf4j.LoggerFactory;
    +
    +import java.io.IOException;
    +import java.util.ArrayList;
    +import java.util.List;
    +import java.util.Locale;
    +import java.util.Properties;
    +
    +/**
    + * Implementation of Cassandra Store.
    + *
    + * @param <K> key class
    + * @param <T> persistent class
    + */
    +public class CassandraStore<K, T extends Persistent> implements 
DataStore<K, T> {
    +
    +  private static final String DEFAULT_MAPPING_FILE = 
"gora-cassandra-mapping.xml";
    +
    +  public static final Logger LOG = 
LoggerFactory.getLogger(CassandraStore.class);
    +
    +  private BeanFactory<K, T> beanFactory;
    +
    +  private Cluster cluster;
    +
    +  private Class keyClass;
    +
    +  private Class persistentClass;
    +
    +  private CassandraMapping mapping;
    +
    +  private boolean isUseNativeSerialization;
    +
    +  private Mapper<T> mapper;
    +
    +  private Session session;
    +
    +  public CassandraStore() {
    +    super();
    +  }
    +
    +  /**
    +   * In initializing the cassandra datastore, read the mapping file, 
creates the basic connection to cassandra cluster,
    +   * according to the gora properties
    +   *
    +   * @param keyClass        key class
    +   * @param persistentClass persistent class
    +   * @param properties      properties
    +   */
    +  public void initialize(Class<K> keyClass, Class<T> persistentClass, 
Properties properties) {
    +    LOG.debug("Initializing Cassandra store");
    +    try {
    +      this.keyClass = keyClass;
    +      this.persistentClass = persistentClass;
    +      String mappingFile = DataStoreFactory.getMappingFile(properties, 
this, DEFAULT_MAPPING_FILE);
    +      List<String> codecs = readCustomCodec(properties);
    +      mapping = readMapping(mappingFile);
    +      isUseNativeSerialization = 
Boolean.parseBoolean(properties.getProperty(CassandraStoreParameters.USE_CASSANDRA_NATIVE_SERIALIZATION));
    +      Cluster.Builder builder = Cluster.builder();
    +      builder = populateSettings(builder, properties);
    +      this.cluster = builder.build();
    +      if (codecs != null) {
    +        registerCustomCodecs(codecs);
    +      }
    +      this.session = this.cluster.connect();
    +      if (isUseNativeSerialization) {
    +        this.createSchema();
    +        MappingManager mappingManager = new MappingManager(session);
    +        mapper = mappingManager.mapper(persistentClass);
    +      }
    +
    +    } catch (Exception e) {
    +      LOG.error("Error while initializing Cassandra store: {}",
    +              new Object[]{e.getMessage()});
    +      throw new RuntimeException(e);
    +    }
    +  }
    +
    +  private void registerCustomCodecs(List<String> codecs) throws Exception {
    +    for (String codec : codecs) {
    +      
this.cluster.getConfiguration().getCodecRegistry().register((TypeCodec<?>) 
Class.forName(codec).newInstance());
    +    }
    +  }
    +
    +  /**
    +   * In this method we reads the mapping file and creates the Cassandra 
Mapping.
    +   *
    +   * @param filename mapping file name
    +   * @return @{@link CassandraMapping}
    +   * @throws IOException
    +   */
    +  private CassandraMapping readMapping(String filename) throws IOException 
{
    +    CassandraMapping map = new CassandraMapping();
    --- End diff --
    
    It is lot more clean to move this code to separate mapping builder class.


> Migrate CassandraThrift to CQL 
> -------------------------------
>
>                 Key: GORA-497
>                 URL: https://issues.apache.org/jira/browse/GORA-497
>             Project: Apache Gora
>          Issue Type: Improvement
>          Components: gora-cassandra
>            Reporter: Madhawa Gunasekara
>            Assignee: Madhawa Gunasekara
>              Labels: gsoc2017
>             Fix For: 0.8
>
>




--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to