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);