क्षमताएं और इवेंट का फ़्लो

इस सेक्शन में AdvancedExampleServlet2 के बारे में जानकारी दी गई है. AdvancedExampleServlet2, डेटा सोर्स को लागू करने का एक उदाहरण है. यह इवेंट की क्षमताओं और फ़्लो के बारे में बताता है. इस सेक्शन में, AdvancedExampleServlet2 को चलाने और टेस्ट करने के बारे में सिलसिलेवार निर्देश भी दिए गए हैं.

ध्यान दें: यह सेक्शन शुरू करने से पहले, आपको शुरू करना सेक्शन को पूरा भरना होगा.

पेश है AdvancedExampleServlet2

AdvancedExampleServlet2 क्लास, examples पैकेज में मौजूद होती है. इस क्लास में, लागू करने का एक उदाहरण दिया गया है, जिससे इवेंट के फ़्लो और क्षमताओं के बारे में पता चलता है.

AdvancedExampleServlet2 के सबसे अहम हिस्सों के बारे में इन सेक्शन में बताया गया है:

इवेंट का फ़्लो तय करना

AdvancedExampleServlet2, HttpServlet.doGet() तरीके को ओवरराइड करके और DataSourceHelper से मिलने वाले कई हेल्पर फ़ंक्शन को कॉल करके, इवेंट के फ़्लो को तय करता है.

यह स्निपेट, doGet() को बदल देता है. HttpServletRequest पैरामीटर, विज़ुअलाइज़ेशन से किए गए अनुरोध को सर्वलेट में एन्क्रिप्ट (सुरक्षित) करता है. HttpServletResponse पैरामीटर, सर्वलेट से मिले रिस्पॉन्स को क्वेरी विज़ुअलाइज़ेशन में इनकैप्सुलेट करता है. यह स्निपेट भी dsRequest को शून्य पर सेट करता है. dsRequest का इस्तेमाल, पूरे कोड में अलग-अलग जगहों पर किया जाता है.

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    DataSourceRequest dsRequest = null;

