Java 用于'的ProtocolID;持续时间';卡桑德拉有线电视协议?

Java 用于'的ProtocolID;持续时间';卡桑德拉有线电视协议?,java,jdbc,cassandra,datastax-java-driver,Java,Jdbc,Cassandra,Datastax Java Driver,这本书很棒,但有点过时了。例如,它的目标是Java 1.6,使用密钥库(datastax)的3.0.0版,最终版本为3.8.0(当前版本为4.4),等等。它可以连接到Cassandra 3.x,但缺少一些最新的功能 我们已经能够完成这个项目,并将datastax库更新为3.8.0,但我一直在添加“duration”数据类型。有一个表(似乎)将数据类型的wire协议的protocolId映射到实现它的包装器类。我搜索了datastax代码(它支持这种数据类型)和cassandra代码,但由于所有内

这本书很棒,但有点过时了。例如,它的目标是Java 1.6,使用密钥库(datastax)的3.0.0版,最终版本为3.8.0(当前版本为4.4),等等。它可以连接到Cassandra 3.x,但缺少一些最新的功能

我们已经能够完成这个项目,并将datastax库更新为3.8.0,但我一直在添加“duration”数据类型。有一个表(似乎)将数据类型的wire协议的
protocolId
映射到实现它的包装器类。我搜索了datastax代码(它支持这种数据类型)和cassandra代码,但由于所有内容都使用enum(耶!)而不是更不透明的protocolId,所以我完全找不到正确的值。。。但我一直无法找到Cassadra服务器端的关联位置

所以有两个问题。首先,这个项目是否已经有了一个分支来增加对“duration”类型的支持?(我希望能够对项目及其分支进行代码搜索。)

第二,协议id是什么/在哪里定义

在这一点上,我几乎准备好添加一些工具,以便“unknown codec”消息添加更多细节。它可以工作,但可能很脆弱

关于JDBC与CQL的注意事项:我们当前的代码是几年前由重用我们广泛的JDBC基础结构的人编写的。它“足够好”,但需要维护JDBC驱动程序。现在很清楚,我们应该重构代码以使用CQL,但这需要时间来编写和测试,客户现在需要一个解决方案。我们找到了一个商业解决方案,但它与我们的系统不兼容,因为我们从mongo存储而不是文件系统加载JAR。(别问)用叉子叉这个司机给了我们喘息的空间

如果有帮助,请参见
com.github.adejanovski.cassandra.jdbc
中的表:

public enum DataTypeEnum {
    ASCII     (1,  String.class, DataType.Name.ASCII),
    BIGINT    (2,  Long.class, DataType.Name.BIGINT),
    BLOB      (3,  ByteBuffer.class, DataType.Name.BLOB),
    BOOLEAN   (4,  Boolean.class, DataType.Name.BOOLEAN),
    COUNTER   (5,  Long.class, DataType.Name.COUNTER),
    DECIMAL   (6,  BigDecimal.class, DataType.Name.DECIMAL),
    DOUBLE    (7,  Double.class, DataType.Name.DOUBLE),
    FLOAT     (8,  Float.class, DataType.Name.FLOAT),
    INET      (16, InetAddress.class, DataType.Name.INET),
    INT       (9,  Integer.class, DataType.Name.INT),
    TEXT      (10, String.class, DataType.Name.TEXT),
    TIMESTAMP (11, Date.class, DataType.Name.TIMESTAMP),
    UUID      (12, UUID.class, DataType.Name.UUID),
    VARCHAR   (13, String.class, DataType.Name.VARCHAR),
    VARINT    (14, BigInteger.class, DataType.Name.VARINT),
    TIMEUUID  (15, UUID.class, DataType.Name.TIMEUUID),
    LIST      (32, List.class, DataType.Name.LIST),
    SET       (34, Set.class, DataType.Name.SET),
    MAP       (33, Map.class, DataType.Name.MAP),
    UDT       (48, UDTValue.class, DataType.Name.UDT),
    TUPLE     (49, TupleValue.class, DataType.Name.TUPLE),
    CUSTOM    (0,  ByteBuffer.class, DataType.Name.CUSTOM),       
    SMALLINT  (19, Integer.class, DataType.Name.SMALLINT),
    TINYINT   (20, Integer.class, DataType.Name.TINYINT),
    DATE      (17, Date.class, DataType.Name.DATE),
    TIME      (18, Date.class, DataType.Name.TIME),
    DURATION  (???, Duration.class, DataType.Name.DURATION);

    final int protocolId;
    final Class<?> javaType;
    final Name cqlType;

    private static final DataTypeEnum[] nameToIds;
    private static final Map<DataType.Name, DataTypeEnum> cqlDataTypeToDataType;
公共枚举数据类型枚举{
ASCII(1,String.class,DataType.Name.ASCII),
BIGINT(2,Long.class,DataType.Name.BIGINT),
BLOB(3,ByteBuffer.class,DataType.Name.BLOB),
布尔值(4,BOOLEAN.class,DataType.Name.BOOLEAN),
计数器(5,Long.class,DataType.Name.COUNTER),
DECIMAL(6,BigDecimal.class,DataType.Name.DECIMAL),
DOUBLE(7,DOUBLE.class,DataType.Name.DOUBLE),
FLOAT(8,FLOAT.class,DataType.Name.FLOAT),
INET(16,InetAddress.class,DataType.Name.INET),
INT(9,Integer.class,DataType.Name.INT),
文本(10,String.class,DataType.Name.TEXT),
时间戳(11,Date.class,DataType.Name.TIMESTAMP),
UUID(12,UUID.class,DataType.Name.UUID),
VARCHAR(13,String.class,DataType.Name.VARCHAR),
VARINT(14,BigInteger.class,DataType.Name.VARINT),
TIMEUUID(15,UUID.class,DataType.Name.TIMEUUID),
列表(32,LIST.class,DataType.Name.LIST),
SET(34,SET.class,DataType.Name.SET),
MAP(33,MAP.class,DataType.Name.MAP),
UDT(48,UDTValue.class,DataType.Name.UDT),
TUPLE(49,TupleValue.class,DataType.Name.TUPLE),
自定义(0,ByteBuffer.class,DataType.Name.CUSTOM),
SMALLINT(19,Integer.class,DataType.Name.SMALLINT),
TINYINT(20,Integer.class,DataType.Name.TINYINT),
日期(17,DATE.class,DataType.Name.DATE),
时间(18,Date.class,DataType.Name.TIME),
持续时间(???,DURATION.class,DataType.Name.DURATION);
最终int-protocolId;
最终类javaType;
最终名称cqlType;
私有静态最终DataTypeEnum[]nameToIds;
私有静态最终映射cqlDataTypeToDataType;

类型的代码及其编码信息在中定义-此类型具有标识符0x15(21)。您也可以在中找到所有代码