2015-02-06 59 views
0

我正在開發一個相當一定範圍的Java Web應用程序。 它有許多模塊,使用許多外部庫來完成工作,並與一組獨立的批處理應用程序(cron作業)密切合作,這些應用程序生成PDF,發票,批處理日誌文件,定期向所有合作伙伴FTP上傳文件那種東西。在webapp和批處理應用程序之間共享代碼庫的好方法是什麼?

我的代碼庫中劃分

  • 網/批層
  • 業務層
  • 通用模型層
  • DAO層

第一層包含兩個包.web.batch。第一個包含所有與servlet相關的東西,後者包含所有批處理程序和main(String[] args)方法。兩全其美使用公共和業務層做他們的工作,甚至常常同樣的方法(如loadUser()storeUser()等)

現在我有一個寬泛的問題:

什麼是合適的部署策略爲了這?

鑑於我想將我的webapp部署爲.war歸檔文件,並且批處理程序應該可以從UNIX cron進行調用。

和一個非常特殊的一個:

我怎麼會去加載資源從業務層?

在考慮web應用程序,我會保存配置文件,就像一個Apache FOP配置文件和.xsl轉換文件生成發票PDF等的WEB-INF目錄中,可能是一些子目錄,或在.war文件META-INF

但是,在需要這些東西的業務層(例如服務方法generateInvoicePDF(transaction))中,我無法使用servletContext來獲取資源。而在批處理程序中,甚至沒有一個servletContext和一個WEB-INF目錄!

你們是怎麼做到的?你真的只需要資源在網頁層?或者你會將所有這些文件放入類路徑根目錄並使用ClassLoader.getResource()?我最終會在那裏提供一些相關的文件。不喜歡那樣。或者只將類路徑根目錄中的文件和.xsl配置到文件系統中的某個外部硬編碼文件夾(不是非常便攜)?

其他項目的指導和經驗將不勝感激。

回答

1

如果您有業務層需要的資源,請將它們放入業務層jar中。

不要伸出你的web層(通過ServletContext)來檢索內層的東西。

請參閱:How to package resources, that are accessed directly , into a jar file

+0

感謝羅布,是有道理的。事實上,我在Eclipse中的項目結構甚至不允許我從業務層接觸到Web類(單向項目依賴項)。我會考慮將所有內容放在classpath根目錄下。 – marc82ch 2015-02-09 09:19:17

相關問題