All Products
Search
Document Center

Tablestore:Java SDK

Last Updated:Apr 21, 2026

Tablestore Java SDK mendukung operasi untuk model wide column, timeseries, dan message, serta menyediakan kemampuan penyimpanan dan manajemen data yang komprehensif bagi pengembang Java.

Integrasi cepat

Ikuti langkah-langkah berikut untuk mengintegrasikan Tablestore Java SDK secara cepat, mulai dari menyiapkan lingkungan hingga memverifikasi koneksi client.

Persiapkan lingkungan

Unduh dan instal Java runtime environment (Java 6 atau versi yang lebih baru). Anda dapat menjalankan perintah java -version untuk memeriksa versi Java Anda.

Instal SDK

Pilih metode instalasi sesuai dengan lingkungan pengembangan Anda. Disarankan menggunakan versi SDK terbaru agar contoh kode berjalan dengan benar.

Tambahkan dependensi Maven (Direkomendasikan)

Untuk menggunakan Tablestore Java SDK dalam proyek Maven, tambahkan dependensi berikut ke file pom.xml Anda.

<dependency>
    <groupId>com.aliyun.openservices</groupId>
    <artifactId>tablestore</artifactId>
    <version>5.17.7</version>
</dependency>

Impor paket JAR ke proyek Eclipse

Untuk proyek yang tidak menggunakan Maven, Anda dapat mengintegrasikan SDK dengan mengimpor paket JAR secara manual.

  1. Unduh paket Java SDK.

  2. Ekstrak paket tersebut.

  3. Di Eclipse, klik kanan proyek Anda lalu pilih Properties > Java Build Path > Libraries > Add External JARs.

  4. Buka folder paket yang telah diekstrak pada Langkah 2. Pilih file tablestore-5.17.7.jar dan semua file JAR di folder lib. Klik Open untuk mengimpor paket JAR tersebut.

  5. Konfirmasi bahwa semua paket JAR telah diimpor di bawah Libraries. Klik Apply and Close untuk menerapkan konfigurasi proyek.

    Catatan

    Jika Anda menggunakan Java SE 9 atau versi yang lebih baru, impor paket JAR ke Modulepath di bawah Libraries.

Konfigurasikan kredensial akses

Anda dapat membuat AccessKey untuk akun Alibaba Cloud atau pengguna RAM Anda. Konfigurasikan AccessKey tersebut dalam variabel lingkungan seperti yang ditunjukkan di bawah ini. Pendekatan ini meningkatkan keamanan karena mencegah penyematan informasi sensitif langsung dalam kode.

Setelah konfigurasi selesai, restart atau refresh lingkungan pengembangan Anda—termasuk IDE, antarmuka command-line, aplikasi desktop lainnya, serta layanan latar belakang—agar variabel lingkungan sistem terbaru dimuat. Untuk informasi lebih lanjut tentang jenis kredensial akses lainnya, lihat Konfigurasikan kredensial akses.

Linux

  1. Jalankan perintah berikut untuk menambahkan pengaturan variabel lingkungan ke file ~/.bashrc.

    echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
    echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
  2. Jalankan perintah berikut untuk menerapkan perubahan.

    source ~/.bashrc
  3. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah aktif.

    echo $TABLESTORE_ACCESS_KEY_ID
    echo $TABLESTORE_ACCESS_KEY_SECRET

macOS

  1. Jalankan perintah berikut di terminal untuk melihat jenis shell default Anda.

    echo $SHELL
  2. Lakukan langkah-langkah berikut berdasarkan jenis shell default Anda.

    Zsh

    1. Jalankan perintah berikut untuk menambahkan pengaturan variabel lingkungan ke file ~/.zshrc.

      echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
      echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
    2. Jalankan perintah berikut untuk menerapkan perubahan.

      source ~/.zshrc
    3. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah aktif.

      echo $TABLESTORE_ACCESS_KEY_ID
      echo $TABLESTORE_ACCESS_KEY_SECRET

    Bash

    1. Jalankan perintah berikut untuk menambahkan pengaturan variabel lingkungan ke file ~/.bash_profile.

      echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile
      echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
    2. Jalankan perintah berikut untuk menerapkan perubahan.

      source ~/.bash_profile
    3. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah aktif.

      echo $TABLESTORE_ACCESS_KEY_ID
      echo $TABLESTORE_ACCESS_KEY_SECRET

