2012-01-27 117 views
3

我最近得到了objectify与app引擎的合作,但是我在多次注册一个对象类时遇到了麻烦。在Eclipse中开发时,每次刷新本地主机时都会重新编译和运行,注册该学生的脚本会多次运行,并且只需刷新一次就会崩溃程序。Google App Engine + Objectify:注册一次对象?

<% 
//In my main.jsp file, which is the main interactive html page 
ObjectifyService.register(Object.class); 
%> 

如何确保此脚本只运行一次?有没有办法检查一个类是否通过物化注册?我遵循另一个stackoverflow线程上的建议做到以下几点:

public class Object { 
    ... 
    static { 
     ObjectifyService.register(Object.class); 
    } 
    ... 
} 

这给了我一个不同的错误。我该如何解决这个问题?

+0

“崩溃”? “一个不同的错误”?请明确点!包括堆栈跟踪! – 2012-01-27 04:55:44

回答

1

把它放在你的ServletContextListener,具体而言,在contextInitialized()挂钩。这将确保Objectify注册​​码仅在服务器预热时执行一次。

+0

这个伎俩,谢谢! – theeggman85 2012-01-27 20:15:21

1

看在这样一个可靠的例子:

Objectify in JSP

你可以找到类似的尝试注册类,但...阅读从示例注释:

//请小心这条线!这是一个例子,但是在一个真实世界的项目中,你应该看看一个更好的
//注册一个实体的位置,建议在应用程序的一开始。

所以......你可能在你实现像几个方法的Java类:获取/把/删除等等,并在Java类,你应该把代码注册类

static { 
     ObjectifyService.register(Object.class); 
    } 

OR,寻找那些被在应用程序调用一次,其他一些地方开始

+0

[Objectify文档](http://code.google.com/p/objectify-appengine/wiki/BestPractices#How_NOT_To_Register_Entities)对此非常明确。 – 2012-01-27 08:46:45

+0

我说要在一个实现了CRUD操作的类中添加静态块......所以如果你把静态块放在里面(并且你必须在使用CRUD操作之前创建它的一个实例),它应该没问题,我没有说要将静态块注册到“对象”类本身内部 – Daniel 2012-01-27 12:44:55

+1

我很抱歉误导了一下。我更多地提到一般情况,而不是你的正确建议。你所描述的,注册到DAO,是一个段落之上我链接到一个:http://code.google.com/p/objectify-appengine/wiki/BestPractices#Use_a_DAO – 2012-01-27 12:50:11