Playframework 2.0 启动时设置类列表属性的目的是什么?
启动时设置类列表属性的目的是什么?看看代码,它似乎是用来检查是否需要重新扫描。原因是什么Playframework 2.0 启动时设置类列表属性的目的是什么?,playframework-2.0,playorm,Playframework 2.0,Playorm,启动时设置类列表属性的目的是什么?看看代码,它似乎是用来检查是否需要重新扫描。原因是什么 如果这个列表是强制性的,这看起来像是因为我们正在做一个未检查的列表。get(0)几乎无处不在,为什么不在启动时进行强制性检查呢。也许当我了解了列表的用途后,我就能够实际地输入一些值。您不需要使用“重新扫描”。这主要是针对playframework之类的框架。在playframework中,您从不重新启动服务器的原因是它重新编译您的类并将它们放入“新”类加载器,这意味着如果这些新重新加载的类没有“重新扫描”,
如果这个列表是强制性的,这看起来像是因为我们正在做一个未检查的列表。get(0)几乎无处不在,为什么不在启动时进行强制性检查呢。也许当我了解了列表的用途后,我就能够实际地输入一些值。您不需要使用“重新扫描”。这主要是针对playframework之类的框架。在playframework中,您从不重新启动服务器的原因是它重新编译您的类并将它们放入“新”类加载器,这意味着如果这些新重新加载的类没有“重新扫描”,控制器将遇到问题。此重新扫描方法仅适用于playframework中的开发模式。实际上,重新扫描可能不应该在api中,而应该移到impl中。现在,它被playframework中使用的NoSql用来获取EntityManager,就像NoSql.em()一样 NoSql.java中的以下代码是使用重新扫描的代码(注意:如果newClass==testClass正在测试的是某个实体Car.class==Car.class,并且如果两个Car.class不相等,我们知道playframework重新加载了它的类,我们需要重新扫描这些新类)…他们对hibernate做同样的事情,因为他们也必须重新扫描hibernate实体
@SuppressWarnings("rawtypes")
private static void testForRescan() {
List<Class> classesToScan = playCallback.getClassesToScan();
Class newClass = classesToScan.get(0);
if(newClass == testClass)
return;
//otherwise, we need a rescan of all the new classes
ClassLoader cl = playCallback.getClassLoader();
factory.rescan(classesToScan, cl);
testClass = newClass;
}
由于play插件现在可用,我知道上面的代码不再有效。因此,我试图改变我们的应用程序使用插件。我已经完成了wiki中给出的所有步骤,但仍然会出现以下错误。play.exceptions.JavaExecutionException:Entity type=PlayAccount未在启动时扫描并添加到元信息中。它要么缺少@NoSqlEntity注释,要么不在扫描包列表中。我已经创建了一个类nosql。在同一个项目中持久化,但仍然会出现错误?你能告诉我可能遗漏了什么吗?好的。我现在明白了。我想我曾两次尝试创建NoSqlEntityManagerFactory。删除该代码,只需将EntityManager设置为NoSQL.em(),它就可以正常工作了……谢谢。
private static class OurPlayCallback implements PlayCallback {
@Override
public List<Class> getClassesToScan() {
return Play.classloader.getAnnotatedClasses(NoSqlEntity.class);
}
@Override
public ClassLoader getClassLoader() {
return Play.classloader;
}
@Override
public Object getCurrentRequest() {
return Http.Request.current.get();
}
}
NoSql.initialize(new OurPlayCallback(), db, builder);