नीचे दिया गया स्निपेट, HttpServletRequest से अनुरोध पैरामीटर को एक्सट्रैक्ट करता है, ताकि अनुरोध करने के बारे में जानकारी दे सके.

    try {
      // Extract the request parameters.
      dsRequest = new DataSourceRequest(req);

नीचे दिया गया स्निपेट, dsRequest ऑब्जेक्ट से क्वेरी लेता है और उसे दो अलग-अलग क्वेरी में बांट देता है. एक क्वेरी को डेटा सोर्स क्वेरी कहा जाता है और दूसरी पूरी जानकारी को पूरा करने वाली क्वेरी. डेटा सोर्स की बताई गई क्षमता SELECT है. इसलिए, अगर dsRequest ऑब्जेक्ट में SELECT ऑपरेशन शामिल है, तो डेटा सोर्स की क्वेरी में SELECT ऑपरेशन शामिल होगा. पूरी क्वेरी में, अनुरोध के लिए ज़रूरी अन्य सभी ऑपरेशन शामिल होते हैं. इनमें SELECT ऑपरेशन भी शामिल हो सकता है. उदाहरण के लिए, अगर अनुरोध की गई क्वेरी SELECT a ORDER BY b है, तो डेटा सोर्स की क्वेरी SELECT a, b होगी. पूरी क्वेरी, ओरिजनल क्वेरी SELECT a ORDER BY b जैसी ही होगी.

      // Split the query.
      QueryPair query = DataSourceHelper.splitQuery(dsRequest.getQuery(), Capabilities.SELECT);

नीचे दिया गया स्निपेट , पिछले स्निपेट और HttpServletRequest, से बनाई गई डेटा सोर्स क्वेरी को लेकर एक डेटा टेबल बनाता है. ज़्यादा जानकारी के लिए, क्षमता का इस्तेमाल करना सेक्शन देखें.

      // Generate the data table.
      DataTable data = generateMyDataTable(query.getDataSourceQuery(), req);

नीचे दिया गया कोड , क्वेरी को अलग-अलग करने के बाद जनरेट हुई पूरी क्वेरी, पिछले स्निपेट से बनी डेटा टेबल, और क्वेरी विज़ुअलाइज़ेशन से उपयोगकर्ता की स्थान-भाषा का इस्तेमाल करता है. इसके बाद कोड, एक नई डेटा टेबल बनाता है.

      // Apply the completion query to the data table.
      DataTable newData = DataSourceHelper.applyQuery(query.getCompletionQuery(), data,
          dsRequest.getUserLocale());

नीचे दिया गया कोड, पिछले स्निपेट से बनी डेटा टेबल और HttpServletRequest से मिले अनुरोध पैरामीटर की जानकारी लेता है. इसके बाद, कोड Sर्वलेट रिस्पॉन्स सेट करता है. सर्वलेट कंटेनर यह जवाब क्वेरी विज़ुअलाइज़ेशन के लिए करता है.

      DataSourceHelper.setServletResponse(newData, dsRequest, resp);

गड़बड़ियां ठीक करना

नीचे दिया गया स्निपेट किसी अपवाद को पकड़ता है, सही मैसेज चुनता है, रिस्पॉन्स को फ़ॉर्मैट करता है, और सर्वलेट रिस्पॉन्स सेट करता है. अगर dsRequest खाली है, तो हो सकता है कि कंस्ट्रक्टर के काम न करने की वजह से DataSourceRequest उपलब्ध न हो. इस मामले में, DataSourceRequest की जगह HttpRequest का इस्तेमाल किया जाता है.

    catch (RuntimeException rte) {
      log.error("A runtime exception has occured", rte);
      ResponseStatus status = new ResponseStatus(StatusType.ERROR, ReasonType.INTERNAL_ERROR,
          rte.getMessage());
      if (dsRequest == null) {
        dsRequest = DataSourceRequest.getDefaultDataSourceRequest(req);
      }
      DataSourceHelper.setServletErrorResponse(status, dsRequest, resp);
    } catch (DataSourceException e) {
      if (dsRequest != null) {
        DataSourceHelper.setServletErrorResponse(e, dsRequest, resp);
      } else {
        DataSourceHelper.setServletErrorResponse(e, req, resp);
      }
    }

यूआरएल पैरामीटर का इस्तेमाल करना

नीचे दिया गया स्निपेट , उस डेटा सोर्स क्वेरी को लेता है जो क्वेरी को अलग करने और HttpServletRequest को बांटने पर बनाई गई थी. HttpServletRequest में विकल्प के तौर पर, यूआरएल के तौर पर बताया गया tableId पैरामीटर शामिल किया जा सकता है. इस tableId पैरामीटर से तय होता है कि कौनसी डेटा टेबल इस तरह दिखेगी:

  • अगर tableId पैरामीटर को छोड़ दिया जाता है या planets से बाहर की कोई वैल्यू होती है, तो डेटा सोर्स, जानवरों की डेटा टेबल दिखाता है.
  • अगर tableId पैरामीटर को planets के तौर पर दिखाया जाता है, तो डेटा सोर्स, ग्रहों की डेटा टेबल दिखाता है.

डेटा टेबल लौटाने के लिए अपना कोड लिखते समय, आपको तय करना होता है कि कौनसे पैरामीटर लेने हैं.

  private DataTable generateMyDataTable(Query query, HttpServletRequest req)
      throws TypeMismatchException {
    String tableID = req.getParameter("tableId");
    if ((tableID != null) && (tableID.equalsIgnoreCase("planets"))) {
      return generatePlanetsTable(query);
    }
    return generateAnimalsTable(query);
  }

सुविधाओं का इस्तेमाल करना

नीचे दिया गया स्निपेट क्वेरी लेता है और animals डेटा टेबल जनरेट करता है.

private DataTable generateAnimalsTable(Query query) throws TypeMismatchException {
  DataTable data = new DataTable();
  List requiredColumns = getRequiredColumns(query,
      ANIMAL_TABLE_COLUMNS);
  data.addColumns(requiredColumns);

  // Populate the data table
  for (String key : animalLinksByName.keySet()) {
    TableRow row = new TableRow();
    for (ColumnDescription selectionColumn : requiredColumns) {
      String columnName = selectionColumn.getId();
      if (columnName.equals(ANIMAL_COLUMN)) {
        row.addCell(key);
      } else if (columnName.equals(ARTICLE_COLUMN)) {
        row.addCell(animalLinksByName.get(key));
      }
    }
    data.addRow(row);
  }
  return data;
}

नीचे दिया गया स्निपेट क्वेरी लेता है और planets डेटा टेबल जनरेट करता है.

private DataTable generatePlanetsTable(Query query) throws TypeMismatchException {
  DataTable data = new DataTable();
  List requiredColumns = getRequiredColumns(
      query, planetTableColumns);
  data.addColumns(requiredColumns);

  // Populate data table
  for (Planet planet : Planet.values()) {
    TableRow row = new TableRow();
    for (ColumnDescription selectionColumn : requiredColumns) {
      String columnName = selectionColumn.getId();
      if (columnName.equals(PLANET_COLUMN)) {
        row.addCell(planet.name());
      } else if (columnName.equals(MASS_COLUMN)) {
        row.addCell(planet.getMass());
      } else if (columnName.equals(GRAVITY_COLUMN)) {
        row.addCell(planet.getSurfaceGravity());
      } else if (columnName.equals(MOONS_COLUMN)) {
        row.addCell(planet.getNumberOfMoons());
      }
    }
    data.addRow(row);
  }
  return data;
}

AdvancedExampleServlet2 चलाना और जांच करना

इस सेक्शन में, AdvancedExampleServlet2 को चलाने और उसकी जांच करने के बारे में निर्देश दिए गए हैं.

AdvancedExampleServlet2 को चलाने और उसकी जांच करने के लिए, अपना वेब ऐप्लिकेशन अपडेट करें. साथ ही, ऐसा विज़ुअलाइज़ेशन सेट अप करें जो डेटा सोर्स से क्वेरी करता हो, जैसा कि इस सेक्शन में बताया गया है:

Apache पर वेब ऐप्लिकेशन अपडेट करना Tomcat

Apache Tomcat पर अपना वेब ऐप्लिकेशन अपडेट करने के लिए, नीचे दिए गए निर्देशों का पालन करें या उनमें बदलाव करें. ये निर्देश खास तौर पर, Windows सिस्टम पर Apache Tomcat के लिए हैं:

  1. आपने WEB-INF डायरेक्ट्री में, पहले से कॉपी की गई web.xml फ़ाइल में, इस उदाहरण के लिए ज़रूरी परिभाषा और मैपिंग शामिल की है. इसे तय करने वाली लाइनें:

    <servlet>
      <servlet-name>AdvancedExampleServlet2</servlet-name>
      <description>
      AdvancedExampleServlet2
      </description>
      <servlet-class>AdvancedExampleServlet2</servlet-class>
    </servlet>
      
    <servlet-mapping>
      <servlet-name>AdvancedExampleServlet2</servlet-name>
      <url-pattern>/advanced</url-pattern>
    </servlet-mapping> 
  2. टॉमकैट को शुरू करें या अगर टॉमकैट पहले से चल रहा है, तो उसे रीस्टार्ट करें.
  3. नीचे दिए गए लिंक पर क्लिक करें:http://localhost:8080/myWebApp/advanced
    आपकी स्क्रीन की चौड़ाई के हिसाब से, स्क्रीन पर छह से सात लाइनों का टेक्स्ट दिखता है. टेक्स्ट google.visualization.Query.setResponse से शुरू होता है और {v:'http://en.wikipedia.org/wiki/Tiger'}]}]}}); पर खत्म होता है
    यह वह रिस्पॉन्स है जो उदाहरण के तौर पर दिया गया CSV डेटा सोर्स, विज़ुअलाइज़ेशन को भेजता है.

