Lernprogramm zu ObjectQuery - Schritt 1

Mit den folgenden Schritten können Sie die Entwicklung eines lokalen, speicherinternen ObjectGrids fortsetzen, in dem Auftragsinformationen für ein Onlineeinzelhandelsunternehmen über die ObjectMap-APIs gespeichert werden. Sie definieren ein Schema für eine Map und führen eine Abfrage der Map aus.

Vorgehensweise

  1. Erstellen Sie ein ObjectGrid mit einem Map-Schema.

    Erstellen Sie ein ObjectGrid mit einem einzigen Map-Schema für die Map, fügen Sie ein Objekt in den Cache ein, und rufen Sie das Objekt später über eine einfache Abfrage ab.

    OrderBean.java
    
    
    public class OrderBean implements Serializable {
        String orderNumber;
        java.util.Date date;
        String customerName;
        String itemName;
        int quantity;
        double price;
    }
  2. Definieren Sie den Primärschlüssel.

    Der vorherige Code zeigt ein OrderBean-Objekt. Dieses Objekt implementiert die Schnittstelle "java.io.Serializable", weil alle Objekt im Cache (standardmäßig) den Typ "Serializable" haben müssen.

    Das Attribut "orderNumber" ist der Primärschlüssel des Objekts. Das folgende Beispielprogramm kann im eigenständigen Modus ausgeführt werden. Sie müssen dieses Lernprogramm in einem Eclipse-Java-Projekt ausführen, in dem die Datei objectgrid.jar dem Klassenpfad hinzugefügt wurde.

    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");
    
            // Schema definieren
            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();	// Close the session (optional in Version 7.1.1 and later) for improved performance
    	s.close();
    }
    }

    Diese eXtreme-Scale-Anwendung initialisiert zuerst ein lokales ObjectGrid mit einem automatisch generierten Namen. Anschließend erstellt die Anwendung ein BackingMap- und ein QueryConfig-Objekt, das Folgendes definiert: Java-Typ, der der Map zugeordnet wird, Namen des Felds, das der Primärschlüssel für die Map ist, und Zugriff auf die Daten im Objekt. Anschließend wird ein Session-Objekt angefordert, um die ObjectMap-Instanz abzurufen und ein OrderBean-Objekt in einer Transaktion in die Map einzufügen.

    Nach dem Festschreiben der Daten im Cache können Sie das ObjectQuery-Objekt verwenden, um das OrderBean-Objekt über eines der persistenten Felder in Klasse zu suchen. Persistente Felder sind Felder, die den Modifikator "transient" nicht haben. Da Sie keine Indizes für die BackingMap definiert haben, muss das ObjectQuery-Objekt jedes Objekt in der Map durch Java-Reflexion scannen.

Nächste Schritte

Im Abschnitt Lernprogramm zu ObjectQuery - Schritt 2 wird demonstriert, wie die Abfrage mit einem Index optimiert werden kann.