Objectify speichert auch jetzt nicht synchron

Mein Servlet sollte Folgendes ausführen: Wenn sich ein Benutzer an einem Veranstaltungsort anmeldet, überprüfe ich, ob er derzeit an einem Ort angemeldet ist (auch wenn es sich um denselben Veranstaltungsort handelt), hebe die Registrierung auf und registriere ihn erneut.

Ich habe den folgenden Code, den ich vereinfacht habe, um mein Problem zu zeigen:

    Date tempDate = new Date();


    Visit v = ofy().load().type(Visit.class)
            .filter(Visit.USER_ID, 5L)
            .filter(Visit.EXIT_DATE, null).first().get();

    if(v != null)
        exitVenue(5L, 7L, tempDate);

    Visit visit = new Visit(5L, 7L, tempDate);      
    ofy().save().entity(visit).now();

    Date tempDate2 = new Date();


    Visit v2 = ofy().load().type(Visit.class)
            .filter(Visit.USER_ID, 5L)
            .filter(Visit.EXIT_DATE, null).first().get();

    if(v2 != null)
        exitVenue(5L, 7L, tempDate2);

    Visit visit2 = new Visit(5L, 7L, tempDate2);        
    ofy().save().entity(visit2).now();
}


public void exitVenue(Long userID, Long venueID, Date exitDate) {

    Visit visit = ofy().load().type(Visit.class)
            .filter(Visit.USER_ID, userID)
            .filter(Visit.VENUE_ID, venueID)
            .filter(Visit.EXIT_DATE, null).first().get();

    if(visit == null){
        log.info("ERROR : User " + userID + " exited venue " + venueID + ", but Visit was not found");
        return;
    }
    visit.setExitDate(exitDate);

    ofy().save().entity(visit).now();
}

Das Problem ist, dass bei der zweiten Durchführung dieses Vorgangs nicht immer festgestellt wird, dass bereits ein Besuch im Datenspeicher vorliegt (etwa bei jedem zweiten Test). Und ich bin verwirrt, ist es nicht 'now ()' anzunehmen, es sofort zu speichern und erst dann weiterzulaufen?

Vielen Dank für Ihre Hilfe, Dan

Antworten auf die Frage(1)

Ihre Antwort auf die Frage