2010-06-15 117 views
13

我目前使用Java & Spring(MVC)創建一個webapp,我正在考慮轉向Grails。我會很感激以下意見/見解:考慮從Java/Spring MVC遷移到Grails

  1. 我在當前的Java /春天的webapp,我通過web.xml的ContextLoaderListener加載多個應用程序上下文; Grails中可能有多個應用程序上下文嗎?如果,是的,如何?

  2. 該web應用程序廣泛使用CXF restful web服務,而當前的Java/Spring webapp使用捆綁的CXF HTTP客戶端。我可以繼續在Grails中使用(Java)CXF HTTP客戶端嗎?

  3. 我使用UserDetails和UserDetailsS​​ervice的自定義實現實現了Spring Security,我可以在Grails中「按原樣」重新使用這些實現,還是必須重新實現它們?

  4. 有一個我依賴Spring的jdbc模板(而不是可用的ORM)以及我在應用上下文中定義的額外數據源的實例,我可以在Grails中重新使用它嗎?

  5. 我打算使用Maven作爲項目管理工具;有什麼問題在使用Groovy和Java的組合時使用Maven?

編輯: 我考慮轉移到Grails的,使Web應用程序的Web組件的發展 「快」,一拉的Ruby-on-Rails的。另外,我正在考慮Grails,而不是說Ruby-on-Rails,因爲我想繼續使用JVM,並且我在過去使用過Grails,並且它的拾取和使用相當簡單。

回答

6
  1. 也許吧。 Grails使用它在web.xml文件中配置的Spring的ContextLoaderListener類的子類。如果你讓我知道你是如何用Spring MVC做的話,我可以更精確地回答。

  2. 是的。你甚至可能會喜歡CXF插件,雖然我不能爲它擔保:

    http://grails.org/plugin/cxf

  3. 您應該能夠使用它們原樣。但是,您可能想要檢查這是否可以通過Spring Security插件輕鬆完成。我相信是這樣,但是你可以從插件的作者Burt Beckwith那裏得到明確的答案。

  4. 是的。您還可以獲得Hibernate會話工廠來執行原始Hibernate的東西。 GORM還可以使用多個數據源的工作:

    http://grails.org/plugin/datasources

    另一個伯特·貝克威思一個:)

  5. 這取決於你所說的「Groovy和Java的結合」是什麼。您可以使用Maven構建Grails項目,但整合並不完全平滑。如果您的Grails項目中包含Java和Groovy,則會自動處理。

爲了迴應Bozho,我使用了標準的Grails服務+ GORM,並且不會以任何其他方式進行。請注意,如果您將Java用於服務和域模型,則不會自動重新加載服務。您也失去了Groovy帶來的表現力和簡潔性的好處。

如果您願意,您可以在Grails服務中使用靜態類型,以便您的IDE更易於提供代碼完成。它還可以提供有關它無法識別的屬性和方法的提示(這將對應於Java編譯錯誤)。也就是說,即使使用靜態類型,Groovy也不能在編譯時進行類型檢查。你只會在運行時發現它們。

+0

Spring Security核心插件是非常可定製的,請參閱http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/上的第7章 - 您可以直接使用Spring Security而無需插件在普通的Spring應用程序中。 除了Datasources插件(將一些域類重新指向另一個數據庫)之外,您還可以在resources.groovy中創建第二個數據源,然後使用groovy.sql.Sql或JdbcTemplate訪問它。 – 2010-06-16 16:52:31

+0

感謝您的詳細回覆,它是非常有用的.Btw,我通過在contextConfigLocation參數中指定它們來加載多個上下文,即「classpath:applicationContext.xml」 @Burt:感謝您對安全性的指導選擇;我不知道這個插件是可定製的,或者我可以直接使用Spring Security。 – MDS 2010-06-18 00:22:43

0

你可以在grails中完成所有這些事情。它支持所有現有的Java類和彈簧配置(grails是在spring mvc上構建的)

但是,我真的不建議將整個應用程序移到grails中。如果您擁有不是Java專家的Web開發人員,則可以只移動Web層。

服務層,數據訪問等更好地保持純Java。也就是說,只有你的web控制器 - 收集用戶輸入的組件處理http請求和會話,應該使用grails。剩下的 - 無狀態的服務類和你的域模型最好是Java。這是我的看法,但我已經有一些Grails的經驗,靜態鍵入服務層將爲您節省很多麻煩。

+0

您能否進一步解釋您的意思:「服務層,數據訪問等等,更好地保持純Java。」你是否建議我直接使用Spring/JPA/Hibernate而不是GORM? – MDS 2010-06-16 14:17:05

+0

是的。看到更新。 – Bozho 2010-06-16 14:39:49

+0

我不同意。 GORM(與插件架構一起)是Grails中最強大的部分,所以如果你沒有充分利用它,那麼你可能只是做純Java。 – 2010-06-16 16:45:34

0

2)是的,您可以按原樣使用CXF。 CXF頂部有一個很好的圖層,叫做GroovyWS。我只用它來消費SOAP服務,但也許它對REST也有幫助。它非常易於使用。 對於消費REST服務,我使用了HTTP Builder

4)是的。您可以繼續使用例如用於配置數據源的彈簧配置,或者您今天執行的任何其他方式。多個數據源不成問題。

5)我最近嘗試過使用Grails(1.2.1)和Maven。它可行,但Maven和Grails都試圖進行依賴管理時遇到了一些問題。文檔可能是最糟糕的部分。我還沒有試過升級到1.3版本,因爲一些主要的Maven相關的JIRA,但是1.3.2版本已經到了,現在這些問題已經得到解決了:)還會有1.3.2 maven原型。期待這一點。 「Maven倉庫插件的部署和解決」是Grails 1.3的新功能之一,因此事情可能會更好。 1.3.2的發展藍圖今天發佈,但在發言時還剩下8個問題,所以我的猜測是明天,Grails的發佈通常是按時發佈的。如果你可以等待,你可能會爲自己節省一些麻煩。

+0

感謝您告訴我有關GroovyWS和HTTP Builder的信息;這兩個看起來都非常有用,我必須進一步研究。 – MDS 2010-06-18 00:22:06

0

如果您正在尋找快速的應用程序開發,但對groovy沒有特別的興趣,您應該考慮一下spring-roo。它提供了相同類型的RAD功能,但是構建了一個完全標準的java + ORM + spring-mvc應用程序(它在roo上沒有實際的依賴關係(運行時或編譯))。它絕對不像grails那麼成熟,但是你可能會發現它更適合你現有的靜態類型的java代碼和現有的ORM等經驗。我只在roo中完成了一些小型的寵物項目,但我一直很印象深刻,尤其是如何自定義生成的代碼並在寫入和生成的代碼之間來回移動。最初的教程非常迅速,頗有啓發。