구현 도움말

이 섹션에서는 좀 더 복잡한 라이브러리 구현을 작성하는 데 도움이 되는 몇 가지 팁을 다룹니다.

자체 서블릿 사용

가장 간단한 데이터 소스 구현은 라이브러리의 DataSourceServlet 클래스에서 상속받습니다. DataSourceServlet 이외의 클래스에서 상속받으려면 다음과 같이 데이터 소스를 구현합니다.

  1. DataTableGenerator 인터페이스를 구현하고 getCapabilities()generateDataTable()를 재정의합니다.
  2. 서블릿 코드 내에서 DataSourceHelper.executeDataSourceServletFlow()를 호출하여 데이터 소스 흐름을 실행합니다.이 메서드는 다음 매개변수를 사용합니다.
    • HttpServletRequest 객체
    • HttpServletResponse 객체
    • 위 1단계의 DataTableGenerator 인터페이스 구현
    • 제한 또는 무제한 액세스 모드를 지정하는 불리언입니다.

예를 들어 내장 인증을 제공하는 AuthServlet라는 다른 서블릿 클래스에서 서블릿을 상속하려는 경우 다음과 같이 SimpleServletExample를 다시 작성하여 DataSourceServlet가 아닌 AuthServlet를 상속할 수 있습니다.

  1. DataTableGenerator 인터페이스를 구현합니다.
  2. generateDataTable()DataSourceServlet 구현에서 DataTableGenerator 구현으로 이동합니다.
  3. Capabilities.None를 반환하도록 DataTableGenerator 구현에서 getCapabilities()를 재정의합니다.
  4. 서블릿 코드 (doGet() 또는 doPost()) 내에서 DataSourceHelper.executeDataSourceServletFlow()를 호출하고 DataTableGenerator 구현을 전달합니다. 이 메서드는 데이터 소스 결과를 서블릿 응답에 렌더링하는 것을 포함하여 데이터 소스의 전체 흐름을 실행합니다.

일반적으로 프레임워크에서 제공하는 추상 클래스를 상속하는 서블릿 프레임워크를 사용하는 경우에도 동일한 기법을 사용할 수 있습니다. 예를 들어 WebWork를 사용하는 경우 ActionSupport 클래스를 상속해야 할 수 있습니다.

기능 정의

데이터 저장소에 대량의 데이터가 포함되어 있고 데이터 소스의 효율성을 높이려는 경우 데이터 저장소의 쿼리 기능을 사용하면 됩니다. 예를 들어 데이터 저장소가 데이터베이스이고 데이터베이스에 많은 열이 있다고 가정해 보겠습니다. 시각화에서 이러한 열 중 일부만 요청하는 경우 모든 열을 검색하고 라이브러리의 쿼리 기능을 사용하여 SELECT를 수행하는 것보다 데이터베이스 내에서 SELECT 작업을 실행하는 것이 더 효율적입니다. SELECT 기능을 구현하려면 데이터베이스 내에서 SELECT 작업을 실행하고 데이터 테이블을 반환하는 코드를 작성합니다.

Capabilities enum을 사용하여 코드에서 제공하는 쿼리 기능을 정의합니다. 사용 가능한 옵션은 다음과 같습니다.

  • NONE: 기본값이며 코드는 쿼리 작업을 제공하지 않습니다.
  • SQL: 코드가 SQL 쿼리 작업을 제공합니다.
  • SORT_AND_PAGINATION: 코드는 정렬 및 페이지로 나누기 쿼리 작업을 모두 제공합니다.
  • SELECT: 코드에서 선택 작업을 제공합니다.
  • ALL: 코드가 SQL, SORT_AND_PAGINATION, SELECT 작업을 제공합니다.

참고: 라이브러리는 항상 코드에서 제공하지 않는 쿼리 작업을 처리합니다.

NONE 이외의 기능을 구현하려면 Capabilities.getCapabilities()를 재정의하고 DataTable.generateDataTable()를 구현하여 데이터 저장소를 쿼리하고 데이터 테이블을 반환합니다.

세 가지 예(AdvancedExampleServlet, AdvancedExampleServlet2, SqlDataSourceServlet)는 기능을 구현하는 방법을 보여줍니다. 모든 항목은 example 패키지에 포함됩니다. AdvancedExampleServlet2기능 및 이벤트 흐름 정의에서 설명합니다.

이벤트 흐름 맞춤설정

이벤트의 기본 흐름은 DataSourceHelper.executeDataSourceServletFlow에 정의되어 있습니다. 기본 흐름은 다음과 같습니다.

  1. 쿼리 매개변수 추출 및 파싱
  2. 제한된 액세스 모드인 경우에만 요청이 서블릿과 동일한 도메인에서 시작되었는지 확인합니다.
  3. 요청을 파싱하여 데이터 소스 쿼리와 완료 쿼리라는 두 가지 쿼리 객체를 만듭니다. 데이터 소스 쿼리를 generateDataTable() 구현에 전달합니다.
  4. generateDataTable()의 구현은 데이터 테이블을 생성합니다.
  5. 5단계에서 생성된 데이터 테이블에서 완료 쿼리를 실행합니다.
  6. 데이터 테이블을 시각화에서 지정한 형식으로 렌더링하고 서블릿 응답을 설정합니다.

자체 이벤트 흐름을 지정하려면 datasource.DataSourceHelper에서 도우미 함수를 호출합니다. 구현 예는 기능 및 이벤트 흐름 정의를 참고하세요.

DataTableGenerator.generateDataTable에 매개변수 전달

HttpServletRequest.setAttribute를 사용하여 쿼리 또는 HttpServletRequest 객체의 일부가 아닌 데이터를 DataTableGenerator.generateDataTable에 전달할 수 있습니다. 코드 예는 아래와 같습니다.

서블릿 코드에 HttpServletRequest에 전달하려는 객체를 다음과 같이 입력합니다.

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

dataTableGenerator 인터페이스 구현에서 다음과 같이 HttpServletRequest에서 객체를 가져옵니다.

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

서블릿이 아닌 데이터 소스 구현

서블릿을 사용하지 않고 라이브러리를 구현하는 경우 서블릿 환경이 필요하지 않은 클래스와 도우미 함수만 사용할 수 있습니다. 여기에는 QueryDataTable 클래스와 parseQuery, applyQuery, validateQuery, splitQuery과 같은 일부 DataSourceHelper 함수가 포함됩니다. 이러한 클래스와 함수를 사용하여 다음 작업을 할 수 있습니다.

  • 시각화 쿼리를 파싱합니다.
  • 쿼리를 데이터 소스 쿼리와 완료 쿼리로 분할합니다.
  • 완료 쿼리를 실행하여 데이터 테이블을 생성합니다.
  • 데이터 테이블을 HTML, CSV 또는 JSON 형식의 시각화로 반환합니다.