2015-12-08 49 views
5

Datastax 3.x驅動程序中現在有很多API已經消失。他們被用來做'框架'級驅動器包裝類我有。升級對Datastax Java API的調用3

https://github.com/datastax/java-driver/tree/3.0/upgrade_guide

升級指南沒有提供如何取代被去除的API的調用的例子(我在乎呢)。這裏有幾個缺少的,我試圖升級我的代碼。任何'取代'了他們的想法?

DataType.serialize(Object value, ProtocolVersion protocolVersion) 
DataType.deserialize(ByteBuffer bytes, ProtocolVersion protocolVersion) 
DataType.asJavaClass() 
DataType.Name.asJavaClass() 

現在應該調用API調用這些方法的任何幫助。

+0

這個問題,並提供答案應該是可以在卡桑德拉昇級文檔。我正在尋找同樣的問題!謝謝! – Philipp

回答

3

項目#2通過自定義編解碼器引用對數據類型的更改。 A TypeCodec不再附加到DataType,因爲在3.0版本的驅動程序中,您可以爲數據類型定義自己的編解碼器。因此這些方法不再通過DataType直接提供。

自定義編解碼器(JAVA-721)引入了幾個重大更改並修改了一些運行時行爲。

這是打破API變更的詳細列表:

...

數據類型有TypeCodec沒有更多的引用,使之與序列化和數據類型的反序列化處理的最方法已被刪除:

  • 字節緩衝區的serialize(對象值,ProtocolVersion protocolVersion)

  • 對象deseri艾莉婕(ByteBuffer的字節,ProtocolVersion protocolVersion)

  • 類asJavaClass()

Custom Codecs應提供您需要使用解決TypeCodec它完成一切需要的,如果你有DataType細節CodecRegistry.codecForTypeCodec解析默認編解碼器的靜態方法。 TypeCodec提供你所需要的方法,即:

TypeCodec<Long> bigIntCodec = TypeCodec.bigint(); 
bigIntCodec.serialize(10L, protocolVersion); 
bigIntCodec.deserialize(bytes, protocolVersion); 
Class<?> clazz = bigIntCodec.getJavaType().getRawType(); 
+0

非常感謝,節省了我很多時間! – Philipp