Подтвердить что ты не робот

Objectify 5.1 Context Not Started Ошибка из-за отсутствия ObjectifyFilter

с последней версией Objectify (5.1), я получаю следующую ошибку, когда пытаюсь получить доступ к методу ofy()

Вы не начали контекст Objectify. Вероятно, вам не хватает ObjectifyFilter. Если вы не работаете в контексте HTTP-запроса, см. Метод ObjectifyService.run().

Я запускаю его из веб-приложения appengine, тот же код и конфигурация отлично работают в старых версиях

следующая - моя конфигурация, аналогичная примеру, представленному в документации об объективизации

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

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();
}
}

но я действительно определил ObjectifyFilter, любую идею, почему я получаю эту ошибку? и как я могу это исправить?

Спасибо!

UPDATE:

Я обновил версию objectify до версии 5.1.5, но все же проблема не устранена при обновлении?

4b9b3361

Ответ 1

убедитесь, что ваш класс StartupActions выглядит следующим образом:

@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);
        } 
    }
}

Мы должны были исправить это давным-давно в архетипе, но он не очень высок в списке prio. Было бы здорово, если бы вы могли нажать PR:)

Ответ 2

У меня была такая же проблема. Я нашел причину проблемы (для меня). Я использовал Guice и sitebricks для создайте мои службы back end.

Проблема

Чтобы использовать Objectify, мне пришлось привязать ObjectifyFilter как Singleton в одном из моих модулей. Модуль, который выполнял привязку, расширяет ServletModule, который установлен через Guice в SitebricksModule, где я привязываю свои сервисы к URL-адресам. Затем SitebricksModule передается в инжектор Гие.

Я заметил, что когда я устанавливал один модуль в другой, проблема сохранялась.

Решения, которые я нашел

  • Я отделил два модуля и передал их как для инжектора Guices.

или

  • Разделяйте Objectify вещи как привязку фильтра и задание шаблона фильтра в другом модуле и передайте это сначала в инжектор Guice.

Надеюсь, это поможет!

Ответ 3

Я только начал использовать Objectify и имел ту же проблему, что и вы. Я просто не читаю информацию об установке... Просто добавьте, что на моем 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>

Ответ 4

Я столкнулся с той же ошибкой, и это решение работало для меня

добавить в 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>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

Ответ 5

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");

    }

ОБНОВЛЕНИЕ

public class DatastoreService {

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

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