阿里云
阿里云多端小程序中小企业获客首选
发表主题 回复主题
  • 7716阅读
  • 2回复

[教程]OTS新版本Java SDK升级教程与答疑帖

发帖
53
云币
164
— 本帖被 ots 执行加亮操作(2015-11-12) —
>.-4CJ])d  
昨天OTS刚刚发布了新版本的JavaSDK(新版本JavaSDK发布地址), 这个版本的SDK提供了非常多的新特性, T9uOOI  
我们也计划在论坛中推出一系列SDK的使用教程、最佳实践、常见问题等文章,而今天本帖主打的是“Java SDK老用户如何升级到新版本?”。 y:Aha#<  
-#,4rN#  
1. OTS的新版Java SDK发布了,我是老用户,如何升级到新版本的SDK? 2x~Pq_?y  
(1)如果您是将jar包添加到项目中,在发布地址中下载新的压缩包,压缩包中包含了以下文件: ? 0+N  
F:8@ ]tA&  
jtgj h\Nt  
`x;m@\R  
如果您使用过老版本的SDK,相信对添加jar包的过程肯定很熟悉了。 m;!X{CV  
ots-public-2.1.jar就是SDK的jar包了,lib下是SDK依赖的一些jar包, (,b\"Q  
把SDK的jar包跟依赖的jar包添加到您的项目中,替换掉原来添加的jar包就好了。 (6&"(}Pai  
>96+s)T%;  
(2)如果您是使用maven管理项目的,在pom.xml文件中把原来的依赖项换成下面的就可以了: #"fn;  
$@84nR{>  
<dependency>   e@iz`~[  
  <groupId>com.aliyun.openservices</groupId> z>)lp$  
  <artifactId>ots-public</artifactId> ,\N4tG1\  
  <version>2.1</version> TSVlZy~Xo  
</dependency> .@$ A~/ YU  
e$E>6Ngsr  
2. 升级之后需要我改代码吗,怎么改? 5F#FC89Kk  
首先非常抱歉,新版本的SDK与老版本SDK还是有几处不兼容的,主要在包名与配置上,不过改动也很小,迁移非常容易。 HubK  
我下面以一份代码为例,介绍如何从老版本SDK升级到新版本。 >ByqM{?  
|XV`A)=f  
以下是针对2.0.4的老版本SDK的代码: Z+=-)&L  
import com.aliyun.openservices.ClientException; wj5,_d)  
import com.aliyun.openservices.ServiceException; {7%(m|(  
import com.aliyun.openservices.ots.OTSClient; 4/OmgBo '  
import com.aliyun.openservices.ots.OTSErrorCode;  btBu[;  
import com.aliyun.openservices.ots.model.CapacityUnit; v# e*RI2}  
import com.aliyun.openservices.ots.model.Condition; 5 9i2*<k  
import com.aliyun.openservices.ots.model.ColumnValue; >=;hnLu  
import com.aliyun.openservices.ots.model.CreateTableRequest; ZD4aT1|Q7  
import com.aliyun.openservices.ots.model.GetRowRequest; A (H2Gt D  
import com.aliyun.openservices.ots.model.GetRowResult; (LJ7xoJ^  
import com.aliyun.openservices.ots.model.PrimaryKeyType; ! Y&]Y G  
import com.aliyun.openservices.ots.model.PrimaryKeyValue; I'[;E.KU  
import com.aliyun.openservices.ots.model.PutRowRequest; C_yNSD  
import com.aliyun.openservices.ots.model.PutRowResult; BqUwvB4  
import com.aliyun.openservices.ots.model.Row; ^m AxV7k  
import com.aliyun.openservices.ots.model.RowExistenceExpectation; ta^$&$l  
import com.aliyun.openservices.ots.model.RowPrimaryKey; {rn^  
import com.aliyun.openservices.ots.model.RowPutChange; =woP~+  
import com.aliyun.openservices.ots.model.SingleRowQueryCriteria; ^E.mG>  
import com.aliyun.openservices.ots.model.TableMeta; xxwbX6^d  
RxNLn/?d@  
/** 9e.$x%7j  
* 该示例代码包含了如何创建OTS表; _>;{+XRX[  
* 如何向表中插入一条数据 '-cayG   
* 以及如何从表中查询一条数据。 T Qx<lw  
* DiGHo~f  
*/ B I=57  
public class OTSSingleDataSample { A.h0H]*Ma  
l/"!}wF  
    private static final String COLUMN_GID_NAME = "gid"; D7m uf  
    private static final String COLUMN_UID_NAME = "uid"; Br.UN~q  
    private static final String COLUMN_NAME_NAME = "name"; '=xO?2U-Z  
TK%q}bK,  
    public static void main(String args[]) { 5NhAb$q2Y  
        final String endPoint = "<your endpoint>"; *ae)<l3v  
        final String accessId = "<your access id>"; )1gT&sU0  
        final String accessKey = "<your access key>"; _+H $Pa}?  
        final String instanceName = "<your instance name>"; Q7{{r&|t&  
wXZ9@(^  
        OTSClient client = new OTSClient(endPoint, accessId, accessKey, instanceName); eu~ u-}.  
        final String tableName = "sampleTable"; +U%epq  
"5'eiYm s  
        try{ w'XSkI_ay  
            // 创建表 eVB43]g  
            createTable(client, tableName); X.FoX  
G l2WbY  
            // 注意:创建表只是提交请求,OTS创建表需要一段时间。 :eT\XtxM~{  
            // 这里简单地等待10秒,请根据您的实际逻辑修改。 H q?F@X  
            Thread.sleep(10000); &4 #%xg  
            // 插入一条数据。 *5?Qam3  
            putRow(client, tableName); 'o*\ N%  
            // 再取回来看看。 aBQ@n  
            getRow(client, tableName); zAvI f  
        }catch(ServiceException e){ #<U@SMv  
            System.err.println("操作失败,详情:" + e.getMessage()); b$_qG6)IJO  
            // Request ID可以用于有问题时联系客服诊断异常。 g& f)WQ(  
            System.err.println("Request ID:" + e.getRequestId()); 0NU3% 4?  
        }catch(ClientException e){ tFX<"cAvK  
            // 可能是网络不好或者是返回结果有问题 cKOXsdH?SL  
            System.err.println("请求失败,详情:" + e.getMessage()); 59v=\; UI  
        } catch (InterruptedException e) { iT s" RW  
            System.err.println(e.getMessage()); |9Yx`_DF  
        } vjh'<5w9Wi  
    } g\?07@Zd|  
