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

यह सेक्शन 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, के ज़रिए बनाई गई डेटा सोर्स क्वेरी लेता है और एक डेटा टेबल बनाता है. ज़्यादा जानकारी के लिए Capacity का इस्तेमाल करना देखें.

      // 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 से अनुरोध पैरामीटर लेता है. कोड तब सर्वेल रिस्पॉन्स सेट करता है. सर्वलेट कंटेनर, क्वेरी करने वाले विज़ुअलाइज़ेशन को यह जवाब देता है.

      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 टॉमकैट पर अपने वेब ऐप्लिकेशन को अपडेट करने के लिए, नीचे दिए गए निर्देशों का पालन करें या उनमें बदलाव करें. ये निर्देश खास तौर पर Windows सिस्टम पर Apache टॉमकैट के लिए होते हैं:

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

    <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
    आपकी स्क्रीन की चौड़ाई के आधार पर, स्क्रीन टेक्स्ट की 6 से 7 लाइनें दिखाती है. टेक्स्ट 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. अगर आपने अब तक ऐसा नहीं किया है, तो <data_source_library_install>/examples/src/html डायरेक्ट्री
    से all_examples.html फ़ाइल को <tomcat_home>/webapps/myWebApp/ डायरेक्ट्री में कॉपी करें.
     
  2. नीचे दिए गए लिंक पर क्लिक करें: ब्राउज़र में http://localhost:8080/myWebApp/all_examples.html. आपको नीचे दी गई जानकारी दिखेगी:

अगले चरण

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