Пример регистрации классов для 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);
}