डेटा देखने के लिए विज़ुअलाइज़ेशन का इस्तेमाल करना

<data_source_library_install>/examples/src/html डायरेक्ट्री में मौजूद all_examples.html फ़ाइल का इस्तेमाल, डेटा को विज़ुअलाइज़ करने के लिए किया जा सकता है.

all_examples के इस स्निपेट में, advanced सर्वलेट, planets टेबल, चुनी गई क्वेरी, और बार चार्ट विज़ुअलाइज़ेशन के बारे में जानकारी दी गई है.

query = new google.visualization.Query('advanced?tableId=planets&tq=select planet,mass');
...
var chart = new google.visualization.BarChart(document.getElementById('advanced_div'));

all_examples.html में शामिल अन्य विज़ुअलाइज़ेशन के बारे में जानकारी पाने के लिए, बाहरी डेटा स्टोर का इस्तेमाल करना सेक्शन देखें.

विज़ुअलाइज़ेशन तय करने और क्वेरी भाषा का इस्तेमाल करने के बारे में ज़्यादा जानकारी के लिए, चार्ट का इस्तेमाल करना और क्वेरी की भाषा का संदर्भ देखें.

बेहतर डेटा सोर्स से मिले डेटा का विज़ुअलाइज़ेशन देखने के लिए, नीचे दिए गए निर्देशों का पालन करें या उनमें बदलाव करें:

  1. अगर आपने अभी तक ऐसा नहीं किया है, तो all_examples.html फ़ाइल को <data_source_library_install>/examples/src/html डायरेक्ट्री
    से <tomcat_home>/webapps/myWebApp/ डायरेक्ट्री में कॉपी करें.
     
  2. इस लिंक पर क्लिक करें: किसी ब्राउज़र में http://localhost:8080/myWebApp/all_examples.html. आपको यह जानकारी दिखेगी:

अगले चरण

लाइब्रेरी के साथ दिए गए उदाहरणों के बारे में ज़्यादा जानने के लिए, उदाहरण क्विक रेफ़रंस देखें. जटिल डेटा सोर्स को लागू करने के बारे में ज़्यादा जानने के लिए, लागू करने के बारे में सलाह देखें.