2012-02-16 62 views
1

我必須實現一個讀取配置文件並運行配置文件中指定的應用程序的工具。一種用於測試的自動化跑步者。我已經實現了一個這樣做的程序,但是我已經打開了依賴牆。在我目前的設計工具中解析配置文件並檢索ProgramType和作業列表的Map。基於ProgramType,Runner類被選擇並初始化,runner類是Program src的一部分。運行java MainClasses的工具,避免依賴關係的設計陷阱

//this is just a pseudo code 
pkg org.Tool 

class Tool { 
    //after parsing 
    runJobs(map) { 
    if(map.get() == ProgramType) 
     org.Tool.JobStats = org.ProgramType.Runner.run(Job) 
    } 
} 

pkg org.ProgramType 

class Runner { 
org.Tool.JobStats run(Job) { 
    if(Job = "certain job") 
    return CertainJob.run(Job) 
} 
} 

要建立我需要編譯org.ProgramType工具*。構建我需要org.Tool.Job和org.Tool.JobStats的ProgramType。我創建的「依賴地獄」顯然是非常糟糕的設計。我提供了一個簡單地調用ProgramType jar並將JobStats存儲在jobStats.txt文件中的解決方案,一旦jar執行完成,讀取文件並對其進行處理。這個解決方案是不可接受的,因爲喬布斯可以使用多種配置運行多次,只需要很多* .txt文件來處理。我想我曾經爲我的問題看過一次編譯解決方案,比如「部分編譯」工具,編譯ProgramType,重新編譯工具。但是我無法找到它,擺脫「依賴地獄」反模式也是明智之舉。因此我的問題是「我應該如何設計這個」。

(我希望解釋清楚,如果不是隻問)

解決

正如我在評論中寫道我@aviad一直在尋找一個設計模式,以解決我的問題。我發現了一個它所謂的「依賴倒置原則」。在這裏我鏈接一個描述該模式的pdf文檔,其值得閱讀(http://www.objectmentor.com/resources/articles/dip.pdf)(另一個很好的解釋http://java.dzone.com/articles/fun-modules)。謝謝大家的幫助(我真的很喜歡你推薦的框架)。

+0

您是否在談論依賴注入?如果是這樣,請在這裏查看Guice http://code.google.com/p/google-guice/ – tartak 2012-02-16 11:18:51

+0

我應該如何設計它?簡短的回答:像maven;甚至更短:反射 – 2012-02-16 11:21:11

+0

Catalin Thx的提示我會研究它。 @guido是不是反映錯誤容易和難以維護? – alien01 2012-02-16 11:39:21

回答

1

我認爲如果您可以使用SpringBatch框架,您仍然可以使用大部分代碼。

使用Spring批處理的優點是,它是所有艱苦工作已完成(配置,多線程,持久性等)的框架。

基本上,你需要運行可以通過運行啓動一個批處理文件\ shell腳本執行的Java程序:

java -cp %JOB_CLASSPATH% %JOB_MAIN_CLASS_FULLY_QUALIFIED_CLASS_NAME% 

所以我就用了以下的設計:

整個解決方案基於Spring的應用程序。 控制器類(您的主類)讀取配置並運行該節目。控制器類使用作業及其配置來填充作業隊列。然後,從隊列中檢索每個作業,並以編程方式實例化並運行Spring批處理作業。

您還可以使用Commons Exec從java執行批處理文件\ shell腳本。

以後可以移動到Web容器中運行(爲了使配置更改和就業觸發通過HTTP) - 檢查Spring Batch Admin

,也可以運行您的解決方案在sceduled的方式,如果你使用Quartz FW

祝你好運!

+0

Thx對於框架建議,我也會研究它們。儘管框架可以解決我的問題,但我更加想知道(僅僅爲了解)如何在J2SE中完成這些工作,而無需使用外部罐。某種「設計模式」適用於這種類型的應用程序。 – alien01 2012-02-17 11:03:40