2011-08-17 31 views
2

有沒有人有任何建議,或知道任何最佳做法的地方和如何在Java項目中編寫和存儲JavaScript map/reduce函數以用於MongoDB數據庫?在哪裏編寫和存儲java項目中的mongoDB map/reduce函數

我正在尋找的標準是:

當寫作和編輯功能,我想語法高亮和錯誤檢查的IDE(我使用Eclipse)提供的好處。

如果可能,我不想在完成編輯後將功能複製到其他位置。

我寧願存放在比數據庫本身的源代碼的功能,爲便於參考,版本控制等

的你是如何解決的任何實例這一問題將是巨大的。

編輯:我不知道我已經正確解釋自己,所以這裏的另一個走:

我不要求有關基本資源管理。我所追求的是,​​如果可能的話,一個工作環境,在編輯「就地」功能的同時,讓我獲得IDE的好處。如果我錯過了一些非常明顯的事情,你將不得不原諒我。

我想避免是什麼東西,因爲你可能與SQL見,例如當它作爲一個類文件中的字符串存儲:

private static final String MAP_FUNC = 
    "function() { " + 
    " emit(this.id, {total : this.total}); " + 
    "};"; 

或採用Java屬性文件:

map.func=function() { 
\  emit(this.id, {total : this.total}); 
\ }; 

你必須輸入一些無關字符,例如「s和\ s」,你必須把它寫在別的地方,然後複製並粘貼它並添加這些字符(或者你可能有一個工具可以做到這一點對你來說 - 你仍然必須這麼做)。

由於JavaScript在使用.js文件編寫時驗證了JavaScript,所以我不想做任何這樣的事情。我想以這樣一種方式將函數存儲在.js文件中,以便在需要時通過map/reduce調用以方便使用。

有沒有人這樣做,或類似的?我最初的想法只是爲每個函數創建一個.js文件,但是.js文件中只有一個匿名函數,在eclipse中驗證失敗,這使得它沒有意義 - 您必須將它分配給var - 這意味着它沒有以map/reduce消費的正確形式。我想我可以創建功能內容的文件?但是,這一切聽起來有點混亂,我希望有人可能會遇到問題,並有一個整潔的解決方案。

回答

0

我們將JS文件作爲應用程序資源放置在(Eclipse)項目中,然後在應用程序初始化時,這些文件由Java應用程序(在我們的例子中爲web應用程序或守護進程)讀取,然後存儲在單例管理類中,然後在調用地圖/縮小時根據需要使用。

這是相對直接的資源管理。

+0

也許我在這裏錯過了一些明顯的東西,或者我沒有足夠好地說出我的問題。我在尋找的是一種創建和編輯map/reduce函數的簡單方法,它可以獲得IDE的所有好處,並且可以將它們「保留」以作爲應用程序的資源使用。 直截了當的資源管理我明白 - 我正在簡化創建和編輯這些資源的過程。例如,每個函數都可以保存在一個單獨的.js文件中。但是(在Eclipse中)javascript驗證將不允許包含以下內容的文件: 'function(){...}' – Russell

+0

我將編輯問題以嘗試更好地解釋自己。 – Russell

2

我使用的約定,我已經在大多數開源項目(包括Spring等)看作是把所有非Java文件資源目錄下,一個描述性的目錄下:

module-root/ 
    src/ 
     main/ 
      java/ 
       (Java sources go here) 
      resources/ 
       log4j.xml 
       spring/ (spring xmls go here) 
       sql/ (sql scripts go here) 
       mongo/ (<-- seems like a good place for mongoDB functions) 
     test/ 
      unit/ 
       java/ (unit test java sources go here) 
       resources/ (unit test specific resources - usually none) 
      integration/ 
       java/ (integration test java sources go here) 
       resources/ 
        spring/ (usually an ITestAssembly.xml goes here) 

的buildfile然後將資源打包到資源jar中,該資源jar會與其他所有jar一起部署。