我正在尝试从Ignite中读取Cassandra表的内容(充当缓存)。 该表格如下:
CREATE TABLE test.epc_table (
imsi text PRIMARY KEY,
data blob
)
数据blob用于存储C ++类对象(类名为'RtCassEpcTableDataVo')。
我正在尝试使用以下c ++程序传递'imsi'的值并获取相应的'数据'。
#include "ignite/ignite.h"
#include "ignite/ignition.h"
#include <iostream>
#include<string>
#include "RtCassEpcTableDataVo.hpp"
using namespace ignite;
using namespace cache;
using namespace std;
int main()
{
IgniteConfiguration cfg;
cfg.springCfgPath = "/home/ignite/apache-ignite-fabric-2.4.0-bin/config/cassandra-config.xml";
try
{
// Start a node.
Ignite ignite = Ignition::Start(cfg);
Cache<string,RtCassEpcTableDataVo> cache = ignite.GetCache<std::string, RtCassEpcTableDataVo>("cache1");
cout<<endl<<"Enter IMSI : ";
string l_imsi;
getline(cin>>ws,l_imsi);
RtCassEpcTableDataVo l_blob=cache.Get(l_imsi);
Ignition::StopAll(false);
}
catch (IgniteError& err)
{
std::cout << "An error occurred: " << err.GetText() << std::endl;
return err.GetCode();
}
std::cout << std::endl;
return 0;
}
但是,我收到了编译错误。
In file included from /usr/local/include/ignite/impl/binary/binary_writer_impl.h:32:0,
from /usr/local/include/ignite/binary/binary_raw_writer.h:30,
from /home/ignite/apache-ignite-fabric-2.4.0-bin/platforms/cpp/core/include/ignite/cache/query/query_scan.h:29,
from /home/ignite/apache-ignite-fabric-2.4.0-bin/platforms/cpp/core/include/ignite/impl/cache/cache_impl.h:21,
from /home/ignite/apache-ignite-fabric-2.4.0-bin/platforms/cpp/core/include/ignite/impl/ignite_impl.h:27,
from /home/ignite/apache-ignite-fabric-2.4.0-bin/platforms/cpp/core/include/ignite/ignite.h:26,
from sample.cpp:1:
/usr/local/include/ignite/impl/binary/binary_utils.h: In instantiation of âstatic T ignite::impl::binary::BinaryUtils::GetDefaultValue() [with T = RtCassEpcTableDataVo]â:
/home/ignite/apache-ignite-fabric-2.4.0-bin/platforms/cpp/core/include/ignite/impl/operations.h:349:62: required from âvoid ignite::impl::Out1Operation<T>::SetNull() [with T = RtCassEpcTableDataVo]â
sample.cpp:72:1: required from here
/usr/local/include/ignite/impl/binary/binary_utils.h:475:59: error: âGetNullâ is not a member of âignite::binary::BinaryType<RtCassEpcTableDataVo>â
ignite::binary::BinaryType<T>::GetNull(res);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
In file included from /usr/local/include/ignite/impl/binary/binary_object_impl.h:31:0,
from /usr/local/include/ignite/impl/binary/binary_writer_impl.h:35,
from /usr/local/include/ignite/binary/binary_raw_writer.h:30,
from /home/ignite/apache-ignite-fabric-2.4.0-bin/platforms/cpp/core/include/ignite/cache/query/query_scan.h:29,
from /home/ignite/apache-ignite-fabric-2.4.0-bin/platforms/cpp/core/include/ignite/impl/cache/cache_impl.h:21,
from /home/ignite/apache-ignite-fabric-2.4.0-bin/platforms/cpp/core/include/ignite/impl/ignite_impl.h:27,
from /home/ignite/apache-ignite-fabric-2.4.0-bin/platforms/cpp/core/include/ignite/ignite.h:26,
from sample.cpp:1:
/usr/local/include/ignite/impl/binary/binary_reader_impl.h: In instantiation of âvoid ignite::impl::binary::BinaryReaderImpl::ReadTopObject0(T&) [with T = RtCassEpcTableDataVo]â:
/usr/local/include/ignite/impl/binary/binary_type_impl.h:100:17: required from âstatic T ignite::binary::ReadHelper<T>::Read(R&) [with R = ignite::impl::binary::BinaryReaderImpl; T = RtCassEpcTableDataVo]â
/usr/local/include/ignite/impl/binary/binary_reader_impl.h:887:63: required from âT ignite::impl::binary::BinaryReaderImpl::ReadTopObject() [with T = RtCassEpcTableDataVo]â
/home/ignite/apache-ignite-fabric-2.4.0-bin/platforms/cpp/core/include/ignite/impl/operations.h:344:21: required from âvoid ignite::impl::Out1Operation<T>::ProcessOutput(ignite::impl::binary::BinaryReaderImpl&) [with T = RtCassEpcTableDataVo]â
sample.cpp:72:1: required from here
/usr/local/include/ignite/impl/binary/binary_reader_impl.h:1001:40: error: âReadâ is not a member of âBType {aka ignite::binary::BinaryType<RtCassEpcTableDataVo>}â
BType::Read(reader, res);
~~~~~~~~~~~^~~~~~~~~~~~~
/usr/local/include/ignite/impl/binary/binary_reader_impl.h: In instantiation of âT ignite::impl::binary::BinaryReaderImpl::GetNull() const [with T = RtCassEpcTableDataVo]â:
/usr/local/include/ignite/impl/binary/binary_reader_impl.h:905:45: required from âvoid ignite::impl::binary::BinaryReaderImpl::ReadTopObject0(T&) [with T = RtCassEpcTableDataVo]â
/usr/local/include/ignite/impl/binary/binary_type_impl.h:100:17: required from âstatic T ignite::binary::ReadHelper<T>::Read(R&) [with R = ignite::impl::binary::BinaryReaderImpl; T = RtCassEpcTableDataVo]â
/usr/local/include/ignite/impl/binary/binary_reader_impl.h:887:63: required from âT ignite::impl::binary::BinaryReaderImpl::ReadTopObject() [with T = RtCassEpcTableDataVo]â
/home/ignite/apache-ignite-fabric-2.4.0-bin/platforms/cpp/core/include/ignite/impl/operations.h:344:21: required from âvoid ignite::impl::Out1Operation<T>::ProcessOutput(ignite::impl::binary::BinaryReaderImpl&) [with T = RtCassEpcTableDataVo]â
sample.cpp:72:1: required from here
/usr/local/include/ignite/impl/binary/binary_reader_impl.h:1024:59: error: âGetNullâ is not a member of âignite::binary::BinaryType<RtCassEpcTableDataVo>â
ignite::binary::BinaryType<T>::GetNull(res);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
In file included from /usr/local/include/ignite/impl/binary/binary_writer_impl.h:30:0,
from /usr/local/include/ignite/binary/binary_raw_writer.h:30,
from /home/ignite/apache-ignite-fabric-2.4.0-bin/platforms/cpp/core/include/ignite/cache/query/query_scan.h:29,
from /home/ignite/apache-ignite-fabric-2.4.0-bin/platforms/cpp/core/include/ignite/impl/cache/cache_impl.h:21,
from /home/ignite/apache-ignite-fabric-2.4.0-bin/platforms/cpp/core/include/ignite/impl/ignite_impl.h:27,
from /home/ignite/apache-ignite-fabric-2.4.0-bin/platforms/cpp/core/include/ignite/ignite.h:26,
from sample.cpp:1:
/usr/local/include/ignite/impl/binary/binary_id_resolver.h: In instantiation of âint32_t ignite::impl::binary::TemplatedBinaryIdResolver<T>::GetTypeId() [with T = RtCassEpcTableDataVo; int32_t = int]â:
sample.cpp:72:1: required from here
/usr/local/include/ignite/impl/binary/binary_id_resolver.h:88:68: error: âGetTypeIdâ is not a member of âignite::binary::BinaryType<RtCassEpcTableDataVo>â
return ignite::binary::BinaryType<T>::GetTypeId();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
/usr/local/include/ignite/impl/binary/binary_id_resolver.h: In instantiation of âint32_t ignite::impl::binary::TemplatedBinaryIdResolver<T>::GetFieldId(int32_t, const char*) [with T = RtCassEpcTableDataVo; int32_t = int]â:
sample.cpp:72:1: required from here
/usr/local/include/ignite/impl/binary/binary_id_resolver.h:94:73: error: âGetFieldIdâ is not a member of âignite::binary::BinaryType<RtCassEpcTableDataVo>â
return ignite::binary::BinaryType<T>::GetFieldId(name);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
persistance-settings.xml如下:
<persistence keyspace="test" table="epc_table">
<keyPersistence class="java.lang.String" strategy="PRIMITIVE" column="imsi"/>
<valuePersistence column="data" />
</persistence>
我不明白为什么同样的程序工作(在cpp和persistence-setting.xml中有一些小的改动),当在其他表上使用时,即
CREATE TABLE test.table2 (
imsi text PRIMARY KEY,
data int
)
答案 0 :(得分:1)
您似乎没有为类型BinaryType
提供RtCassEpcTableDataVo
模板的专门化。如下所示:
class RtCassEpcTableDataVo {
friend struct ignite::binary::BinaryType<RtCassEpcTableDataVo>;
...
}
template<> struct ignite::binary::BinaryType<RtCassEpcTableDataVo> {
static void Write(BinaryWriter& writer, const RtCassEpcTableDataVo& obj) {
// writing data
// writer.Write...("attributename", obj.GetAttribute());
}
static void Read(BinaryReader& reader, RtCassEpcTableDataVo& dst) {
// reading data
// dst.attribute = reader.Read...("attributename");
}
...
}
可在此处找到全面的说明和示例:Object Serialization