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 lalu mengganti getCapabilities() dan generateDataTable().
  2. Panggil DataSourceHelper.executeDataSourceServletFlow() dari dalam kode servlet Anda untuk menjalankan alur sumber data.Metode ini mengambil parameter berikut:
    • Objek HttpServletRequest.
    • Objek HttpServletResponse.
    • Implementasi antarmuka DataTableGenerator Anda dari langkah 1 di atas.
    • Boolean untuk menentukan mode akses yang dibatasi atau tidak dibatasi.

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

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

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

Menentukan Kemampuan

Jika penyimpanan data Anda berisi data dalam jumlah besar, dan Anda ingin meningkatkan efisiensi sumber data, Anda dapat menggunakan kemampuan membuat kueri penyimpanan data. Misalnya, anggap saja penyimpanan data Anda adalah sebuah {i>database<i} dan {i>database<i} itu memiliki banyak kolom. Jika visualisasi hanya meminta beberapa kolom tersebut, menjalankan operasi SELECT dalam database akan lebih efisien daripada mengambil semua kolom dan menggunakan kemampuan kueri library untuk melakukan 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 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 pilih.
  • ALL: kode Anda menyediakan operasi SQL, SORT_AND_PAGINATION, dan SELECT.

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

Untuk mengimplementasikan kemampuan selain NONE, ganti Capabilities.getCapabilities() dan terapkan DataTable.generateDataTable() untuk membuat kueri penyimpanan data dan menampilkan tabel data.

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

Menyesuaikan Alur Peristiwa

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

  1. Mengekstrak dan mengurai parameter kueri.
  2. Hanya untuk mode akses terbatas, verifikasi 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 penerapan generateDataTable() Anda.
  4. Implementasi generateDataTable() akan menghasilkan tabel data.
  5. Jalankan kueri penyelesaian pada tabel data yang dihasilkan di 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 implementasi.

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, tempatkan objek yang ingin Anda teruskan 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.
  • Memisahkan kueri menjadi kueri sumber data dan kueri penyelesaian.
  • Jalankan kueri penyelesaian untuk menghasilkan tabel data.
  • Tampilkan tabel data ke visualisasi dalam format HTML, CSV, atau JSON.