
# Java SDK Demo
本节提供一个基于Java SDK的Demo，帮助用户开发自己的Java客户端应用程序。
![](https://support.huaweicloud.com/devg-bcs/public_sys-resources/note_3.0-zh-cn.png)
本Demo仅适用于Hyperledger Fabric增强版的区块链实例。
#### 准备工作
1. [开通CloudIDE](https://support.huaweicloud.com/usermanual-cloudide/purchase_cloudide.html)（或者用户自己准备JDK、maven和eclipse/IntelliJ IDEA）。
   CloudIDE是软件开发生产线 CodeArts的云端开发环境服务，向开发者提供按需配置、快速获取的工作空间（包含编辑器和运行环境）。
   在CloudIDE上创建一个空的Java工程，如[图1]所示。
   图1CloudIDE上创建一个空的Java工程   
   ![](https://support.huaweicloud.com/devg-bcs/zh-cn_image_0000001127938089.gif "点击放大") 
2. 下载Java SDK示例源码，获取方法：登录区块链服务管理控制台，进入"应用案例"，在"Java示例Demo-Java SDK Demo"下方，单击"App_Java_Src_Demo"中Java项目源码的"下载"按钮。
3. 购买区块链实例、安装链代码及实例化链代码操作，请参见《快速入门》。请参见[《快速入门》](https://support.huaweicloud.com/qs-bcs/bcs_qs_0003.html)。
 
#### 部署应用
1. 下载SDK和证书。
   1. 在"实例管理"页面，选择"Hyperledger Fabric增强版"页签，单击对应实例卡片上的"获取客户端配置"。
   
   2. 勾选"SDK文件"，SDK配置参数如下：
      
      | **参数名称**   | **说明**                            |
      |:---|:---|
      | 链代码名称      | chaincodedemo                     |
      | 证书存放路径     | /home/user/javasdkdemo_src/config |
      | 通道名称       | channel                           |
      | 组织\&Peer节点 | 选择通道中所有节点组织                       |
         
      勾选"共识节点证书"。
      勾选"Peer节点证书"，指定节点组织选择organization，勾选"管理员证书"。
      
   
   3. 单击"下载"，下载SDK配置文件、demo-orderer组织的管理员证书和organization组织的管理员证书。
    
2. 复制并解压。
   1. 先下载工程源代码javasdkdemo_src.zip文件并解压。 获取方法：登录区块链服务管理控制台，进入"应用案例"，在"Java示例Demo-Java SDK Demo"下方，单击"App_Java_Src_Demo"中Java项目源码的"下载"按钮。
      
   
   2. 将[1]步骤中的zip文件解压，把configs文件夹中的orderer文件夹、peer文件夹、sdk-config.json、sdk-config.yaml文件全部复制到javasdkdemo_src目录下的config目录下。然后再将javasdkdemo_src目录压缩成javasdkdemo_src.zip包。
    
3. 部署应用。
   1. 将新压缩的javasdkdemo_src工程源代码javasdkdemo_src.zip文件上传到CloudIDE开发环境中。 CloudIDE编译工程如下所示：
      ![](https://support.huaweicloud.com/devg-bcs/zh-cn_image_0000001127759849.gif "点击放大")
      
   
   2. 打开工程后等待一会，会自动下载工程依赖的包，然后按下图操作执行Run，就会得到预期结果。
      ![](https://support.huaweicloud.com/devg-bcs/public_sys-resources/caution_3.0-zh-cn.png)
      - javasdkdemo工程中config目录下**demo-channel-sdk-config.yaml** 文件，必须与javasdkdemo/src/main/java/handler/Main.java文件中helper.setConfigCtx("config/**demo-channel-sdk-config.yaml**")代码路径相同，保证可以正常运行Main.java。
      
      - 客户端app交易的时候，如果指定了未实例化的组织和peer，那么首次交易会超时失败，请您重新运行即可正常交易。
       
      ![](https://support.huaweicloud.com/devg-bcs/zh-cn_image_0000001080740704.png "点击放大")
      每成功执行一次，表示向区块链存入一对键值对，\<testuser,100\>；在区块链上查询键值为testuser的value值为100。也可以通过区块链浏览器可以查看交易记录。
      
    
 
#### 通过内存传入私钥
如果用户需要对私钥文件进行加密，并在demo中解密后传入FabricSDK。
对于MSP私钥：在FabricHelper文件的genFabricUser函数中，按如下方式调用函数：
```
//从配置文件指定路径下读取加密过的MSP私钥
String adminPrivateKeyString = extractPemString(msp, "keystore");  
//对adminPrivateKeyString 进行解密得到decryptedKey字符串
//将解密后的MSP私钥重新赋值给变量adminPrivateKeyString 
String adminPrivateKeyString = decryptedKey;
```
![](https://support.huaweicloud.com/devg-bcs/public_sys-resources/note_3.0-zh-cn.png)
当前不支持通过内存传入TLS私钥。
#### 常用接口
Fabric-sdk-java的使用主要分为：加密套件配置，通道操作，链码操作。
加密套件配置部分，根据配置文件内容，设置SDK里面的加密套件服务提供者、 加密类型、安全级别等。
- 通道操作包括：通道查询、通道创建、通道加入、通道删除等。
- 链码操作包括：链码安装、链码实例化、链码查询、链码调用等。
使用Fabric-sdk-java主要会使用HFClient和Channel两个类，其导入路径分别为：org.hyperledger.fabric.sdk.HFClient和org.hyperledger.fabric.sdk.Channel。
[更多的api接口请参考Fabric官网](https://hyperledger.github.io/fabric-gateway-java/release-1.4/)。
