Cette section présente AdvancedExampleServlet2
. AdvancedExampleServlet2
est un exemple d'implémentation de source de données qui définit les capacités et le flux d'événements. Cette section fournit également des instructions détaillées sur l'exécution et le test de AdvancedExampleServlet2
.
Remarque: Vous devez remplir la section Premiers pas avant de commencer.
Découvrez AdvancedExampleServlet2
La classe AdvancedExampleServlet2
se trouve dans le package examples
.
Cette classe fournit un exemple d'implémentation qui définit les capacités et le flux d'événements.
Les parties les plus importantes de AdvancedExampleServlet2
sont décrites dans les sections suivantes:
- Définir le flux d'événements
- Gérer les erreurs
- Utiliser des paramètres d'URL
- Utiliser les fonctionnalités
Définir le flux d'événements
AdvancedExampleServlet2
définit le flux d'événements en remplaçant la méthode HttpServlet.doGet()
et en appelant différentes fonctions d'assistance fournies par DataSourceHelper
.
L'extrait de code suivant remplace doGet()
. Le paramètre HttpServletRequest
encapsule la requête envoyée par une visualisation au webhook. Le paramètre HttpServletResponse
encapsule la réponse du webhook à la visualisation de requête.
Cet extrait définit également dsRequest
sur "null". dsRequest
est utilisé à différents stades du reste du code.
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { DataSourceRequest dsRequest = null;
L'extrait de code suivant extrait les paramètres de la requête de HttpServletRequest
pour créer le contexte dans lequel la requête s'exécute.
try { // Extract the request parameters. dsRequest = new DataSourceRequest(req);
L'extrait de code suivant extrait la requête de l'objet dsRequest
et la divise en deux requêtes distinctes. L'une est la requête de source de données, l'autre la requête de saisie semi-automatique. Comme la capacité déclarée de la source de données est SELECT
, la requête sur la source de données consiste en une opération SELECT
si l'objet dsRequest
inclut une opération SELECT
.
La requête de saisie semi-automatique est constituée de toutes les autres opérations requises par la requête, qui peut également inclure une opération SELECT
. Par exemple, si la requête demandée est SELECT a ORDER
BY b
, la requête de source de données sera SELECT a, b
et la requête de fin sera identique à la requête d'origine SELECT a ORDER BY b
.
// Split the query. QueryPair query = DataSourceHelper.splitQuery(dsRequest.getQuery(), Capabilities.SELECT);
L'extrait de code suivant accepte la requête de source de données créée par l'extrait précédent et l'élément HttpServletRequest,
, puis crée une table de données. Pour en savoir plus, consultez la section Utiliser les fonctionnalités.
// Generate the data table. DataTable data = generateMyDataTable(query.getDataSourceQuery(), req);
Le code suivant utilise la requête de fin produite lorsque la requête a été divisée, la table de données produite par l'extrait précédent et les paramètres régionaux de l'utilisateur issus de la visualisation de requête. Le code crée ensuite une table de données.
// Apply the completion query to the data table. DataTable newData = DataSourceHelper.applyQuery(query.getCompletionQuery(), data, dsRequest.getUserLocale());
Le code suivant utilise la table de données produite par l'extrait précédent et les paramètres de requête de HttpServletRequest
. Le code définit ensuite la réponse du webhook. Le conteneur de webhook renvoie cette réponse à la visualisation de la requête.
DataSourceHelper.setServletResponse(newData, dsRequest, resp);
Traitement des erreurs
L'extrait de code suivant identifie une exception, obtient le message approprié, met en forme la réponse et définit la réponse du jeton. Si dsRequest
est nul, DataSourceRequest
n'est pas disponible, peut-être en raison de l'échec du constructeur. Dans ce cas, HttpRequest
est utilisé à la place de DataSourceRequest
.
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); } }
Utiliser des paramètres d'URL
L'extrait de code suivant accepte la requête de source de données créée lors de la division de la requête et la valeur HttpServletRequest
.
HttpServletRequest
peut éventuellement inclure un paramètre tableId
spécifié en tant qu'URL. Ce paramètre tableId
détermine quelle table de données est renvoyée comme suit:
- Si le paramètre
tableId
est omis ou contient une valeur autre queplanets
, la source de données renvoie la table des données sur les animaux. - Si le paramètre
tableId
est spécifié en tant queplanets
, la source de données renvoie la table de données des planètes.
Lorsque vous écrivez votre propre code pour renvoyer une table de données, vous décidez quels paramètres prendre.
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); }
Utiliser des fonctionnalités
L'extrait de code suivant prend la requête et génère la table de données animals
.
private DataTable generateAnimalsTable(Query query) throws TypeMismatchException { DataTable data = new DataTable(); ListrequiredColumns = 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; }
L'extrait de code suivant prend la requête et génère la table de données planets
.
private DataTable generatePlanetsTable(Query query) throws TypeMismatchException { DataTable data = new DataTable(); ListrequiredColumns = 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; }
Exécuter et tester AdvancedExampleServlet2
Cette section explique comment exécuter et tester AdvancedExampleServlet2
.
Pour exécuter et tester AdvancedExampleServlet2
, mettez à jour votre application Web et configurez une visualisation qui interroge la source de données, comme décrit dans les sections suivantes:
- Mettre à jour une application Web sur Apache Tomcat
- Utiliser une visualisation pour consulter les données
Mettre à jour une application Web sur Apache Tomcat
Suivez ou adaptez les instructions ci-dessous pour mettre à jour votre application Web sur Apache Tomcat. Ces instructions sont spécifiques à Apache Tomcat sur un système Windows:
- Le fichier
web.xml
que vous avez précédemment copié dans le répertoireWEB-INF
contient déjà la définition et le mappage requis pour cet exemple. Les lignes suivantes définissent ce paramètre :
<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>
- Lancez Tomcat, ou redémarrez-le s'il est déjà en cours d'exécution.
- Cliquez sur le lien suivant : http://localhost:8080/myWebApp/advanced.
L'écran affiche entre 6 et 7 lignes de texte, en fonction de la largeur de votre écran. Le texte commence pargoogle.visualization.Query.setResponse
et se termine par{v:'http://en.wikipedia.org/wiki/Tiger'}]}]}});
C'est la réponse que l'exemple de source de données CSV envoie à une visualisation.
Utiliser une visualisation pour consulter les données
Le fichier all_examples.html
du répertoire <data_source_library_install>/examples/src/html
permet d'afficher une visualisation des données.
L'extrait de code all_examples
suivant spécifie le webhook advanced
, la table planets
, une requête SELECT et une visualisation sous forme de graphique à barres.
query = new google.visualization.Query('advanced?tableId=planets&tq=select planet,mass'); ... var chart = new google.visualization.BarChart(document.getElementById('advanced_div'));
Pour en savoir plus sur les autres visualisations incluses dans all_examples.html
, consultez la section Utiliser un datastore externe.
Pour savoir comment spécifier une visualisation et utiliser le langage de requête, consultez les pages Utiliser des graphiques et Documentation de référence sur le langage de requête.
Suivez ou suivez les instructions ci-dessous pour visualiser les données fournies par la source de données avancée:
- Si vous ne l'avez pas déjà fait, copiez le fichier
all_examples.html
du répertoire<data_source_library_install>/examples/src/html
dans le répertoire<tomcat_home>/webapps/myWebApp/
.
- Cliquez sur le lien suivant: http://localhost:8080/myWebApp/all_examples.html dans un navigateur. Vous devriez obtenir le résultat suivant:
Next Steps
Pour examiner plus en détail les exemples fournis avec la bibliothèque, consultez la documentation de référence sur les exemples. Pour en savoir plus sur l'implémentation d'une source de données complexe, consultez les conseils d'implémentation.