Objectify 5.1上下文未启动由于缺少ObjectifyFilter而导致错误

时间:2014-10-26 19:32:02

标签: google-app-engine objectify

使用最新版本的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,但问题仍未得到解决?

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)

我一直有同样的问题。 我找到了导致问题的原因(对我而言)。我一直在使用Guicesitebricks来构建我的后端服务。

问题

为了使用Objectify,我必须在我的一个模块中将ObjectifyFilter绑定为Singleton。我正在执行绑定的模块在ServletModule中通过Guice扩展了SitebricksModule 已安装,我将服务绑定到网址。然后将SiteBricksModule传递给Guice的注射器。

我观察到,当我在另一个模块中安装一个模块时,问题仍然存在。

我找到的解决方案

  • 我将两个模块分开并将它们都传递给Guices的注射器。

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