java - Ignite C++ 客户端用于 cassandra 集成

标签 java c++ cassandra ignite

我正在开发一个数据通信应用程序,我想通过 ignite c++ 与 cassandra 进行通信。当我尝试将数据放入 cassandra 时,它工作正常。但我无法从中获取数据。 这是我的代码。

test.h

namespace ignite
{
    namespace examples
    {
        struct Test
        {
            Test()
            {
                // No-op.
            }

            Test(const std::string& assetid, const std::string& asset_desc, const std::string& groupid) :
                assetid (assetid), asset_desc (asset_desc), groupid (groupid)
            {
                // No-op.
            }

            std::string ToString()
            {
                std::ostringstream oss;

                oss << "Address [street=" << assetid << ", zip=" << asset_desc<< "]";

                return oss.str();
            }

            std::string assetid;
            std::string asset_desc;
            std::string groupid;
        };
    }
}

cassandra-config.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"
       xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- Cassandra connection settings -->
    <import resource="file:connection-settings.xml" />

    <!-- Persistence settings for 'cache1' -->
    <bean id="cache1_persistence_settings" class="org.apache.ignite.cache.store.cassandra.persistence.KeyValuePersistenceSettings">
    <constructor-arg type="org.springframework.core.io.Resource" value="file:persistence-settings-1.xml" />
    </bean>

    <!-- Persistence settings for 'cache2' 
    <bean id="cache2_persistence_settings" class="org.apache.ignite.cache.store.cassandra.persistence.KeyValuePersistenceSettings">
    <constructor-arg type="org.springframework.core.io.Resource" value="classpath:org/apache/ignite/tests/persistence/blob/persistence-settings-3.xml" />
    </bean>-->

    <!-- Ignite configuration -->
    <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="cacheConfiguration">
        <list>
            <!-- Configuring persistence for "cache1" cache -->
            <bean class="org.apache.ignite.configuration.CacheConfiguration">
                <property name="name" value="cache1"/>
<property name="queryEntities">
        <list>
            <bean class="org.apache.ignite.cache.QueryEntity">
                <property name="keyType" value="Test"/>
                <property name="valueType" value="Test"/>
                <property name="fields">
                    <map>
                        <!--entry key="assetid" value="assetid"/-->
                        <entry key="asset_desc" value="asset_desc"/>
                        <entry key="groupid" value="groupid"/>
                    </map>
                </property>
            </bean>
        </list>
    </property>
                <property name="readThrough" value="true"/>
                <property name="writeThrough" value="true"/>
            <property name="storeKeepBinary" value="true"/>
                <property name="cacheStoreFactory">
                    <bean class="org.apache.ignite.cache.store.cassandra.CassandraCacheStoreFactory">
                        <property name="dataSourceBean" value="cassandraAdminDataSource"/>
                        <property name="persistenceSettingsBean" value="cache1_persistence_settings"/>
                    </bean>
                </property>
            </bean>

            <!-- Configuring persistence for "cache2" cache
            <bean class="org.apache.ignite.configuration.CacheConfiguration">
                <property name="name" value="cache2"/>
                <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="cache2_persistence_settings"/>
                    </bean>
                </property>
            </bean>
                 -->
        </list>
    </property>

    <!-- Explicitly configure TCP discovery SPI to provide list of initial nodes. -->
    <property name="discoverySpi">
        <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
            <property name="ipFinder">
                <!--
                    Ignite provides several options for automatic discovery that can be used
                    instead os static IP based discovery. For information on all options refer
                    to our documentation: http://apacheignite.readme.io/docs/cluster-config
                -->
                <!-- Uncomment static IP finder to enable static-based discovery of initial nodes. -->
                <!--<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">-->
                <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
                    <property name="addresses">
                        <list>
                            <!-- In distributed environment, replace with actual host IP address. -->
                            <value>127.0.0.1:47500..47509</value>
                        </list>
                    </property>
                </bean>
            </property>
        </bean>
    </property>
    </bean>
</beans>

连接设置.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>

持久性设置.xml

