2010-06-07 75 views
0

我正在开发一个网站,使用一些复杂的计算(NLP相关)。我的客户希望为这些计算中的某些计算“调试”网页,在这些计算中他可以用任意输入运行它们并查看计算过程中发生的所有中间结果。在Java中为计算创建调试网页的最佳方式是什么?

在此请求之前,所有的计算都封装在bean中,中间结果记录到通用日志中。

在Java级别捕获所有这些结果以将它们呈现为网页的最佳方式是什么?

+1

如果你想在屏幕上看到日志输出,为什么不使用适配器模式并创建一个采用servlet的printstream并写入该日志的日志?我不知道你的日志记录是如何设置的,所以我不能进一步协助,直到那时,但你似乎只想使用不同的记录器实现。 – 2010-06-07 13:08:15

+0

谢谢,我会考虑如何做到这一点。 – Fixpoint 2010-06-07 14:23:04

回答

0

最后,我想出了以下解决方案:使用可选的ThreadLocal<Map>在计算存储中间值。最后它看起来大致是这样的:

public class ComplexComputation { 
    public static final ThreadLocal<Map<String, Object>> DATA 
     = new ThreadLocal<Map<String, Object>>(); 

    public Result compute(Inputs inputs) { 
     // ... do something ... 
     if (DATA.get() != null) { DATA.get().put("intermediate", intermediate); } 
     // ... do something ... 
     return result; 
    } 
} 

public void computationDebuggingCaller() { 
    ComplexComputation.DATA.set(new HashMap<String, Object>()); 
    new ComplexComputation().compute(...); 
    Object intermediate = ComplexComputation.DATA.get().get("intermediate"); 
} 
0

我建议嵌入servlet容器(Apache Tomcat上或码头,我喜欢的Tomcat更多)在您的应用程序并创建了一套JSP/Web界面JSF的servlet。这个解决方案可以让你使用所有的Java企业技术(如JAAS)和你的网络界面,并避免重蹈覆辙。

我估计用tomcat创建这样的解决方案的工作量为1天的密集复制/粘贴。在骨骼开始呼吸之后,可以在Eclipse可视化工具中用几个鼠标拖拽/点击来创建网页本身。

相关链接 how to embed tomcat 6 embedding Jetty Eclipse JSF Tools

+0

该应用程序已经是在嵌入式Jetty上运行的Web应用程序。问题在于如何捕获生成深层Bean层次结构的中间计算值,并使其能够访问控制器而不会牺牲代码的可读性和性能。 – Fixpoint 2010-06-07 12:59:07

相关问题