*~cNUyd  
    private static void createTable(OTSClient client, String tableName) ~X %cbFom=  
            throws ServiceException, ClientException{ Xc^(e?L4  
        TableMeta tableMeta = new TableMeta(tableName); 3RxR'M1  
        tableMeta.addPrimaryKeyColumn(COLUMN_GID_NAME, PrimaryKeyType.INTEGER); KL9JA; "  
        tableMeta.addPrimaryKeyColumn(COLUMN_UID_NAME, PrimaryKeyType.INTEGER); )8n?.keq  
        // 将该表的读写CU都设置为100 rg#/kd<?[V  
        CapacityUnit capacityUnit = new CapacityUnit(100, 100); (2"4PU8  
        CreateTableRequest request = new CreateTableRequest(); YcR: _ac  
        request.setTableMeta(tableMeta); VkJTcC:1  
        request.setReservedThroughput(capacityUnit); g2*}XS 3  
        client.createTable(request);  xB?!nd  
NS+uiy  
        System.out.println("表已创建"); xG Y!r"[  
    } 7~ZG"^k  
RZSEcRlN  
    private static void putRow(OTSClient client, String tableName) YnDaB px  
            throws ServiceException, ClientException{ IM[=]j.?  
        RowPutChange rowChange = new RowPutChange(tableName); .>PwbZ  
        RowPrimaryKey primaryKey = new RowPrimaryKey(); ~x_(v,NW  
        primaryKey.addPrimaryKeyColumn(COLUMN_GID_NAME, PrimaryKeyValue.fromLong(1)); aO9\8\^  
        primaryKey.addPrimaryKeyColumn(COLUMN_UID_NAME, PrimaryKeyValue.fromLong(101)); sk0/3X*Q%  
        rowChange.setPrimaryKey(primaryKey); 9)j"|5H  
        rowChange.addAttributeColumn(COLUMN_NAME_NAME, ColumnValue.fromString("张三")); '-G,7!.,r%  
        rowChange.setCondition(new Condition(RowExistenceExpectation.EXPECT_NOT_EXIST)); W=|'&UU Ul  
2(e;pM2Dq  
        PutRowRequest request = new PutRowRequest(); 4j i#Q  
        request.setRowChange(rowChange); /w2IL7}  
_+}hId  
        PutRowResult result = client.putRow(request); 5"q{b1  
        int consumedWriteCU = result.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit(); 4K4u]"1  