Windows

CMD

  1. Jalankan perintah berikut di Command Prompt (CMD) untuk mengatur variabel lingkungan.

    setx TABLESTORE_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
    setx TABLESTORE_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
  2. Restart CMD lalu jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah aktif.

    echo %TABLESTORE_ACCESS_KEY_ID%
    echo %TABLESTORE_ACCESS_KEY_SECRET%

PowerShell

  1. Jalankan perintah berikut di PowerShell.

    [Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
    [Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
  2. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah aktif.

    [Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
    [Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)

Inisialisasi client

Contoh berikut menunjukkan cara menginisialisasi client sinkron menggunakan signature V4. Anda dapat memverifikasi koneksi dengan menampilkan daftar tabel data dalam instans Tablestore.

Client bersifat thread-safe dan secara otomatis mengelola kolam thread internal serta sumber daya koneksi. Di lingkungan multi-threaded, gunakan satu instance client secara bersama. Hindari membuat objek client baru untuk setiap thread atau permintaan.
Penting

Secara default, akses jaringan publik dinonaktifkan untuk instans baru. Untuk mengakses sumber daya dalam suatu instans melalui Internet, aktifkan akses jaringan publik di halaman Network Management untuk instans tersebut.

Wide column model

import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.V4Credentials;
import com.alicloud.openservices.tablestore.model.ListTableResponse;

public class SyncClientV4 {
    
    public static void main(String[] args) {
        
        // Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");

        // TODO: Ubah konfigurasi berikut sesuai dengan informasi instans Anda.
        final String region = "cn-hangzhou"; // Tentukan ID wilayah instans, misalnya "cn-hangzhou".
        final String instanceName = "n01k********"; // Tentukan nama instans.
        final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Tentukan endpoint instans.

        SyncClient client = null;
        try {
            // Bangun kredensial.
            DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
            V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
            CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);

            // Buat instance client.
            client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));

            // Tampilkan semua tabel data.
            ListTableResponse listTableResponse = client.listTable();

            // Cetak daftar tabel data.
            System.out.println("Ditemukan " + listTableResponse.getTableNames().size() + " tabel data dalam instans '" + instanceName + "':");

            listTableResponse.getTableNames().forEach(System.out::println);
        } catch (Exception e) {
            System.err.println("Gagal menampilkan tabel data. Detail:");
            e.printStackTrace();
        } finally {
            // Matikan client.
            if (client != null) {
                client.shutdown();
            }
        }
    }
}

Timeseries model

import com.alicloud.openservices.tablestore.TimeseriesClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.V4Credentials;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableResponse;

public class TimeseriesSyncClientV4 {
    
    public static void main(String[] args) {
        
        // Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");

        // TODO: Ubah konfigurasi berikut sesuai dengan informasi instans Anda.
        final String region = "cn-hangzhou"; // Tentukan ID wilayah instans, misalnya "cn-hangzhou".
        final String instanceName = "n01k********"; // Tentukan nama instans.
        final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Tentukan endpoint instans.

        TimeseriesClient client = null;
        try {
            // Bangun kredensial signature V4.
            DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
            V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
            CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);

            // Buat instance client timeseries.
            client = new TimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));

            // Tampilkan semua tabel timeseries.
            ListTimeseriesTableResponse listTimeseriesTableResponse = client.listTimeseriesTable();

            // Cetak daftar tabel timeseries.
            System.out.println("Ditemukan " + listTimeseriesTableResponse.getTimeseriesTableNames().size() + " tabel timeseries dalam instans '" + instanceName + "':");

            listTimeseriesTableResponse.getTimeseriesTableNames().forEach(System.out::println);
        } catch (Exception e) {
            System.err.println("Gagal menampilkan tabel timeseries. Detail:");
            e.printStackTrace();
        } finally {
            // Matikan client.
            if (client != null) {
                client.shutdown();
            }
        }
    }
}

