0

我们使用 Rythm 引擎,偶尔会出现以下错误。它在 90% 的时间里都能正常工作。我们为每个线程创建一个实例

INFO   | jvm 1    | 2017/02/14 11:01:12 | java.lang.ClassFormatError: Incompatible magic value 3405691594 in class file C0a10f69e_cfb4_390e_ac5d_bbf66958669e__R_T_C__
INFO   | jvm 1    | 2017/02/14 11:01:12 |   at java.lang.ClassLoader.defineClass1(Native Method)
INFO   | jvm 1    | 2017/02/14 11:01:12 |   at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
INFO   | jvm 1    | 2017/02/14 11:01:12 |   at org.rythmengine.internal.compiler.TemplateClassLoader.loadTemplateClass(TemplateClassLoader.java:297)
INFO   | jvm 1    | 2017/02/14 11:01:12 |   at org.rythmengine.internal.compiler.TemplateClassLoader.loadClass(TemplateClassLoader.java:254)
INFO   | jvm 1    | 2017/02/14 11:01:12 |   at org.rythmengine.internal.compiler.TemplateClass.getJavaClass(TemplateClass.java:371)
INFO   | jvm 1    | 2017/02/14 11:01:12 |   at org.rythmengine.internal.compiler.TemplateClass.templateInstance_(TemplateClass.java:387)
INFO   | jvm 1    | 2017/02/14 11:01:12 |   at org.rythmengine.internal.compiler.TemplateClass.asTemplate(TemplateClass.java:413)
INFO   | jvm 1    | 2017/02/14 11:01:12 |   at org.rythmengine.internal.compiler.TemplateClass.asTemplate(TemplateClass.java:419)
INFO   | jvm 1    | 2017/02/14 11:01:12 |   at org.rythmengine.RythmEngine.getTemplate(RythmEngine.java:924)
INFO   | jvm 1    | 2017/02/14 11:01:12 |   at org.rythmengine.RythmEngine.getTemplate(RythmEngine.java:945)
INFO   | jvm 1    | 2017/02/14 11:01:12 |   at org.rythmengine.RythmEngine.render(RythmEngine.java:1019)

这就是我们创建引擎的方式

public class RythmEngineUtil {

    /**

 * clear the rythm Pre compiled data
 */
static{
    try {
        File dir = new File("./", "__rythm");
        if(!dir.exists()){
            dir.mkdir();
        }else{
            deleteDirAndChildren(dir);
        }
    }catch(Exception e){
        e.printStackTrace();
    }

}

private static void deleteDirAndChildren(File dir) {
    if (dir.isDirectory()) {
        String[] children = dir.list();
        for (int i = 0; i < children.length; i++) {
            new File(dir, children[i]).delete();
        }
    }
}

/**
 * Initilize Rythm Engine
 */
private static ThreadLocal<RythmEngine> rythmEngine = new ThreadLocal<RythmEngine>() {
    protected RythmEngine initialValue() {

        Map<String, Object> conf = new HashMap<String, Object>();
        conf.put("rythm.codegen.compact", false);
        conf.put("engine.precompile_mode", true);
        conf.put("engine.load_precompiled", true);
        conf.put("home.template","xyz/some");
        conf.put("home.precompiled.dir", new File("./", "__rythm"));
        RythmEngine engine = new RythmEngine(conf);

        System.out.println("Got new RythmEngine -" + engine.getId());

        return engine;
    }

};


public static RythmEngine getEngine() {
    return rythmEngine.get();
}

private RythmEngineUtil() {
}

private static RythmEngineUtil _instance = new RythmEngineUtil();

public static RythmEngineUtil getInstance() {
        return _instance;
    }
}

然后像这样使用它

RythmEngineUtil.getEngine()

4

0 回答 0