Tips Penerapan

Bagian ini membahas beberapa tips yang akan membantu Anda menulis implementasi library yang lebih kompleks:

Menggunakan Servlet Anda Sendiri

Implementasi sumber data yang paling sederhana mewarisi dari class DataSourceServlet library. Untuk mewarisi dari class selain DataSourceServlet, terapkan sumber data sebagai berikut:

  1. Menerapkan antarmuka DataTableGenerator dan mengganti getCapabilities() dan generateDataTable().
  2. Panggil DataSourceHelper.executeDataSourceServletFlow() dari dalam kode servlet Anda untuk menjalankan aliran sumber data.Metode ini mengambil parameter berikut:
    • Objek HttpServletRequest.
    • Objek HttpServletResponse.
    • Implementasi antarmuka DataTableGenerator dari langkah 1 di atas.
    • Boolean untuk menentukan mode akses yang dibatasi atau tidak dibatasi.

Misalnya, jika Anda ingin mewarisi servlet dari class servlet lain, yang disebut AuthServlet yang menyediakan autentikasi bawaan, Anda dapat menulis ulang SimpleServletExample untuk mewarisi AuthServlet, bukan DataSourceServlet, seperti berikut:

  1. Terapkan antarmuka DataTableGenerator.
  2. Pindahkan generateDataTable() dari implementasi DataSourceServlet ke penerapan DataTableGenerator Anda.
  3. Ganti getCapabilities() dalam implementasi DataTableGenerator untuk menampilkan Capabilities.None.
  4. Panggil DataSourceHelper.executeDataSourceServletFlow() dari dalam kode servlet Anda (doGet() atau doPost()), dan teruskan implementasi DataTableGenerator Anda. Metode ini menjalankan seluruh aliran sumber data, termasuk merender hasil sumber data ke dalam respons servlet.

Anda dapat menggunakan teknik yang sama jika menggunakan framework servlet yang biasanya diwarisi class abstrak yang disediakan oleh framework. Misalnya, jika Anda menggunakan WebWork, Anda mungkin ingin mewarisi class ActionSupport.

Menentukan Kemampuan

Jika penyimpanan data berisi data dalam jumlah besar dan Anda ingin meningkatkan efisiensi sumber data, gunakan kemampuan kueri penyimpanan data. Misalnya, anggaplah penyimpanan data Anda adalah database, dan database tersebut memiliki kolom dalam jumlah besar. Jika visualisasi meminta hanya beberapa kolom tersebut, menjalankan operasi SELECT dalam database akan lebih efisien daripada mengambil semua kolom dan menggunakan kemampuan kueri library untuk menjalankan SELECT. Untuk mengimplementasikan kemampuan SELECT, tulis kode untuk menjalankan operasi SELECT dalam database dan menampilkan tabel data.

Gunakan enum Capabilities untuk menentukan kemampuan kueri yang disediakan oleh kode Anda. Opsi yang tersedia adalah:

  • NONE: default, kode Anda tidak menyediakan operasi kueri.
  • SQL: kode Anda menyediakan operasi kueri SQL.
  • SORT_AND_PAGINATION: kode Anda menyediakan operasi kueri pengurutan dan penomoran halaman.
  • SELECT: kode Anda menyediakan operasi tertentu.
  • ALL: kode Anda menyediakan operasi SQL, SORT_AND_PAGINATION, dan SELECT.

Catatan: Dalam semua kasus, library menangani operasi kueri yang tidak disediakan oleh kode Anda.

Untuk menerapkan kemampuan selain NONE, ganti Capabilities.getCapabilities() dan implementasikan DataTable.generateDataTable() untuk mengkueri penyimpanan data dan menampilkan tabel data.

Tiga contoh menggambarkan cara mengimplementasikan kemampuan: AdvancedExampleServlet, AdvancedExampleServlet2, dan SqlDataSourceServlet. Semuanya ada dalam paket example. AdvancedExampleServlet2 dibahas dalam Menentukan Kemampuan dan Alur Peristiwa.

Menyesuaikan Alur Peristiwa

Alur peristiwa default ditentukan di DataSourceHelper.executeDataSourceServletFlow. Alur defaultnya adalah sebagai berikut:

  1. Mengekstrak dan mengurai parameter kueri.
  2. Khusus untuk mode akses terbatas, pastikan bahwa permintaan berasal dari domain yang sama dengan servlet.
  3. Uraikan permintaan untuk membuat dua objek kueri: kueri sumber data dan kueri penyelesaian. Teruskan kueri sumber data ke implementasi generateDataTable() Anda.
  4. Penerapan generateDataTable() akan menghasilkan tabel data.
  5. Jalankan kueri penyelesaian pada tabel data yang dihasilkan pada langkah 5.
  6. Render tabel data ke dalam format yang ditentukan oleh visualisasi dan tetapkan respons servlet.

Untuk menentukan alur peristiwa Anda sendiri, panggil fungsi bantuan di datasource.DataSourceHelper. Lihat Menentukan Kemampuan dan Alur Peristiwa untuk contoh penerapan.

Meneruskan Parameter ke DataTableGenerator.generateDataTable

Anda dapat menggunakan HttpServletRequest.setAttribute untuk meneruskan data yang bukan bagian dari kueri atau objek HttpServletRequest ke DataTableGenerator.generateDataTable. Kode contoh diberikan di bawah ini.

Dalam kode servlet Anda, masukkan objek yang ingin diteruskan ke HttpServletRequest sebagai berikut:

request.setAttribute("my_object_name", myObject);
DataSourceHelper.executeDataSourceServletFlow(request, response, dataTableGenerator);

Dalam implementasi antarmuka dataTableGenerator, dapatkan objek dari HttpServletRequest sebagai berikut:

public DataTable generateDataTable(Query query, HttpServletRequest request){
  Object myObject = request.getAttribute("my_object_name"); 
  // Add your code to manipulate myObject here 
} 

Mengimplementasikan Sumber Data Non-servlet

Jika mengimplementasikan library tanpa menggunakan servlet, Anda hanya dapat menggunakan class dan fungsi bantuan yang tidak memerlukan lingkungan servlet. Ini mencakup class Query dan DataTable serta beberapa fungsi DataSourceHelper seperti parseQuery, applyQuery, validateQuery, dan splitQuery. Anda dapat menggunakan class dan fungsi ini untuk melakukan hal berikut:

  • Menguraikan kueri visualisasi.
  • Membagi kueri menjadi kueri sumber data dan kueri penyelesaian.
  • Menjalankan kueri penyelesaian untuk membuat tabel data.
  • Tampilkan tabel data ke visualisasi dalam format HTML, CSV, atau JSON.