Konfigurasi client

Tablestore Java SDK mendukung client sinkron dan asinkron. Pilih jenis client yang sesuai dengan skenario aplikasi Anda. Client asinkron menyediakan kemampuan pemrosesan konkuren yang lebih baik dan cocok untuk skenario throughput tinggi.

Client asinkron

Client asinkron menggunakan mekanisme callback untuk memproses hasil permintaan, sehingga menghindari pemblokiran thread dan meningkatkan kemampuan pemrosesan konkuren aplikasi Anda.

Wide column model

import com.alicloud.openservices.tablestore.AsyncClient;
import com.alicloud.openservices.tablestore.TableStoreCallback;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.V4Credentials;
import com.alicloud.openservices.tablestore.model.ListTableRequest;
import com.alicloud.openservices.tablestore.model.ListTableResponse;

import java.util.concurrent.*;

public class AsyncClientV4 {
    
    public static void main(String[] args) {
        
        // Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");

        // TODO: Ubah konfigurasi berikut sesuai dengan informasi instans Anda.
        final String region = "cn-hangzhou"; // Tentukan ID wilayah instans, misalnya "cn-hangzhou".
        final String instanceName = "n01k********"; // Tentukan nama instans.
        final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Tentukan endpoint instans.

        AsyncClient client = null;
        try {
            // Bangun kredensial signature V4.
            DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
            V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
            CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);

            // Buat instance client asinkron.
            client = new AsyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));

            // Gunakan CompletableFuture untuk pemrosesan asinkron.
            CompletableFuture<ListTableResponse> future = new CompletableFuture<>();

            // Proses hasil asinkron dalam callback.
            client.listTable(new TableStoreCallback<ListTableRequest, ListTableResponse>() {
                @Override
                public void onCompleted(ListTableRequest req, ListTableResponse res) {
                    System.out.println("Permintaan asinkron berhasil diselesaikan.");
                    future.complete(res); // Selesaikan Future ketika operasi asinkron berhasil.
                }
                @Override
                public void onFailed(ListTableRequest req, Exception ex) {
                    System.err.println("Permintaan asinkron gagal.");
                    future.completeExceptionally(ex); // Selesaikan Future dengan exception ketika operasi asinkron gagal.
                }
            });

            System.out.println("Permintaan asinkron listTable dikirim. Menunggu hasil...");

            // Blokir dan tunggu hasil, serta tetapkan timeout.
            // Dalam aplikasi nyata, Anda dapat melanjutkan mengeksekusi tugas non-blocking lainnya atau meneruskan future ke proses lain.
            ListTableResponse response = future.get(5, TimeUnit.SECONDS);

            // Proses hasil sukses di thread utama.
            System.out.println("Ditemukan " + response.getTableNames().size() + " tabel data dalam instans '" + instanceName + "':");
            response.getTableNames().forEach(System.out::println);
        } catch (Exception e) {
            System.err.println("Gagal menampilkan tabel data. Detail:");
            e.printStackTrace();
        } finally {
            // Matikan client.
            if (client != null) {
                client.shutdown();
            }
        }
    }
}

Timeseries model

import com.alicloud.openservices.tablestore.AsyncTimeseriesClient;
import com.alicloud.openservices.tablestore.TableStoreCallback;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.V4Credentials;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableRequest;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableResponse;

import java.util.concurrent.*;

public class TimeseriesAsyncClientV4 {
    
