Hi.  I have 2 questions regarding Ignite & Cassandra.

I'm using Ignite v1.8

I'm trying to get a very simple example working with read/write through to
c*, but I'm having some difficulty.

First, I'm trying to use the POJO strategy of configuration for both the key
& value persistence with the class fieldnames slightly different than the
column names, but defined in the @QuerySqlField(name="blah") annotation of
the POJO.  However, when it runs, I'm getting a "IgniteException: Failed to
prepare Cassandra CQL statement: insert into <keyspace>.
" and all of the column names are the lowercase names of the class field and
not what is defined in the annotation.  What's my problem? 
(configuration/class info to follow at the bottom)

Second, none of my "java.sql.Timestamp" fields are showing up in the insert
statement generated in the exception.  My c* columns are defined as
"timestamp" fields and what I've seen seems to indicate that those should be
"java.sql.Timestamp" datatypes, but it's not working.  How do I get my
Timestamp fields to be recognized?


===================
Ignite Exception:

[Mule] 2016-12-16 09:13:21,901  WARN 
-com.datastax.driver.core.ReplicationStrategy$NetworkTopologyStrategy.computeTokenToReplicaMap(ReplicationStategy.java:198)
 
- Error while computing token map for keyspace dev_cirad with datacenter
dc1: could not achieve replication factor 3 (found 0 replicas only), check
your keyspace replication settings.
[09:13:22,324][SEVERE][main][CassandraCacheStore] Failed to execute
Cassandra CQL statement: insert into "mykeyspace"."HistoryResult"
("histname", "sessionid", "vin", "createdby", "modifiedby", "results")
values (?,?,?,?,?,?) using ttl 2592000;
class org.apache.ignite.IgniteException: Failed to execute Cassandra CQL
statement: insert into "mykeyspace"."HistoryResult" ("histname",
"sessionid", "vin", "createdby", "modifiedby", "results") values
(?,?,?,?,?,?) using ttl 2592000;
        at
org.apache.ignite.cache.store.cassandra.session.CassandraSessionImpl.execute(CassandraSessionImpl.java:163)

Caused by: class org.apache.ignite.IgniteException: Failed to prepare
Cassandra CQL statement: insert into "mykeyspace"."HistoryResult"
("histname", "sessionid", "vin", "createdby", "modifiedby", "results")
values (?,?,?,?,?,?) using ttl 2592000;
        at
org.apache.ignite.cache.store.cassandra.session.CassandraSessionImpl.prepareStatement(CassandraSessionImpl.java:615)
        at
org.apache.ignite.cache.store.cassandra.session.CassandraSessionImpl.execute(CassandraSessionImpl.java:133)
        ... 20 more
Caused by: com.datastax.driver.core.exceptions.InvalidQueryException:
Unknown identifier histname
        at
com.datastax.driver.core.exceptions.InvalidQueryException.copy(InvalidQueryException.java:50)
        at
com.datastax.driver.core.DriverThrowables.propagateCause(DriverThrowables.java:37)
        at
com.datastax.driver.core.AbstractSession.prepare(AbstractSession.java:98)
        at
org.apache.ignite.cache.store.cassandra.session.CassandraSessionImpl.prepareStatement(CassandraSessionImpl.java:597)
        ... 21 more

===================
cassandra-ignite.xml

<beans xmlns="http://www.springframework.org/schema/beans";
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd";>

    
    <import resource="classpath:cassandra-connection-settings.xml" />

    
    <bean id="HistoryResultCache_persistence_settings"
class="org.apache.ignite.cache.store.cassandra.persistence.KeyValuePersistenceSettings">
        <constructor-arg type="org.springframework.core.io.Resource"
value="classpath:cassandra-persistence-settings.xml" />
    </bean>

    <bean id="ignite.cfg"
class="org.apache.ignite.configuration.IgniteConfiguration">
        
        <property name="peerClassLoadingEnabled" value="true"/>

        
        <property name="discoverySpi">
            <bean
class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    
                    
                    
                    <bean
class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
                        <property name="addresses">
                            <list>
                                
                                <value>127.0.0.1:47500..47509</value>
                            </list>
                        </property>
                    </bean>
                </property>
            </bean>
        </property>

        <property name="cacheConfiguration">
            <list>
                <bean
class="org.apache.ignite.configuration.CacheConfiguration">
                    <property name="name" value="HistoryResult" />
                    <property name="readThrough" value="true" />
                    <property name="writeThrough" value="true" />
                    
                    <property name="cacheStoreFactory">
                        <bean
class="org.apache.ignite.cache.store.cassandra.CassandraCacheStoreFactory">
                            
                            <property name="dataSourceBean"
value="cassandraAdminDataSource" />
                            
                            <property name="persistenceSettingsBean"
value="HistoryResultCache_persistence_settings" />
                        </bean>
                    </property>
                </bean>
            </list>
        </property>
    </bean>
</beans>


===================
cassandra-connection-settings.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans";
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
       xmlns:util="http://www.springframework.org/schema/util";
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util.xsd";>

    <bean id="loadBalancingPolicy"