A,= R`m  
        System.out.println("成功插入数据, 消耗的写CapacityUnit为:" + consumedWriteCU); zx"0^r}  
    } Yx ;j  
tEibxE  
    private static void getRow(OTSClient client, String tableName) qPhVc9D#  
            throws ServiceException, ClientException{ &;Go CU Le  
6+PP(>em  
        SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(tableName); (.{."  
        RowPrimaryKey primaryKeys = new RowPrimaryKey(); Gt!Hm(  
        primaryKeys.addPrimaryKeyColumn(COLUMN_GID_NAME, PrimaryKeyValue.fromLong(1)); fKuaom9  
        primaryKeys.addPrimaryKeyColumn(COLUMN_UID_NAME, PrimaryKeyValue.fromLong(101)); v yP_qG  
        criteria.setPrimaryKey(primaryKeys); (KfdN'vW  
R9+f^o` W  
        GetRowRequest request = new GetRowRequest(); W^3'9nYU  
        request.setRowQueryCriteria(criteria); 1'B=JyR~K  
        GetRowResult result = client.getRow(request); !yV)EJ:$  
        Row row = result.getRow(); U?(,Z$:N  
R/^;,.  
        int consumedReadCU = result.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit(); 9@*4^Ks p  
        System.out.println("本次读操作消耗的读CapacityUnit为:" + consumedReadCU); rj5)b:c}  
        System.out.println("name信息:" + row.getColumns().get(COLUMN_NAME_NAME)); P|aSbsk:I<  
    } lPlJL`e  
} \}Pr!tk!  
我们替换成新的SDK后,发生了什么 x6=tS  
^$lsmF]^  
有两个类找不到了,import部分变成了红色,对应代码里也如此,如下: Q?9eu%G6I  
fAvB!e  
]d&;QZ#w  
这是因为新版本的SDK与OSS服务的SDK分离了,只包含OTS的SDK,所以这两个类的路径也移到了OTS的package下面。 TR{dNO!q  
有经验的Java程序员肯定知道如何解决这个问题,因为IDE可以智能的帮我们找到这个类嘛。 !|Y&h0e  
其实这两个文件都挪到了com.aliyun.openservices.ots的目录下面,所以只需要在路径中间加上ots,如下: Aq/wa6^%  
 +!wkTrV  
好,红色没有了,我的程序又可以跑通了 k_%maJkXp  
咦,为什么程序跑完之后进程没有退出呢,非常抱歉,这是新版本SDK使用的一个异步网络库导致的,需要您在业务代码中调用一下client的shutdown方法。 %,)Xi  
在新版本中,使用完一个OTSClient对象后,必须主动调用OTSClient的shutdown方法释放底层连接库使用的线程、连接资源。 Mz6|#P}.s  
改动非常简单,加一句代码就好了,如下图中红色框框标示的部分。 %E2C4UbY  
q.lh  
至此,这份代码就改造完毕了。如果您在升级过程中遇到问题,可以随时寻求我们帮助哦。 UAdj [m61  
0j{KZy  
3. 新版本有好多新功能,我该怎么使用? rX&?Xi1JeV  
我们后续会推出更多文章来介绍这些新功能的使用方式,敬请期待。 JhB$s  
I~c}&'V  
2wgdrO|B  
#DH eEE  
最后,如果您有任何问题需要咨询我们,欢迎在下方留言哦,我们会第一时间解答~! Cd7d-'EQn  
d _koF-7  
_Hq)mF  
[ 此帖被ots在2015-11-11 13:19重新编辑 ]
Your time is limited, so don't waste it living someone else's life
级别: 小白
发帖
29
云币
29
只看该作者 沙发  发表于: 2015-11-12
ReOTS新版本Java SDK升级教程与答疑帖
贴心棉袄
级别: 新人
发帖
17
云币
20
只看该作者 板凳  发表于: 2015-11-12
ReOTS新版本Java SDK升级教程与答疑帖
赞,这个不错
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: 88 - 63 = ?
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)