    public static void main(String[] args) {
        
        // Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");

        // TODO: Ubah konfigurasi berikut sesuai dengan informasi instans Anda.
        final String region = "cn-hangzhou"; // Tentukan ID wilayah instans, misalnya "cn-hangzhou".
        final String instanceName = "n01k********"; // Tentukan nama instans.
        final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Tentukan endpoint instans.

        AsyncTimeseriesClient client = null;
        try {
            // Bangun kredensial signature V4.
            DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
            V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
            CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);

            // Buat instance client timeseries asinkron.
            client = new AsyncTimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));

            // Gunakan CompletableFuture untuk pemrosesan asinkron.
            CompletableFuture<ListTimeseriesTableResponse> future = new CompletableFuture<>();

            // Proses hasil asinkron dalam callback.
            client.listTimeseriesTable(new TableStoreCallback<ListTimeseriesTableRequest, ListTimeseriesTableResponse>() {
                @Override
                public void onCompleted(ListTimeseriesTableRequest req, ListTimeseriesTableResponse res) {
                    System.out.println("Permintaan asinkron berhasil diselesaikan.");
                    future.complete(res); // Selesaikan Future ketika operasi asinkron berhasil.
                }
                @Override
                public void onFailed(ListTimeseriesTableRequest req, Exception ex) {
                    System.err.println("Permintaan asinkron gagal.");
                    future.completeExceptionally(ex); // Selesaikan Future dengan exception ketika operasi asinkron gagal.
                }
            });

            System.out.println("Permintaan asinkron listTimeseriesTable dikirim. Menunggu hasil...");

            // Blokir dan tunggu hasil, serta tetapkan timeout.
            // Dalam aplikasi nyata, Anda dapat melanjutkan mengeksekusi tugas non-blocking lainnya atau meneruskan future ke proses lain.
            ListTimeseriesTableResponse response = future.get(5, TimeUnit.SECONDS);

            // Proses hasil sukses di thread utama.
            if (response.getTimeseriesTableNames() != null) {
                System.out.println("Ditemukan " + response.getTimeseriesTableNames().size() + " tabel timeseries dalam instans '" + instanceName + "':");
                response.getTimeseriesTableNames().forEach(System.out::println);
            }
        } catch (Exception e) {
            System.err.println("Gagal menampilkan tabel timeseries. Detail:");
            e.printStackTrace();
        } finally {
            // Matikan client.
            if (client != null) {
                client.shutdown();
            }
        }
    }
}

Versi Signature

Tablestore Java SDK telah mendukung signature V4 sejak versi 5.16.1. Signature V4 menggunakan algoritma enkripsi dan mekanisme penandatanganan yang lebih kuat untuk meningkatkan keamanan. Disarankan untuk melakukan upgrade SDK dan menggunakan signature V4. Kode berikut menunjukkan cara menginisialisasi client menggunakan signature V2.

Wide column model

Sinkron

import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.model.ListTableResponse;

public class SyncClientV2 {
    
    public static void main(String[] args) {
        
        // Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");

        // TODO: Ubah konfigurasi berikut sesuai dengan informasi instans Anda.
        final String instanceName = "n01k********"; // Tentukan nama instans.
        final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Tentukan endpoint instans.

        SyncClient client = null;
        try {
            // Bangun kredensial signature V2.
            DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
            CredentialsProvider provider = new DefaultCredentialProvider(credentials);

            // Buat instance client.
            client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));

            // Tampilkan semua tabel data.
            ListTableResponse listTableResponse = client.listTable();

            // Cetak daftar tabel data.
            System.out.println("Ditemukan " + listTableResponse.getTableNames().size() + " tabel data dalam instans '" + instanceName + "':");

            listTableResponse.getTableNames().forEach(System.out::println);
        } catch (Exception e) {
            System.err.println("Gagal menampilkan tabel data. Detail:");
            e.printStackTrace();
        } finally {
            // Matikan client.
            if (client != null) {
                client.shutdown();
            }
        }
    }
}

Asinkron

