[ 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)