使用最新版本的Objectify(5.1),当我尝试访问ofy()方法时出现以下错误
您尚未启动Objectify上下文。你可能错过了ObjectifyFilter。如果您没有在http请求的上下文中运行,请参阅ObjectifyService.run()方法。
我从appengine web应用程序运行它,相同的代码和配置在旧版本中运行良好
以下是我的配置,类似于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>
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,任何想法为什么我会收到此错误?我该如何解决?
谢谢!
更新
我已将客观化版本更新为v5.1.5,但问题仍未得到解决?
答案 0 :(得分: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,那将是非常棒的:)
答案 1 :(得分:0)
我一直有同样的问题。 我找到了导致问题的原因(对我而言)。我一直在使用Guice和sitebricks来构建我的后端服务。
问题
为了使用Objectify,我必须在我的一个模块中将ObjectifyFilter
绑定为Singleton。我正在执行绑定的模块在ServletModule
中通过Guice扩展了SitebricksModule
已安装,我将服务绑定到网址。然后将SiteBricksModule
传递给Guice的注射器。
我观察到,当我在另一个模块中安装一个模块时,问题仍然存在。
我找到的解决方案
或
Objectify
之类的内容,例如绑定过滤器并在其他模块中指定过滤器模式,并将其首先传递给Guice的注入器。希望这有帮助!
答案 2 :(得分:0)
I just started to use Objectify and had the same problem than you. I just don't read the setup information... Simply add that on my web.xml and it worked:
<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>
答案 3 :(得分:0)
我遇到了同样的错误,this solusion为我工作
添加web.xml
%2fHome%2f_Groupers%2f%3fGroupIDForLookup%3d2&GroupIDForLookup=2
答案 4 :(得分:-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");
}
更新
public class DatastoreService {
static {
factory().register(State.class);
}
public static Objectify ofy() {
return ObjectifyService.ofy();
}
}