import com.alicloud.openservices.tablestore.AsyncClient;
import com.alicloud.openservices.tablestore.TableStoreCallback;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.model.ListTableRequest;
import com.alicloud.openservices.tablestore.model.ListTableResponse;

import java.util.concurrent.*;

public class AsyncClientV2 {
    
    public static void main(String[] args) {
        
        // Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");

        // TODO: Ubah konfigurasi berikut sesuai dengan informasi instans Anda.
        final String instanceName = "n01k********"; // Tentukan nama instans.
        final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Tentukan endpoint instans.

        AsyncClient client = null;
        try {
            // Bangun kredensial signature V2.
            DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
            CredentialsProvider provider = new DefaultCredentialProvider(credentials);

            // Buat instance client asinkron.
            client = new AsyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));

            // Gunakan CompletableFuture untuk pemrosesan asinkron.
            CompletableFuture<ListTableResponse> future = new CompletableFuture<>();

            // Proses hasil asinkron dalam callback.
            client.listTable(new TableStoreCallback<ListTableRequest, ListTableResponse>() {
                @Override
                public void onCompleted(ListTableRequest req, ListTableResponse res) {
                    System.out.println("Permintaan asinkron berhasil diselesaikan.");
                    future.complete(res); // Selesaikan Future ketika operasi asinkron berhasil.
                }
                @Override
                public void onFailed(ListTableRequest req, Exception ex) {
                    System.err.println("Permintaan asinkron gagal.");
                    future.completeExceptionally(ex); // Selesaikan Future dengan exception ketika operasi asinkron gagal.
                }
            });

            System.out.println("Permintaan asinkron listTable dikirim. Menunggu hasil...");

            // Blokir dan tunggu hasil, serta tetapkan timeout.
            // Dalam aplikasi nyata, Anda dapat melanjutkan mengeksekusi tugas non-blocking lainnya atau meneruskan future ke proses lain.
            ListTableResponse response = future.get(5, TimeUnit.SECONDS);

            // Proses hasil sukses di thread utama.
            System.out.println("Ditemukan " + response.getTableNames().size() + " tabel data dalam instans '" + instanceName + "':");
            response.getTableNames().forEach(System.out::println);
        } catch (Exception e) {
            System.err.println("Gagal menampilkan tabel data. Detail:");
            e.printStackTrace();
        } finally {
            // Matikan client.
            if (client != null) {
                client.shutdown();
            }
        }
    }
}

Timeseries model

Sinkron

import com.alicloud.openservices.tablestore.TimeseriesClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableResponse;

public class TimeseriesSyncClientV2 {
    
    public static void main(String[] args) {
        
        // Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");

        // TODO: Ubah konfigurasi berikut sesuai dengan informasi instans Anda.
        final String instanceName = "n01k********"; // Tentukan nama instans.
        final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Tentukan endpoint instans.

        TimeseriesClient client = null;
        try {
            // Bangun kredensial signature V2.
            DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
            CredentialsProvider provider = new DefaultCredentialProvider(credentials);

            // Buat instance client timeseries.
            client = new TimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));

            // Tampilkan semua tabel timeseries.
            ListTimeseriesTableResponse listTimeseriesTableResponse = client.listTimeseriesTable();

            // Cetak daftar tabel timeseries.
            System.out.println("Ditemukan " + listTimeseriesTableResponse.getTimeseriesTableNames().size() + " tabel timeseries dalam instans '" + instanceName + "':");

            listTimeseriesTableResponse.getTimeseriesTableNames().forEach(System.out::println);
        } catch (Exception e) {
            System.err.println("Gagal menampilkan tabel timeseries. Detail:");
            e.printStackTrace();
        } finally {
            // Matikan client.
            if (client != null) {
                client.shutdown();
            }
        }
    }
}

Asinkron

import com.alicloud.openservices.tablestore.AsyncTimeseriesClient;
import com.alicloud.openservices.tablestore.TableStoreCallback;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableRequest;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableResponse;

