2014-10-26 3 views
18

mit der neuesten Version von Objectify (5.1), am folgenden Fehler bekommen, wenn ich versuche, die ofy() Methode für den Zugriff aufObjectify 5.1 Kontext nicht Fehler Gestartet aufgrund fehlenden ObjectifyFilter

Sie haben einen Objectify Kontext nicht gestartet. Vermutlich vermisst du den ObjectifyFilter. Wenn Sie nicht im Kontext einer HTTP-Anforderung ausgeführt werden, lesen Sie die Methode ObjektifyService.run().

ich es von appengine Webapplikation leite, denselben Code und Konfiguration in älteren Versionen fein gearbeitet

Folgende ist meine Konfiguration, ähnlich dem Beispiel in objektivieren Dokumentation

web.xml

<filter> 
    <filter-name>ObjectifyFilter</filter-name> 
    <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>ObjectifyFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

OfyService Klasse

public class OfyService { 

static { 
    long start = System.currentTimeMillis(); 

    factory().register(User.class); 

    log.info(" Entity Registration took : {} ms", (System.currentTimeMillis() - start)); 
} 

public static Objectify ofy() { 
    return ObjectifyService.ofy(); 
} 

public static ObjectifyFactory factory() { 
    return (ObjectifyFactory) ObjectifyService.factory(); 
} 
} 

aber ich definiere ObjectifyFilter, irgendeine Idee, warum bekomme ich diesen Fehler? und wie kann ich es reparieren?

Danke!

UPDATE:

ich die objektivieren Version zu Version 5.1.5 aktualisiert haben, aber immer noch das Problem nicht behoben wird jedes Update auf das?

+0

Überprüfen Sie, ob Sie ofy() aufrufen, um Start zB Aus irgendeinem Grund - außerhalb des Bereichs einer Anfrage - haben Sie den ObjektifyFilter nicht durchlaufen. – koma

+0

Nein ist nicht anderswo angerufen, ich strikte streng vony() durch OfyService Klasse, auch FYI der gleiche Code funktioniert in der Version vor 5.1 –

+1

Überprüfen Sie, um sicherzustellen, dass 1) Sie nicht aufrufen yy() vor dem Filter ist Eingerichtet; sagen Sie, vielleicht, von einem anderen Filter höher in der Kette und 2), dass Sie nicht mehrere Versionen von objektivieren auf Ihrem Klassenpfad (mvn clean) haben. Sie sollten in der Lage sein, den Stacktrace zu betrachten und zu sehen, welcher Code versucht, außerhalb des Filters Objectify zu verwenden; Wenn der Filter installiert wurde, würden Sie ihn im StackTrace sehen. Veröffentliche es. – stickfigure

Antwort

-1
import static com.googlecode.objectify.ObjectifyService.ofy; 

import java.util.List; 
... 
import ar.com.cra.entity.State; 
import com.googlecode.objectify.ObjectifyService; 

@Controller 
@RequestMapping("/state") 
public class StateController { 

    @RequestMapping(value = "/addState", method = RequestMethod.GET) 
    public String getAddState(ModelMap model) { 
     return "state/add"; 
    } 

    @RequestMapping(value = "/add", method = RequestMethod.POST) 
    public ModelAndView add(HttpServletRequest request, ModelMap model) { 

     ObjectifyService.register(State.class); 

     State state; 
     try { 
      state = new State(); 
      state.setName(request.getParameter("name")); 
      state.setShortName(request.getParameter("shortName")); 
      ofy().save().entity(state).now(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return new ModelAndView("redirect:list"); 

    } 

UPDATE

public class DatastoreService { 

    static { 
     factory().register(State.class); 
    } 

    public static Objectify ofy() { 
     return ObjectifyService.ofy(); 
    } 
} 
+2

Dies ist nicht die empfohlene Methode zur Registrierung von Objectify-Dienst, auch jedes Mal, wenn Sie diesen Pfad aufrufen, registrieren Sie sich jedes Mal –

+0

danke! Ich weiß das nicht. – Guillermo81

0

ich das gleiche Problem haben. Ich habe gefunden, was das Problem (für mich) verursacht hat. Ich habe Guice und sitebricks verwendet, um meine Back-End-Dienste zu erstellen.

Problem

Um von Objectify zu machen hatte ich ObjectifyFilter als Singleton in einer meiner Module zu binden. Das Modul, das ich die Bindung durchgeführt habe, erweitert eine ServletModule, die über Guice in SitebricksModule installiert ist, wo ich meine Dienste an URLs binde. Die SiteBricksModule wird dann an Guices Injektor weitergegeben.

Ich beobachtete, dass das Problem weiterhin bestand, wenn ich ein Modul in einem anderen installierte.

Lösungen, die ich gefunden

  • Ich trennte die beiden Module und übergeben sie beide zu Guices des Injektors.

oder

  • Separate Objectify Material wie das Filterbindung und in einem anderen Modul Filtermuster spezifiziert und die zuerst Guice des Injektors passieren.

Hoffe, das hilft!

0

Ich habe gerade angefangen, Objectify zu verwenden und hatte das gleiche Problem wie du. Ich lese the setup information einfach nicht ... Fügen Sie einfach, dass auf meiner web.xml und es funktionierte:

<filter> 
    <filter-name>ObjectifyFilter</filter-name> 
    <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>ObjectifyFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
1

sicher, dass Ihre StartupActions Klasse machen wie folgt aussieht:

@Start(order=100) 
public void generateDummyDataWhenInTest() { 
    if (ninjaProperties.isDev()) { 
     try (Closeable closeable = ObjectifyService.begin()) { 
      ObjectifyProvider.setup(); 
     } catch (IOException ex) { 
      Logger.getLogger(StartupActions.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 

Wir, dass lange behoben haben sollte vor dem Archetyp, aber es ist nicht wirklich hoch auf der Prio-Liste. Es wäre fantastisch, wenn Sie eine PR drücken könnte :)

0

ich den gleichen Fehler konfrontiert und this solusion für mich gearbeitet

in web.xml hinzufügen

<filter> 
    <filter-name>ObjectifyFilter</filter-name> 
    <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>ObjectifyFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
</filter-mapping> 
Verwandte Themen