2010-06-07 73 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

相關問題