
# Gateway Java Demo
本节提供一个基于Fabric Gateway Java的Demo，Fabric Gateway Java对Java SDK进行了封装，简化了代码量，帮助用户开发自己的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_0000001180547241.gif "点击放大") 
2. 下载Java SDK示例源码，获取方法：登录区块链服务管理控制台，进入"应用案例"，在"Java示例Demo-Java SDK Demo"下方，单击"App_Gateway_Java_Demo"中Java项目源码的"下载"按钮。
3. 购买区块链实例、安装链代码及实例化链代码操作，请参见《快速入门》。请参见[《快速入门》](https://support.huaweicloud.com/qs-bcs/bcs_qs_0003.html)。
 
#### 部署应用
1. 下载SDK和证书。
   1. 在"实例管理"页面，选择"Hyperledger Fabric增强版"页签，单击对应实例卡片上的"获取客户端配置"。
   
   2. 勾选"SDK文件"，SDK配置参数如下：
      
      | **参数名称**   | **说明**                            |
      |:---|:---|
      | 链代码名称      | chaincodedemo                     |
      | 证书存放路径     | /home/user/gatewayjavademo/config |
      | 通道名称       | channel                           |
      | 组织\&Peer节点 | 选择通道中所有节点组织                       |
         
      勾选"共识节点证书"。
      勾选"Peer节点证书"，指定节点组织选择organization，勾选"管理员证书"。
      
   
   3. 单击"下载"，下载SDK配置文件、demo-orderer组织的管理员证书和organization组织的管理员证书。
    
2. 复制并解压。
   1. 先下载工程源代码gatewayjavademo.zip文件并解压。 获取方法：登录区块链服务管理控制台，进入"应用案例"，在"Java示例Demo-Java SDK Demo"下方，单击"App_Gateway_Java_Demo"中Java项目源码的"下载"按钮。
      
   
   2. 将[1]步骤中的zip文件解压，把configs文件夹中的orderer文件夹、peer文件夹、sdk-config.json、sdk-config.yaml文件全部复制到gatewayjavademo目录下的config目录下。然后再将gatewayjavademo目录压缩成gatewayjavademo.zip包。
    
3. 部署应用。
   1. 将新压缩的gatewayjavademo工程源代码gatewayjavademo.zip文件上传到CloudIDE开发环境中。 CloudIDE编译工程如下所示：
      ![](https://support.huaweicloud.com/devg-bcs/zh-cn_image_0000001186796047.gif "点击放大")
      
   
   2. 打开工程后等待一会，会自动下载工程依赖的包，然后按下图操作执行Run，就会得到预期结果。 ![](https://support.huaweicloud.com/devg-bcs/zh-cn_image_0000001183687971.png "点击放大")
      ![](https://support.huaweicloud.com/devg-bcs/public_sys-resources/caution_3.0-zh-cn.png)
      - gatewayjavademo工程中config目录下**demo-channel-sdk-config.yaml** 文件，必须与gatewayjavademo/src/main/java/handler/Main.java和MainForMultiTask文件中helper.setConfigCtx("config/**demo-channel-sdk-config.yaml**")代码路径相同，保证可以正常运行Main.java。
      
      - 客户端app交易的时候，如果指定了未实例化的组织和peer，那么首次交易会超时失败，请您重新运行即可正常交易。
       
      每次成功执行Main.java，将会执行basicTransactionSample、commitListenerSample、contractListenerSample、blockListenerSample四个方法，向区块链存入多对键值对；可以通过区块链浏览器可以查看交易记录。
      
    
 
#### 常用接口
使用Fabric-Gateway-Java发起交易和查询，主要用到Network和Contract两类的接口，[更多的api接口请参考Fabric官网](https://hyperledger.github.io/fabric-gateway-java/release-2.2/)。
- **Network**
  主要有以下常用的接口：
  
  | 接口名称                | 描述                      | 参数值                                                        | 返回值                                               |
  |:---|:---|:---|:---|
  | getContract         | 获取Contract实例的接口         | String chaincodeId                                         | Contract                                          |
  | addBlockListener    | 设置监听器的接口，监听区块事件         | Consumer\<org.hyperledger.fabric.sdk.BlockEvent\> listener | Consumer\<org.hyperledger.fabric.sdk.BlockEvent\> |
  | getChannel          | 获取与network相关联channel的接口 | /                                                          | org.hyperledger.fabric.sdk.Channel                |
  | removeBlockListener | 移除监听器的接口                | Consumer\<org.hyperledger.fabric.sdk.BlockEvent\> listener | void                                              |
     
  
- **Contract**
  主要有以下常用的接口：
  
  | 接口名称                    | 描述                      | 参数值                                | 返回值                                |
  |:---|:---|:---|:---|
  | submitTransaction       | 发起交易的接口，需要输入调用方法与参数     | String name, String... args        | byte\[\]                           |
  | evaluateTransaction     | 发起查询的接口，需要输入调用方法与参数     | String name, String... args        | byte\[\]                           |
  | createTransaction​      | 创建交易的接口，需要submit以发起交易   | String name                        | Transaction                        |
  | addContractListener     | 设置监听器的接口，监听已经提交的交易发出的事件 | Consumer\<ContractEvent\> listener | Consumer\<ContractEvent\> listener |
  | removeContractListener​ | 移除监听器的接口                | Consumer\<ContractEvent\> listener | void                               |
     
  
 