class="com.datastax.driver.core.policies.TokenAwarePolicy">
        <constructor-arg
type="com.datastax.driver.core.policies.LoadBalancingPolicy">
            <bean
class="com.datastax.driver.core.policies.RoundRobinPolicy"/>
        </constructor-arg>
    </bean>

    <util:list id="contactPoints" value-type="java.lang.String">
            <value>127.0.0.1</value>
    </util:list>

    <bean id="cassandraAdminDataSource"
class="org.apache.ignite.cache.store.cassandra.datasource.DataSource">
        <property name="contactPoints" ref="contactPoints"/>
        <property name="user" value="user"/>
        <property name="password" value="p@ssw0rd"/>
        <property name="readConsistency" value="ONE"/>
        <property name="writeConsistency" value="ONE"/>
        <property name="loadBalancingPolicy" ref="loadBalancingPolicy"/>
    </bean>
</beans>

===================
cassandra-persistence-settings.xml

<persistence keyspace="mykeyspace" table="HistoryResult" ttl="2592000">
        <tableOptions>
                comment = 'Test table for Ignite/Cassandra connection'
                AND read_repair_chance = 0.2
        </tableOptions>

        <keyPersistence class="com.gm.model.HistoryResultKey" strategy="POJO" />

        <valuePersistence class="com.gm.model.HistoryResult" strategy="POJO" />
</persistence>

===================
HistoryResultKey.java

public class HistoryResultKey {
        @AffinityKeyMapped
        @QuerySqlField(index=true, groups={"historyResultPK"})
        private String vin;

        @QuerySqlField(index=true, groups={"historyResultPK"}, 
name="session_id")
        private String sessionId;
    
        @QuerySqlField(index=true, groups={"historyResultPK"}, name="hist_name")
        private String histName;

    public HistoryResultKey() {
        // No op.
    }

===================
HistoryResult.java

public class HistoryResult {
        @QuerySqlField
    private String vin;

        @QuerySqlField(name="session_id")
        private String sessionId;

        @QuerySqlField(name="session_time")
        private Timestamp sessionTime;

        @QuerySqlField(name="hist_name")
    private String histName;

        @QueryTextField
    private String results;

        @QuerySqlField(name="analysis_time")
    private Timestamp analysisTime;

        @QuerySqlField(name="created_dt")
    private Timestamp createdDate;

        @QuerySqlField(name="created_by")
    private String createdBy;

        @QuerySqlField(name="modified_dt")
    private Timestamp modifiedDate;

        @QuerySqlField(name="modified_by")
    private String modifiedBy;

    public HistoryResult() {
        // no op
    }

===================
TestCassandraPersistence.java

public class TestCassandraPersistence {
        /** Cache name. */
        private static final String CACHE_NAME =
HistoryResult.class.getSimpleName();

        /** Global HistoryResultKey to use across entire example. */
        private static HistoryResultKey key = new HistoryResultKey("vin1",
"sessionId1", "histName2");

        public static void main(String[] args) {
                try (Ignite ignite = 
Ignition.start("resources/cassandra-ignite.xml")) {
                        System.out.println(StringUtils.EMPTY);
                        System.out.println(">>> Cache store example started.");

                        try (IgniteCache<HistoryResultKey, HistoryResult> cache 
= ignite
                                        .getOrCreateCache(new 
CacheConfiguration<HistoryResultKey,
HistoryResult>(CACHE_NAME))) {

                                // Write to C*
                                HistoryResult result = 
generateHistoryResultFromKey(key);
                                System.out.println(String.format(">>> Putting 
to C*.  Key: [%s], Result:
[%s]", key, result));
                                cache.put(key, result);

                                // Clear cache
                                System.out.println(StringUtils.EMPTY);
                                System.out.println(">>> Clearing cache...");
                                cache.clear(key);

                                // Read from C*
                                System.out.println(StringUtils.EMPTY);
                                System.out.println(">>> Cache retrieve example 
started.");
                                HistoryResult result2 = cache.get(key);
                                System.out.println(String.format(">>> Read from 
C*.  Key: [%s], Result:
[%s]", key, result2));
                        }
                        System.out.println(StringUtils.EMPTY);
                }
        }

        private static HistoryResult 
generateHistoryResultFromKey(HistoryResultKey
key) {
                HistoryResult result = null;
                if (key != null) {
                        result = new HistoryResult(key.getVin(), 
key.getSessionId(),
Timestamp.valueOf(LocalDateTime.now()),
                                        key.getHistName(), "results-" + 
LocalDateTime.now(),
Timestamp.valueOf(LocalDateTime.now()),
                                        Timestamp.valueOf(LocalDateTime.now()), 
"creator",
Timestamp.valueOf(LocalDateTime.now()),
                                        "updater");
                }
                return result;
        }
}



--
View this message in context: 
http://apache-ignite-users.70518.x6.nabble.com/Ignite-with-Cassandra-questions-errors-tp9607.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.

Reply via email to