Utilisation du service DMS (Data Mediator Service) Java Database Connectivity pour l'accès aux données
La procédure suivante permet de créer les métadonnées pour un service de médiateur de données (DMS) JDBC (Java™ Database Connectivity) et d'instancier le datagraphe DMS.
Procédure
- Créez la fabrique de métadonnées. Cette fabrique peut servir à créer des
métadonnées, des tables, des colonnes, des filtres, des arguments de filtre, des contraintes de base de données, des clés, des
objets order-by et des relations.
MetadataFactory factory = MetadataFactory.eINSTANCE; Metadata metadata = factory.createMetadata();
- Créez la table pour les métadonnées. Vous pouvez effectuer cette opération
de deux façons différentes. Soit la fabrique de métadonnées peut créer la table, puis cette table peut s'ajouter elle-même aux métadonnées déjà créées, soit les métadonnées peuvent ajouter une nouvelle table, auquel cas une nouvelle table est créée. L'exemple suivant utilise la deuxième option (parce qu'elle comporte moins d'étapes) pour créer une table intitulée CUSTOMER.
Table custTable = metadata.addTable("CUSTOMER");
- Définissez la table principale des métadonnées. Là encore, vous pouvez effectuer cette opération
de deux façons différentes. Soit la table peut se déclarer elle-même comme étant la table principale, soit les métadonnées peuvent définir leur propre table principale. Pour la première option, entrez le code suivant :
Si vous souhaitez utiliser la deuxième option, entrez le code suivant :custTable.beRoot();
metadata.setRootTable(custTable)
- Configurez les colonnes de la table. La table exemple est intitulée
CUSTOMER. Chaque colonne est créée à l'aide de son type. Les types de colonne des métadonnées peuvent uniquement être des types pris en charge par le pilote JDBC utilisé. Si vous avez des questions sur les types pris en charge par le pilote JDBC utilisé, consultez la documentation de ce pilote.
Cet exemple crée un objet colonne pour cette colonne, mais pas pour le reste. Cela s'explique par le fait que cette colonne est la clé primaire et qu'elle permet de définir la clé primaire de la table une fois que le reste des colonnes a été ajouté. Une clé primaire ne peut pas être NULL ; par conséquent, custID.setNullable(false) empêche que cela n'arrive. Ajout du reste des colonnes :Column custID = custTable.addIntegerColumn("CUSTID"); custID.setNullable(false);
custTable.addStringColumn("CUSTFIRSTNAME"); custTable.addStringColumn("CUSTLASTNAME"); custTable.addStringColumn("CUSTSTREETADDRESS"); custTable.addStringColumn("CUSTCITY"); custTable.addStringColumn("CUSTSTATE"); custTable.addStringColumn("CUSTZIPCODE"); custTable.addIntegerColumn("CUSTAREACODE"); custTable.addStringColumn("CUSTPHONENUMBER"); custTable.setPrimaryKey(custID);
- Créez d'autres tables si nécessaire. Pour cet exemple, créez la table Orders. Chaque commande est effectuée par un client.
Table orderTable = metadata.addTable("ORDER"); Column orderNumber = orderTable.addIntegerColumn("ORDERNUMBER"); orderNumber.setNullable(false); orderTable.addDateColumn("ORDERDATE"); orderTable.addDateColumn("SHIPDATE"); Column custFKColumn = orderTable.addIntegerColumn("CUSTOMERID"); orderTable.setPrimaryKey(orderNumber);
- Créez des clés externes pour les tables ayant besoin de relations. Dans cet exemple, les commandes comportent une clé externe qui pointe vers le client qui a passé la commande. Pour créer une relation entre deux tables, vous devez d'abord créer une clé externe pour la table Orders.
La relation utilise deux clés, la clé parent et la clé enfant. Du fait qu'aucun nom spécifique n'est fourni, la concaténation par défaut CUSTOMER_ORDER est le nom utilisé pour cette relation.Key custFK = factory.createKey(); custFK.getColumns().add(custFKColumn); orderTable.getForeignKeys().add(custFK);
La relation par défaut inclut tous les clients ayant passé des commandes. Pour obtenir l'ensemble des clients, même ceux n'ayant pas de commande, vous avez également besoin de la ligne suivante :metadata.addRelationship(custTable.getPrimaryKey(), custFK);
Maintenant que les deux tables sont reliées entre elles, vous pouvez ajouter un filtre à la table Customer pour rechercher des clients présentant des caractéristiques spécifiques.metadata.getRelationship("CUSTOMER_ORDER") .setExclusive(false);
- Spécifiez tous les filtres requis. Dans cet exemple, définissez des filtres sur la table Customer en vue de trouver tous les clients se trouvant dans un état particulier, possédant un nom de famille donné ou ayant passé des commandes.
Filter filter = factory.createFilter(); filter.setPredicate("CUSTOMER.CUSTSTATE = ? AND CUSTOMER.CUSTLASTNAME = ?"); FilterArgument arg1 = factory.createFilterArgument(); arg1.setName("CUSTSTATE"); arg1.setType(Column.STRING); filter.getFilterArguments().add(arg1); FilterArgument arg2 = factory.createFilterArgument(); arg2.setName("CUSTLASTNAME"); arg2.setType(Column.STRING); filter.getFilterArguments().add(arg2); custTable.setFilter(filter);
- Ajoutez tous les objets order by requis. Dans cet exemple, définissez l'objet order-by pour faire un tri en fonction du prénom du client.
Ce code complète la création des métadonnées pour ce service DMS JDBC.Column firstName = ((TableImpl)custTable).getColumn("CUSTFIRSTNAME"); OrderBy orderBy = factory.createOrderBy(); orderBy.setColumn(firstName); orderBy.setAscending(true); metadata.getOrderBys().add(orderBy);
- Créez une connexion à la base de données. Cet exemple ne présente pas la création de la connexion à la base de données. Il présuppose que le client SDO appelle la méthode connect() qui effectue cette action. Voir la rubrique appropriée pour plus d'informations.
- Instanciez et initialisez l'objet DMS JDBC DMS (datagraphe). Le client SDO effectue ces actions. Dans cet exemple :
Maintenant que vous disposez du datagraphe, vous pouvez manipuler les informations. L'exemple ci-après illustre comment manipuler les données dans un objet DataGraph.ConnectionWrapperFactory factory = ConnectionWrapperFactory.soleInstance; connectionWrapper = factory.createConnectionWrapper(connect()); JDBCMediatorFactory mFactory = JDBCMediatorFactory.soleInstance; JDBCMediator mediator = mFactory.createMediator(metadata, connectionWrapper); DataObject parameters = mediator.getParameterDataObject(); parameters.setString("CUSTSTATE", "NY"); parameters.setString('CUSTLASTNAME', 'Smith'); DataObject graph = mediator.getGraph(parameters);
- Exemple : Manipulation des données dans un datagraphe
L'utilisation du datagraphe simple créé au cours de la tâche Utilisation du service DMS (Data Mediator Service) Java Database Connectivity pour l'accès aux données implique certaines manipulations de données standard.
Dans un premier temps, obtenez la liste des clients, puis, pour chaque client, obtenez chaque commande. Ensuite, imprimez le prénom et la date de commande du client. (Dans cet exemple, nous supposons que vous savez déjà que le nom de famille est Smith).List customersList = graph.getList("CUSTOMER"); Iterator i = customersList.iterator(); while (i.hasNext()) { DataObject customer = (DataObject)i.next(); List ordersList = customer.getList("CUSTOMER_ORDER"); Iterator j = ordersList.iterator(); while (j.hasNext()) { DataObject order = (DataObject)j.next(); System.out.print( customer.get("CUSTFIRSTNAME") + " "); System.out.println( order.get("ORDERDATE")); } }
A présent, pour chaque client dont le prénom est Will, remplacez ce prénom par Matt.i = customersList.iterator(); while (i.hasNext()) { DataObject customer = (DataObject)i.next(); if (customer.get("CUSTFIRSTNAME").equals("Will")) { customer.set("CUSTFIRSTNAME", "Matt"); } }
Supprimez la première entrée de client.((DataObject) customersList.get(0)).delete();
Ajoutez un nouvel objet de données au graphiqueDataObject newCust = graph.createDataObject("CUSTOMER"); newCust.setInt("CUSTID", 12345); newCust.set("CUSTFIRSTNAME", "Will"); newCust.set("CUSTLASTNAME", "Smith"); newCust.set("CUSTSTREETADDRESS", "123 Main St."); newCust.set("CUSTCITY", "New York"); newCust.set("CUSTSTATE", "NY"); newCust.set("CUSTZIPCODE", "12345"); newCust.setInt("CUSTAREACODE", 555); newCust.set("CUSTPHONENUMBER", "555-5555"); graph.getList("CUSTOMER").add(newCust);
Soumettez les modifications.mediator.applyChanges(graph);
- Soumettez les informations modifiées au service DMS pour la mise à jour de la base de données.
Tâches associées:


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tdat_jdbcmeduse
Nom du fichier : tdat_jdbcmeduse.html