A l'aide de la procédure ci-après, vous pouvez continuer à développer un ObjectGrid local en mémoire qui stocke les informations sur les commandes d'un magasin en ligne à l'aide des API ObjectMap. Vous définissez un schéma pour la mappe et exécutez une requête sur cette dernière.
Créez un ObjectGrid avec un schéma de mappe pour la mappe, puis insérez un objet dans le cache et extrayez-le ensuite à l'aide d'une simple requête.
OrderBean.java
public class OrderBean implements Serializable {
String orderNumber;
java.util.Date date;
String customerName;
String itemName;
int quantity;
double price;
}
Le code précédent affiche un objet OrderBean. Cet objet implémente l'interface java.io.Serializable car tous les objets du cache doivent (par défaut) être sérialisables.
L'attribut orderNumber est la clé primaire de l'objet. L'exemple de programme ci-après peut être exécuté en mode autonome. Vous devez suivre ce tutoriel dans un projet Java Eclipse dont le fichier objectgrid.jar est ajouté au chemin d'accès aux classes.
Application.java
package querytutorial.basic.step1;
import java.util.Iterator;
import com.ibm.websphere.objectgrid.ObjectGrid;
import com.ibm.websphere.objectgrid.ObjectGridManagerFactory;
import com.ibm.websphere.objectgrid.ObjectMap;
import com.ibm.websphere.objectgrid.Session;
import com.ibm.websphere.objectgrid.config.QueryConfig;
import com.ibm.websphere.objectgrid.config.QueryMapping;
import com.ibm.websphere.objectgrid.query.ObjectQuery;
public class Application
{
static public void main(String [] args) throws Exception
{
ObjectGrid og = ObjectGridManagerFactory.getObjectGridManager().createObjectGrid();
og.defineMap("Order");
// Définissez le schéma
QueryConfig queryCfg = new QueryConfig();
queryCfg.addQueryMapping(new QueryMapping("Order", OrderBean.class.getName(),
"orderNumber", QueryMapping.FIELD_ACCESS));
og.setQueryConfig(queryCfg);
Session s = og.getSession();
ObjectMap orderMap = s.getMap("Order");
s.begin();
OrderBean o = new OrderBean();
o.customerName = "John Smith";
o.date = new java.util.Date(System.currentTimeMillis());
o.itemName = "Widget";
o.orderNumber = "1";
o.price = 99.99;
o.quantity = 1;
orderMap.put(o.orderNumber, o);
s.commit();
s.begin();
ObjectQuery query = s.createObjectQuery("SELECT o FROM Order o WHERE o.itemName='Widget'");
Iterator result = query.getResultIterator();
o = (OrderBean) result.next();
System.out.println("Found order for customer: " + o.customerName);
s.commit();
// Fermer la session (facultatif dans les versions 7.1.1 et ultérieures) pour améliorer les performances
s.close();
}
}
Cette application eXtreme Scale commence par initialiser une instance ObjectGrid locale avec un nom généré automatiquement. Ensuite, l'application crée une mappe de sauvegarde et une configuration de requête qui définit le type Java associé à la mappe, le nom de la zone qui sert de clé primaire pour la mappe et la manière d'accéder aux données dans l'objet. Vous obtenez ensuite une session pour extraire l'instance ObjectMap et insérez un objet OrderBean dans la mappe, dans une transaction.
Une fois que les données ont été validées dans le cache, vous pouvez utiliser ObjectQuery pour rechercher l'objet OrderBean à l'aide de l'une des zones persistantes de la classe. Les zones persistantes sont celles qui ne possèdent pas le modificateur transitoire. Comme vous n'avez pas défini d'index sur la mappe de sauvegarde, ObjectQuery doit analyser chaque objet de la mappe à l'aide de la réflexion Java.
Tutoriel ObjectQuery - Etape 2 montre comment un index peut être utilisé pour optimiser la requête.