【问题标题】:How to use Spring Roo domain model in a regular web app如何在常规 Web 应用程序中使用 Spring Roo 域模型
【发布时间】:2012-03-24 15:51:54
【问题描述】:

我使用 Roo 构建了一个小模型。模型中有 6 个具有各种关系的对象 - 很整洁,花了大约 20 分钟!现在我有了它,我想创建 Spring MVC 项目并使用域模型 - 但我想让 Web 项目与 Roo 项目完全分开(我还不了解 Spring MVC 在 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 域模型?

谢谢!

【问题讨论】:

  • 好像您已经将 Spring 上下文文件与 Web 模块一起移动了。

标签: spring-roo


【解决方案1】:

首先,我看不出将域代码与控制器代码分开的任何合乎逻辑的理由。请记住,我是从一个曾开发过包含数万个类的巨大应用程序的人的角度说的,这些类在 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,而且非常易于学习和使用。

【讨论】:

  • 这是一个很好的建议,如果我没有取得进展,我会试试这个。我最终保留了一个项目并使用 Git 创建了一个分支来测试设置 web mvc 的东西。我同意,Spring MVC 非常好。感谢您的建议!
  • 每个“应用程序”都生成 JAR 和 WAR?通常 Maven 会为每个模块生成一个工件(WAR 或 JAR),您是如何实现的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 2018-01-31
  • 2015-01-27
相关资源
最近更新 更多