Пример регистрации классов для Objectify с использованием ServletContextListener

Я прочитал несколько статей, в том числе документацию Objectify в Github, что лучший способ регистрации классов для цели Objectify - это использование ServletContextListener в web.xml. К сожалению, я не смог найти ни одного примера для сценария Google App Engine (конечная точка).

У кого-нибудь есть пример, которому я могу следовать?

Спасибо!

3 ответа

Решение

Ответ, который я ищу, здесь: ... У меня уже есть настройка, которую вы предложили, однако она иногда выдаст мне "ошибка класса не зарегистрирована"

Во-первых, включите ObjectifyFilter в 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>

Тогда я создаю такой класс:

public class OfyService {
    private static final Logger logger = Logger.getLogger(OfyService.class.getName());

    static {
        try {
            ObjectifyService.register(EntityA.class);
            /* ... more entities ... */
        } catch (Exception e) {
            logger.log(Level.SEVERE, e.toString());
        }
    }

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

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

В моих методах конечной точки я затем использую Objectify с OfyService.ofy().load().type(EntityA.class)...,

Добавление слушателя в ваш web.xml

<listener>
    <listener-class>[Fully qualified name of your class]</listener-class>
</listener>

И реализует ServletContextListener и начинает регистрировать ваши сущности, как показано ниже:

public class BootstrapListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ObjectifyFactory factory= ObjectifyService.factory();
        factory.register(**[YOUR_ENTITY]**.class);
    }
Другие вопросы по тегам