Cette section présente AdvancedExampleServlet2
. AdvancedExampleServlet2
est un exemple d'implémentation de source de données qui définit les fonctionnalité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 terminer la section Premiers pas avant de commencer cette section.
Présentation de AdvancedExampleServlet2
La classe AdvancedExampleServlet2
se trouve dans le package examples
.
Cette classe fournit un exemple d'implémentation qui définit les fonctionnalité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 des événements
- Gérer les erreurs
- Utiliser des paramètres d'URL
- Utiliser les fonctionnalités
Définir le flux des événements
AdvancedExampleServlet2
définit le flux des é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 effectuée par une visualisation auprès du servlet. Le paramètre HttpServletResponse
encapsule la réponse du servlet à la visualisation des requêtes.
Cet extrait définit également dsRequest
sur null. dsRequest
est utilisé à différents endroits dans le 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 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 s'appelle la requête de source
de données, l'autre requête d'achèvement. Étant donné que la capacité déclarée de la source de données est SELECT
, la requête de la source de données consiste en une opération SELECT
si l'objet dsRequest
inclut une opération SELECT
.
La requête d'achèvement comprend toutes les autres opérations requises par la requête, qui peuvent é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 d'achèvement 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 suivant reprend la requête de source de données créée par l'extrait précédent et l'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 reprend la requête d'achèvement générée lors de la division de la requête, le tableau de données produit par l'extrait précédent et les paramètres régionaux de l'utilisateur issus de la visualisation de la 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 servlet. Le conteneur de servlet renvoie cette réponse
à la visualisation des requêtes.
DataSourceHelper.setServletResponse(newData, dsRequest, resp);
Gérer les erreurs
L'extrait de code suivant détecte une exception, obtient le message approprié, met en forme la réponse et définit la réponse du servlet. 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 suivant reprend la requête de source de données créée lors de la division de la requête, ainsi que l'HttpServletRequest
.
HttpServletRequest
peut éventuellement inclure un paramètre tableId
spécifié en tant qu'URL. Ce paramètre tableId
détermine la table de données à renvoyer comme suit:
- Si le paramètre
tableId
est omis ou s'il est différent deplanets
, la source de données renvoie la table de 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 des paramètres à utiliser.
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 les fonctionnalités
L'extrait de code suivant utilise 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 utilise 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écution et test de AdvancedExampleServlet2
Cette section fournit des instructions sur l'exécution et le test de 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 afficher 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 qui le définissent sont les suivantes:
<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 Tomcat s'il est déjà en cours d'exécution.
- Cliquez sur le lien suivant:http://localhost:8080/myWebApp/advanced
L'écran affiche 6 à 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'}]}]}});
Il s'agit de la réponse que l'exemple de source de données CSV envoie à une visualisation.
Utiliser une visualisation pour afficher 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 suivant de all_examples
spécifie le servlet 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 en savoir plus sur la spécification d'une visualisation et l'utilisation du langage de requête, consultez Utiliser des graphiques et la documentation de référence sur le langage de requête.
Suivez ou adaptez les instructions ci-dessous pour afficher une visualisation des 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
vers le répertoire<tomcat_home>/webapps/myWebApp/
.
- Cliquez sur le lien suivant: http://localhost:8080/myWebApp/all_examples.html dans un navigateur. Le résultat suivant doit s'afficher:
Étapes suivantes
Pour explorer plus en détail les exemples fournis avec la bibliothèque, consultez le guide de référence rapide pour les exemples. Pour en savoir plus sur la mise en œuvre d'une source de données complexe, consultez les conseils d'implémentation.