2012-03-07 18 views
0

我已經使用Roo構建了一個小模型。模型中有6個對象具有不同的關係 - 它很整潔,花了20分鐘!現在我已經擁有它了,我想創建Spring MVC項目並使用領域模型 - 但是我想讓Web項目與Roo項目完全分離(我不明白Spring MVC在Roo中使用腳手架)。如何在普通Web應用程序中使用Spring Roo域模型

所以我在web項目的pom.xml中創建了依賴關係,我可以使用'mvn tomcat:run'構建和部署web項目。然而,當網頁嘗試使用Spring Roo的對象,我得到的例外是這樣的:

java.lang.IllegalStateException: Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?) 
at com.loquatic.clcmops.consignortool.entities.Consignor_Roo_Jpa_ActiveRecord.entityManager_aroundBody0(Consignor_Roo_Jpa_ActiveRecord.aj:19) 
at com.loquatic.clcmops.consignortool.entities.Consignor_Roo_Jpa_ActiveRecord.ajc$interMethod$com_loquatic_clcmops_consignortool_entities_Consignor_Roo_Jpa_ActiveRecord$com_loquatic_clcmops_consignortool_entities_Consignor$entityManager(Consignor_Roo_Jpa_ActiveRecord.aj:1) 
at com.loquatic.clcmops.consignortool.entities.Consignor.entityManager(Consignor.java:1) 

我曾經在一個獨立的項目這樣做的一個項目,我有一個類,它有一個main()方法和我必須添加一行代碼才能正確加載上下文(這基本上是:How to use JUnit tests with Spring Roo? (Problems with EntityManager))。這是Spring MVC,我認爲它是自動發生的 - 我顯然是錯誤的。

那麼,我需要在web項目中做些什麼來獲取爲Roo jar文件加載的上下文嗎?或者我是否需要更改roo jar文件項目中的某些內容?我是否需要用控制器註釋來讓它開心?

我試着加入以下在Web項目中的pom.xml:

 <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aop</artifactId> 
     <version>${org.springframework-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aspects</artifactId> 
     <version>${org.springframework-version}</version> 
    </dependency> 

<dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
     <version>${org.aspectj-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjweaver</artifactId> 
     <version>${org.aspectj-version}</version> 
    </dependency> 

但是,這並沒有改變任何東西 - 這是一些嚴重的猜測工作也是如此。

任何人有任何指針?你如何在另一個不一定是Roo項目的項目中使用Spring域模型?

謝謝!

+0

好像你已經將Spring上下文文件和Web模塊一起移動了。 – bhagyas 2012-03-07 12:23:25

回答

0

首先,我沒有看到任何邏輯原因將域代碼與控制器代碼分開。請記住,我從一個從事過包含數萬個類的巨大應用程序的人的角度講這個問題,所有這些類都在Eclipse中分成了大約15個不同的子項目。這些都是使用Spring構建的,大部分都是,但沒有Roo。

我認爲你需要做的是這樣的。首先,您需要創建一個主Maven項目。不是JAR或WAR項目,只是一個主「容器」。我忘記了確切的maven命令,但有一個創建一個空的父POM和所有。

一旦你有了「主」設置,你就創建了兩個子POM,一個用於域的東西,一個用於WAR的東西。大師將決定你需要編譯的順序。通常首先是低級庫,然後是更高級別的項目,最後是一些WAR項目。您的WAR項目POM應設置爲引入更高級別的項目,而更高級別的項目POM應引入低級庫。

我們使用作爲我們的基本層次是什麼:

'master' 
    - components 
     - 'lib 1' 
     - 'lib 2' 
    - apps 
     - 'app 1' 
      - 'app 1'_jar 
      - 'app 1'_war 
     - 'app 2' 
      - 'app 2'_jar 
      - 'app 2'_war 

這是在工作中出項目的基本佈局,在「被替換爲您正在使用的所有命名」的物品。不要問我們爲什麼要這樣做,這是多年前的討論,可能會或可能不再相互關聯。底線:其過度,但它的作品。

一旦你得到你的項目層次結構設置,那麼你需要從Eclipse中刪除所有的項目。只要刪除他們......他們設置與Roo和這樣的想法,並且它不會玩將Roo的東西做非Roo的東西。然後運行:

mvn eclipse:clean eclipse:eclipse 

通常你可以從頂級項目做到這一點,但有時你必須單獨做每一個子項目。

我還建議你看看Spring Roo如何處理Spring MVC。這是一個非常好的實現,很好地使用Aspects,並且SUPER易於學習和使用。

+0

這是一個很好的建議,如果我沒有取得進展,我會試試這個。我最終保留了一個項目,並使用Gi​​t創建了一個分支,用於測試設置web mvc的東西。我同意,Spring MVC真的很好。感謝您的建議! – Jon 2012-03-20 14:32:03

+0

每個'app'同時生成JAR和WAR?通常Maven會爲每個模塊生成一個工件(WAR或JAR),您是如何實現這一點的? – 2012-09-18 17:39:42

相關問題