<persistence keyspace="sam" table="user_permission">
    <keyPersistence class="com.test.Test" strategy="POJO">
        <partitionKey>
            <!-- Mapping from POJO field to Cassandra table column -->
            <field name="assetid" column="assetid" />
        </partitionKey>
    </keyPersistence>
    <valuePersistence class="com.test.Test" strategy="POJO">
        <!-- Mapping from POJO field to Cassandra table column -->
        <!-- field name="companyid" column="companyid" />
        <field name="company_name" column="company_name" /-->>
        <field name="assetid" column="assetid"/>
        <field name="asset_desc" column="asset_desc"/>
        <field name="groupid" column="groupid"/>
    </valuePersistence>
</persistence>

主要内容

int main()
{
    IgniteConfiguration cfg;
    cfg.springCfgPath = "apache-ignite-fabric-2.0.0-bin/cassandra-config.xml";
    Ignite grid = Ignition::Start(cfg);
    Cache<Test, Test> cache = grid.GetCache<Test, Test>("cache1");
 Test test;
test.assetid = "456dsfds";
Test obj;
obj.asset_desc = "wdsdfsf";
obj.groupid = "sddvwfsf";
cache.Put (test, obj,err);

Test get = cache.Get (test, err);
cout << "Error Found" << err.GetText () << endl;
cout << "Ignite \t" << "\t" << get.asset_desc << "\t" << get.groupid;
}

测试.jar

package com.test;


import java.io.Serializable;

import org.apache.ignite.binary.BinaryObjectException;
import org.apache.ignite.binary.BinaryReader;
import org.apache.ignite.binary.BinaryWriter;
import org.apache.ignite.binary.Binarylizable;
import org.apache.ignite.cache.query.annotations.QuerySqlField;

public class Test  implements Binarylizable ,Serializable{

            /**
            * 
             */
            private static final long serialVersionUID = 1L;
            String assetid;
            @QuerySqlField(index = true)
            String asset_desc;

            String groupid;


            public String getGroupId() {
                            return groupid;
            }
            public void setGroupId(String groupId) {
                            this.groupid = groupId;
            }
            public String getAssetid() {
                            return assetid;
            }
            public void setAssetid(String assetid) {
                            this.assetid = assetid;
            }
            public String getAsset_desc() {
                            return asset_desc;
            }
            public void setAsset_desc(String asset_desc) {
                            this.asset_desc = asset_desc;
            }
            @Override
            public void readBinary(BinaryReader reader) throws BinaryObjectException {
                            assetid = reader.readString("assetid");
                            asset_desc = reader.readString("asset_desc");
                            groupid =  reader.readString("groupid");


            }
            @Override
            public void writeBinary(BinaryWriter writer) throws BinaryObjectException {
                            writer.writeString("assetid", assetid);
                 writer.writeString("asset_desc", asset_desc);
                 writer.writeString("groupid", groupid);

            }


}

它显示这样的错误

拓扑快照 [ver=1、服务器=1、客户端=0、CPU=1、堆=0.97GB] [16:14:20,834][错误][sys-#29%null%][CassandraCacheStore]无法执行Cassandra CQL语句:从“sam”中选择“assetid”,“asset_desc”,“groupid”。“user_permission”,其中“ Assets ”=?和“asset_desc”=?和“groupid”=?; org.apache.ignite.IgniteException 类:无法执行 Cassandra CQL 语句:从“sam”中选择“assetid”、“asset_desc”、“groupid”。“user_permission”,其中“assetid”=?和“asset_desc”=?和“groupid”=?;

最佳答案

我认为这是因为你正在使用这个:

<property name="storeKeepBinary" value="true"/>

当前实现仅支持二进制对象的 BLOB 序列化。有一张票:https://issues.apache.org/jira/browse/IGNITE-5270

关于java - Ignite C++ 客户端用于 cassandra 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44178514/

相关文章:

java - 将表单数据从 PDF 传递到 iText 中的 servlet

c++ - 使用 std::accumulate 计算 vector 元素总和的最准确方法是什么?

c++ - 无法成功生成 std​​::set 输出到文件和控制台

java - 尝试通过 hector API 连接到 cassandra 时出错

cassandra - 没有足够的副本可用于一致性 SERIAL 查询(需要 2 个,但只有 1 个事件)

java - 找到多于一行具有给定标识符的行

java - 使用 servletContextListener 将属性文件值加载到 web.xml 中

java - 连续读取套接字的所有输入

c++ - 继承:将 derived& 作为 arg 传递给期望 base& 的函数

cassandra - 位置 7 处的语法错误 : unexpected "*" for `Select * FROM mytable;`