import java.util.concurrent.*;

public class TimeseriesAsyncClientV2 {
    
    public static void main(String[] args) {
        
        // Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");

        // TODO: Ubah konfigurasi berikut sesuai dengan informasi instans Anda.
        final String instanceName = "n01k********"; // Tentukan nama instans.
        final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Tentukan endpoint instans.

        AsyncTimeseriesClient client = null;
        try {
            // Bangun kredensial signature V2.
            DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
            CredentialsProvider provider = new DefaultCredentialProvider(credentials);

            // Buat instance client timeseries asinkron.
            client = new AsyncTimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));

            // Gunakan CompletableFuture untuk pemrosesan asinkron.
            CompletableFuture<ListTimeseriesTableResponse> future = new CompletableFuture<>();

            // Proses hasil asinkron dalam callback.
            client.listTimeseriesTable(new TableStoreCallback<ListTimeseriesTableRequest, ListTimeseriesTableResponse>() {
                @Override
                public void onCompleted(ListTimeseriesTableRequest req, ListTimeseriesTableResponse res) {
                    System.out.println("Permintaan asinkron berhasil diselesaikan.");
                    future.complete(res); // Selesaikan Future ketika operasi asinkron berhasil.
                }
                @Override
                public void onFailed(ListTimeseriesTableRequest req, Exception ex) {
                    System.err.println("Permintaan asinkron gagal.");
                    future.completeExceptionally(ex); // Selesaikan Future dengan exception ketika operasi asinkron gagal.
                }
            });

            System.out.println("Permintaan asinkron listTimeseriesTable dikirim. Menunggu hasil...");

            // Blokir dan tunggu hasil, serta tetapkan timeout.
            // Dalam aplikasi nyata, Anda dapat melanjutkan mengeksekusi tugas non-blocking lainnya atau meneruskan future ke proses lain.
            ListTimeseriesTableResponse response = future.get(5, TimeUnit.SECONDS);

            // Proses hasil sukses di thread utama.
            if (response.getTimeseriesTableNames() != null) {
                System.out.println("Ditemukan " + response.getTimeseriesTableNames().size() + " tabel timeseries dalam instans '" + instanceName + "':");
                response.getTimeseriesTableNames().forEach(System.out::println);
            }
        } catch (Exception e) {
            System.err.println("Gagal menampilkan tabel timeseries. Detail:");
            e.printStackTrace();
        } finally {
            // Matikan client.
            if (client != null) {
                client.shutdown();
            }
        }
    }
}

Kompatibilitas versi

Versi terbaru adalah 5.x.x. Kompatibilitas versi terbaru dengan versi sebelumnya dijelaskan sebagai berikut:

  • SDK seri 4.x.x kompatibel.

  • Tablestore SDK for Java V2.x.x: tidak kompatibel

FAQ

Apa yang harus saya lakukan jika terjadi konflik dependensi library PB saat menggunakan SDK?

Jika terjadi error seperti java.lang.ExceptionInInitializerError saat menggunakan SDK, kemungkinan terdapat konflik dependensi library Protocol Buffers (PB) di proyek Anda. Untuk mengatasi konflik ini, lihat Konflik library PB saat menggunakan Java SDK.

Apa yang harus saya lakukan jika terjadi exception "Signature mismatch" saat menggunakan SDK?

Exception berikut terjadi:

Error Code: OTSAuthFailed, Message: Signature mismatch., RequestId: 0005f55a-xxxx-xxxx-xxxx-xxxxxxxxxxxx, TraceId: 10b0f0e0-xxxx-xxxx-xxxx-xxxxxxxxxxxx, HttpStatus: 403
  • Penyebab: ID AccessKey atau rahasia AccessKey yang ditentukan saat inisialisasi client salah.

  • Solusi: Berikan AccessKey yang benar, yang mencakup ID AccessKey dan rahasia AccessKey.

Apa yang harus saya lakukan jika terjadi exception "Request denied by instance ACL policies" saat menggunakan SDK?

Exception Request denied by instance ACL policies berikut terjadi saat Anda menggunakan SDK untuk mengakses sumber daya dalam instans Tablestore. Contoh error ditunjukkan di bawah ini:

[ErrorCode]:OTSAuthFailed, [Message]:Request denied by instance ACL policies., [RequestId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [TraceId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [HttpStatus:]403
  • Penyebab: Jenis jaringan yang digunakan oleh client tidak memenuhi persyaratan akses jaringan instans. Misalnya, client menggunakan Internet, tetapi instans tidak dikonfigurasi untuk mengizinkan akses melalui Internet.

  • Solusi: Secara default, akses jaringan publik dinonaktifkan untuk instans baru. Untuk mengakses sumber daya dalam instans melalui Internet, aktifkan akses jaringan publik sebagai berikut:

    1. Buka Konsol Tablestore lalu klik alias instans.

    2. Klik Network Management. Untuk Allowed Network Types, pilih Internet, lalu klik Settings.

Apa yang harus saya lakukan jika terjadi exception "Request denied because this instance can only be accessed from the binded VPC" saat menggunakan SDK?

Exception Request denied because this instance can only be accessed from the bound VPC berikut terjadi saat Anda menggunakan SDK untuk mengakses sumber daya dalam instans Tablestore. Contoh error ditunjukkan di bawah ini:

[ErrorCode]:OTSAuthFailed, [Message]:Request denied because this instance can only be accessed from the binded VPC., [RequestId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [TraceId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [HttpStatus:]403
  • Penyebab: Jika jenis akses instans Tablestore diatur ke Bound VPCs Only atau Console Or Bound VPCs Only, Anda harus menyambungkan VPC ke instans tersebut. Pastikan juga client berada dalam VPC yang sama dengan instans dan mengakses Tablestore menggunakan endpoint VPC.

  • Solusi: Anda dapat mengubah jenis akses instans agar mengizinkan akses Internet, atau menyambungkan VPC ke instans Tablestore dan memastikan client berada dalam jaringan VPC tersebut. Untuk menyambungkan VPC:

    1. Buka Konsol Tablestore lalu klik alias instans.

    2. Klik Network Management > Attach VPC. Pilih VPC dan VSwitch, masukkan VPC Name, lalu klik OK.

Apa yang harus saya lakukan jika terjadi SocketTimeoutException saat menggunakan SDK?

Client dapat mengalami timeout saat mengakses Tablestore karena kegagalan koneksi jaringan, fluktuasi jaringan, beban server tinggi, atau garbage collection (GC) penuh pada client. Untuk mengatasi masalah ini, periksa konektivitas jaringan, latensi server, dan apakah GC penuh telah terjadi pada client. Untuk informasi lebih lanjut, lihat Apa yang harus saya lakukan jika terjadi SocketTimeoutException saat menggunakan Java SDK untuk mengakses Tablestore?.

Apa yang harus saya lakukan jika terjadi exception "The access key id is invalid" saat menggunakan SDK?

Exception berikut terjadi saat Anda menggunakan SDK:

java.lang.IllegalArgumentException: The access key id is invalid:xxx.
  • Penyebab: AccessKey, yang mencakup ID AccessKey dan rahasia AccessKey, salah atau mengandung karakter yang tidak valid.

  • Solusi: Berikan informasi AccessKey yang benar.

Apa yang harus saya lakukan jika terjadi exception "java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STOPPED" saat menggunakan SDK?

Exception berikut terjadi saat Anda menggunakan SDK:

java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STOPPED
  • Penyebab: Metode shutDown telah dipanggil pada client, dan reaktor I/O internalnya telah ditutup.

  • Solusi: Client tidak boleh berada dalam status shutDown saat dipanggil. Jika client berada dalam status shutDown, inisialisasi ulang sebelum melakukan operasi.

Referensi