spring roo_使用Spring Roo 1.2开发Spring MVC和GWT应用程序并将其部署在Cloud Foundry上

在本系列的第1部分第2部分中,您使用Spring Roo 1.1开发了会议应用程序。 在第3部分第5部分中,您开发了Spring Roo附加组件。 在这两者之间,在第4部分中 ,您研究了Cloud Foundry和Spring Roo的集成。 自从第2部分以来,我们没有讨论过Spring Roo去年引入的许多新功能或更改。 在以前版本中可用的许多命令不再起作用或不建议使用。 当前版本的另一个重要方面是Spring Release 3.1的使用,它是Spring框架的最新也是最出色的版本,具有Profile,Environment抽象,Cache抽象等功能。 使用当前版本的Spring Roo意味着要使用最新版本的Spring框架。 在本文中,您将快速查看Spring Roo的最新版本(即1.2.1版),然后创建一个多模块Google Web Toolkit(GWT)和Spring Web Model–View–Controller(MVC)应用程序然后将其部署到Cloud Foundry。

Spring Roo 1.2简介

Spring Roo是用于构建Spring应用程序的命令行快速应用程序开发工具。 在过去的一年中,Spring Roo推出了主要版本1.1.5和1.2,这使Spring Roo变得更强大且对企业开发人员更友好。 这些版本中引入的主要功能或更改是:

  1. MongoDB支持:对于较早版本的Spring Roo,Spring Roo应用程序需要RDBMS(例如MySQL或PostgreSQL)作为后端,但Google App Engine BigTable支持除外(但它从未与关系一起使用)。 从1.2版开始,MongoDB可用作数据存储。 MongoDB是一种流行的NoSQL文档数据存储。 构建Spring MongoDB应用程序的能力展示了Spring Roo的可扩展性。 要查看所有与MongoDB相关的命令,请输入:
    help --command mongo
  2. JavaServer Faces(JSF)2.0支持:在版本1.2之前,默认情况下,Spring Roo支持GWT和Spring MVC作为视图选项,但是在版本1.2中,Spring Roo还支持JSF 2.0作为视图选项之一。 Spring Roo当前支持Apache MyFaces和Oracle Mojarra JSF实现,并支持PrimeFaces作为其组件库。 它是JIRA中最受欢迎的问题之一,在1.2版中已得到解决。 要查看JSF的所有可用命令,请输入:
    roo> help --command "web jsf" 
    * web jsf all - Create JSF managed beans for all entities  
    * web jsf media - Add a cross-browser generic player to embed multimedia content  
    * web jsf scaffold - Create JSF managed bean for an entity  
    * web jsf setup - Set up JSF environment

    本文将不涉及构建JSF 2.0应用程序,以后的文章中可能会涉及到。 希望构建JSF应用程序的开发人员可以尝试与Spring Roo捆绑在一起的bikeshop.roo应用程序。 示例文件夹位于Roo分发中。

  3. 多模块Maven项目支持:这是社区要求的最受欢迎的功能之一,现已可用。 在1.2版之前,所有应用程序代码都必须在一个Maven项目中编写。 这对于构建企业应用程序具有抑制作用,该企业应用程序通常具有用于不同应用程序关注点(例如Web,持久性,服务等)的不同子模块。 现在,父项目可以为持久性,服务和Web定义不同的子模块。 本文稍后将详细介绍,您将学习使用Spring Roo构建多模块Maven项目。
  4. 存储库和服务层支持:在版本1.2之前,Spring Roo尚未提供在应用程序中具有存储库(或DAO)和服务层的方法。 默认情况下,它支持Active Record模式,该模式可通过所有与持久性相关的方法来确保丰富的实体类。 这也是社区要求的流行功能之一,现已可用。 默认情况下,Spring Roo仍然支持Active Record作为实现策略,但是可以通过使用–activeRecord false创建实体来选择存储库。 本文稍后还将对此进行详细介绍。
  5. 对逆向工程支持的更强大,更强大的数据库支持:尽管在第2部分中进行了介绍,但该附件在去年进行了重大改进。 所做的一些改进是多模式支持,从而允许DBRE通过Java命名和目录接口(JNDI)建立数据库连接,反向工程视图以及对存储库而不是Active Record实体对象的支持。 此外,许多错误已修复。 DBRE不在本文讨论范围之内。 有关详细信息,请参阅在Spring Roo的文档相关主题
  6. 改进的Spring Roo附加组件API:第5部分介绍了如何创建Spring Roo附加组件。 在那篇文章中,由于API的更改,我使用了Spring Roo版本1.2。 版本1.2之前存在的某些类在版本1.2中不再存在或已弃用。 Spring Roo团队使该API与当前的Spring Roo附加组件更加一致和一致。 将加载项更新到版本1.2可能会出现问题。
  7. 改进的GWT支持:在最新版本中,Spring Roo GWT支持得到了改进。 以前,单个命令gwt setup完成了创建代理和请求其他与UI相关的项目的所有操作。 不推荐使用此命令,并用清单1中的10个命令代替。 GWT将在本文后面介绍。
    清单1. Web gwt帮助的示例
    roo> help --command "web gwt"
    * web gwt all - Locates all entities in the project and creates GWT requests, 
         proxies, and creates the scaffold
    * web gwt gae update - Updates the GWT project to support GAE
    * web gwt proxy all - Locates all entities in the project and creates GWT proxies
    * web gwt proxy request all - Locates all entities in the project and creates GWT 
         requests and proxies
    * web gwt proxy request type - Creates a proxy and request based on 
         the specified type
    * web gwt proxy type - Creates a GWT proxy based on the specified type
    * web gwt request all - Locates all entities in the project and creates GWT requests
    * web gwt request type - Creates a GWT proxy based on the specified type
    * web gwt scaffold - Creates a GWT request, proxy and scaffold for the specified type
    * web gwt setup - Install Google Web Toolkit (GWT) into your project

除了上述功能或改进之外,我还将在本文中重点介绍其他较小的更改。 让我们从创建一个新的Spring Roo 1.2会议应用程序开始。

Spring Roo 1.2入门

下载并安装这些先决条件。 (请参阅相关主题 。)

  1. Java™6软件包
  2. Apache Maven 3
  3. Spring Roo 1.2及更高版本

本文使用Spring Roo 1.2.1,它是当前的Spring Roo版本。

构建会议应用程序

您将创建在第1部分和第2部分中创建的同一会议应用程序。发言者可以进行一个或多个对话,并且仅一名发言者可以进行对话。 图1显示了简单的类图。 (发言人包含名字,姓氏,电子邮件,组织,生日,年龄,性别,而对话包含标题和描述。)

图1. Speaker和Talk表的类图
该模式图显示了已连接的Speaker和Talk表

创建一个多模块项目

您将创建一个父会议项目,该项目将包含两个子模块:核心和视图,而不是在一个Maven项目中创建整个项目。 核心模块将包含所有域,存储库和服务类。 视图子模块还将是一个项目对象模型(POM)项目,该项目将具有两个子模块:MVC和GWT。 MVC项目将包含Spring MVC应用程序,而GWT项目将具有GWT应用程序。 会议应用程序具有两个UI:一个基于Spring MVC,另一个基于GWT。 图2显示了项目结构。

图2. Maven项目结构
该屏幕截图显示了Maven项目的文件结构

图2中的结构类似于带有许多子模块的企业应用程序。 现在,让我们使用Spring Roo创建它。

  1. 打开您的操作系统命令行外壳。
  2. 使用mkdir命令创建一个名为Conference的目录。
  3. 进入外壳中的会议目录。
  4. 输入roo 。 此命令将启动Roo Shell。
  5. 在Roo Shell上输入的第一个命令是project命令。 在1.2版中,此命令已更新为支持POM项目。 POM项目本身不包含任何代码。 他们只有一个pom.xml文件。 这些项目的包装是POM而不是JAR或WAR。 要创建会议POM项目,请键入:
    project --topLevelPackage org.xebia.conference --projectName conference 
            --java 6  --packaging POM

    该命令看起来与第1部分中使用的project命令类似,只是有一个变化:它具有另一个称为packaging属性。 包装属性可以采用BUNDLE,JAR,POM或WAR之一的值。 对于父项目,该值为POM。 从版本1.2开始,project命令可以再添加一个称为parent的属性。 顾名思义,对于要从其他POM继承的项目POM,请使用parent属性。 创建子模块时将对此进行展示。 查看此命令生成的pom.xml文件,并验证pom.xml具有打包的POM。

  6. 创建会议POM项目后,使用module命令创建核心并查看子模块。 module命令类似于project命令,但是它创建Maven模块而不是Maven项目。 要创建核心模块,请键入以下命令:
    module create --moduleName core --topLevelPackage org.xebia.conference.core 
         --parent org.xebia.conference:conference:0.1.0.BUILD-SNAPSHOT

    module create命令需要两个必填属性: moduleNametopLevelPackagemoduleName属性用于指定模块的名称, topLevelPackage属性用于指定模块的软件包的名称。 topLevelPackage还将是此模块的groupId 。 除了这些强制属性之外,还有三个可选属性:

    • –-java指定Java版本
    • --packaging指定模块的Maven打包
    • --parent指定此模块是否从其他Maven项目继承

    在上面显示的命令中,核心模块是从会议项目继承的。 parent属性采用groupId:artifactId:version形式的值。 这些值可以从Conference / pom.xml文件获得。 核心模块的pom.xml文件显示它具有父标记(如清单2所示 )。

    清单2. pom.xml文件的父部分
    <parent> 
            <groupId>org.xebia.conference</groupId> 
            <artifactId>conference</artifactId> 
            <version>0.1.0.BUILD-SNAPSHOT</version> 
        </parent>

    您还可以查看父项目pom.xml(即Conference / pom.xml),并验证其是否具有包含核心模块的module标签(如清单3所示 )。
    清单3. pom.xml文件的Module部分
    <modules> 
       <module>core</module> 
    </modules>
  7. 接下来,让我们创建视图子模块。 但是,在创建该代码之前,请使用以下模块focus命令将焦点移回到根项目:
    module focus --moduleName ~

    代字号(〜)指定根项目。 (可选)键入Maven项目或Maven模块的名称。 例如,以下命令获得了切换到核心项目的相同结果:

    module focus --moduleName core
  8. 现在创建视图模块。 该模块也将是POM项目,它将具有两个子模块:MVC和GWT。 要创建视图模块,请输入:
    module create --moduleName view --topLevelPackage org.xebia.conference.view 
         --packaging POM --java 6
  9. 要创建GWT和MVC模块子模块,请执行清单4中的命令:
    清单4.创建GWT和MVC
    module create --moduleName gwt --topLevelPackage org.xebia.conference.view.gwt 
       --java 6 --parent org.xebia.conference.view:view:0.1.0.BUILD-SNAPSHOT 
    
    module focus --moduleName view 
    
    module create --moduleName mvc --topLevelPackage org.xebia.conference.view.mvc
       --java 6 --parent org.xebia.conference.view:view:0.1.0.BUILD-SNAPSHOT

以上九个步骤将导致一个包含四个子模块的多模块项目:核心,视图,GWT和MVC。 GWT和MVC是视图子模块的子模块。 现在,从Roo shell内执行perform package命令,它将执行所有子模块的完整版本。

增加持久性

现在,您已经创建了Maven模块结构,可以添加持久性支持。 使用Java Persistence API(JPA)设置命令来设置与持久性相关的配置。 不建议使用persistence setup命令,因此不建议使用persistence setup命令。 不建议使用持久性设置,因为Spring Roo现在支持不同类型的持久性数据存储解决方案,例如RDBMS和文档数据存储,例如MongoDB。 持久性设置是一个相当通用的名称,因此,如果将来Spring Roo决定增加对其他NoSQL数据库(如Cassandra)的支持,则希望该命令是Cassandra设置。 要向应用程序添加持久性支持,请在清单5中键入命令。 您将在核心模块中执行此操作,因此首先使用module focus命令切换到核心模块。

清单5.添加持久性支持的命令
module focus --moduleName core 
jpa setup --database DERBY_EMBEDDED --provider HIBERNATE

Spring Roo现在支持15个数据库,因此您很可能可以选择数据库。 JPA设置命令与持久性设置命令一样,具有两个必需的属性:数据库和提供程序,即Hibernate之类的JPA提供程序,在Google App Engine中为Datanucleus。 其余属性与持久性命令相同,因此在此不再赘述。

清除Roo Shell

以前,您可能曾尝试使用clear或cls命令清除Roo shell。 要立即运行操作系统命令,请输入! <os command> ! <os command> 。 要清除命令,请键入:

core roo> ! clear

创建演讲者和谈话实体

如果输入提示命令,它将建议创建一个实体。 实体命令已更改为实体JPA,以将其与使用实体mongo命令创建的MongoDB实体区分开。 实体命令的另一个主要更改是选择是否具有Active Record实体。 在本文中,您将使用存储库而不是Active Record实体。 要创建Speaker和Talk实体,请输入清单6中的命令:

清单6.创建实体
entity jpa --class ~.domain.Speaker --testAutomatically 
     --activeRecord false --serializable 
entity jpa --class ~.domain.Talk --testAutomatically 
     --activeRecord false –serializable

清单6明确要求Roo不要生成activeRecord实体。 默认机制仍然是activeRecord,因此,您必须将activeRecord指定为false,否则它将生成Active Record实体。

向实体添加字段

字段命令是相同的,语法没有任何变化。 键入清单7中的命令,以将字段添加到实体类。

清单7.将字段添加到实体类
field string --fieldName firstname --class ~.domain.Speaker --notNull 
field string --fieldName lastname --notNull 
field string --fieldName email --class ~.domain.Speaker --unique --notNull --regexp 
     ^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})
field string --fieldName organization 
field date --fieldName birthdate --type java.util.Date --past --notNull 
field number --type java.lang.Long --fieldName age --min 25 --max 60 
field date --fieldName created --type java.util.Date --notNull 
field string --fieldName title --class ~.domain.Talk --notNull 
field string --fieldName description --notNull --sizeMax 4000 
field date --fieldName created --type java.util.Date --notNull 
field set --fieldName talks --type ~.domain.Talk --class ~.domain.Speaker 
     --cardinality ONE_TO_MANY 
field reference --fieldName speaker --type ~.domain.Speaker --class ~.domain.Talk 
     --notNull

请注意电子邮件中正则表达式的使用,这将根据正则表达式验证电子邮件。 另外,请注意,将创建字段名称。 名称创建为date类型的字段不可更新。 YouThis是一个较小的增强功能,但很有用。 在清单8中 ,代码片段显示列注释中的可更新属性值设置为false。

清单8.将可更新设置为false的示例
@NotNull 
@Column(updatable = false) 
@Temporal(TemporalType.TIMESTAMP) 
@DateTimeFormat(style = "M-") 
private Date created = new Date();

添加存储库和服务层

Spring Roo社区要求ActiveRecord模式的替代方法,因为存储库和服务层在企业应用程序中更常用,而开发人员对它们更满意。 使用Spring Roo 1.2,可以使用Spring JPA项目拥有存储库。 Spring JPA是总括性Spring Data项目的一部分,该项目使实现基于JPA的存储库变得容易。 Spring Roo使用的Spring JPA存储库只需要编写存储库接口,Spring JPA为其提供实现。 除了基本的CRUD操作之外,它还支持添加自定义查找器方法。 您可以在存储库界面中定义查找程序方法,如下所示:

List<Person> findPersonByNameAndCountry(String name, String country)

Spring JPA将通过中断此方法的名称来提供此方法的实现,并将返回具有提供的名称和国家/地区的所有人员的列表。 它减少了代码,但确保方法名称始终与实体属性内联。 如果Person类没有名称或国家/地区属性,它将失败。 本文不介绍Spring Data JPA项目,而是考虑阅读其文档。

要为您的Speaker和Talk实体添加Repository接口,请输入清单9中的命令:

清单9.添加存储库接口
repository jpa --interface ~.repository.SpeakerRepository --entity ~.domain.Speaker 
repository jpa --interface ~.repository.TalkRepository --entity ~.domain.Talk

repository的jpa命令具有两个属性:一个是接口的名称,第二个是要为其创建存储库的实体。 在这种情况下,我指定在com.xebia.conference.core.repository包中为Speaker实体创建一个SpeakerRepository。 Talk实体也是如此。 在清单10中的命令输出中,您可以看到它在pom.xml中添加了spring-data-jpa依赖关系,并创建了SpeakerRepository.java接口及其对应的SpeakerRepository_Roo_Jpa_Repository.aj ITD文件。

清单10.示例输出
Created core|SRC_MAIN_JAVA/org/xebia/conference/core/repository 
Created core|SRC_MAIN_JAVA/org/xebia/conference/core/repository/SpeakerRepository.java 
Created core|SPRING_CONFIG_ROOT/applicationContext-jpa.xml 
Updated core|ROOT/pom.xml 
             [added dependency org.springframework.data:spring-data-jpa:1.0.2.RELEASE] 
Created core|SRC_MAIN_JAVA/org/xebia/conference/core/repository/
                                       SpeakerRepository_Roo_Jpa_Repository.aj
Created core|SRC_TEST_JAVA/org/xebia/conference/core/domain/
                                       SpeakerDataOnDemand_Roo_DataOnDemand.aj 
Created core|SRC_TEST_JAVA/org/xebia/conference/core/domain/
                                       SpeakerIntegrationTest_Roo_IntegrationTest.aj

存储库jpa命令生成的最有趣的工件是* Repository_Roo_Jpa_Repository.aj ITD。 类型间声明(ITD)文件包含清单11中的三个声明。

清单11. ITD文件中的声明
privileged aspect SpeakerRepository_Roo_Jpa_Repository { 

 declare parents: SpeakerRepository extends JpaRepository<Speaker, Long>; //1
    
 declare parents: SpeakerRepository extends JpaSpecificationExecutor<Speaker> ; //2
    
 declare @type: SpeakerRepository: @Repository; //3
    
}

第一行说,SpeakerRepository接口应该扩展JpaRepository接口。 JpaRepository接口包含所有CRUD方法和其他common方法的声明。 第二行说,SpeakerRepository接口应该扩展JpaSpecificationExecutor接口。 该接口允许基于JPA标准API执行规范。 第三行(也是最后一行)确保SpeakerRepository接口应具有@Repository批注。

添加服务层

尽管如果您使用存储库,则不需要具有服务层,但是在大多数情况下,具有包含所有业务逻辑的服务层是有意义的。 当您开始远离Roo生成的CRUD应用程序时,您会发现需要服务类,因此,为实体类提供服务类是很有意义的。 要为Speaker和Talk实体创建服务,请在Roo shell上执行清单12中的命令:

清单12.创建服务
service --interface ~.service.SpeakerService --entity ~.domain.Speaker 
service --interface ~.service.TalkService --entity ~.domain.Talk

SpeakerService的service命令生成清单13中的输出:

清单13. SpeakerService的输出
Created core|SRC_MAIN_JAVA/org/xebia/conference/core/service 
Created core|SRC_MAIN_JAVA/org/xebia/conference/core/service/SpeakerService.java
Created core|SRC_MAIN_JAVA/org/xebia/conference/core/service/SpeakerServiceImpl.java
Created core|SRC_MAIN_JAVA/org/xebia/conference/core/service/
                                       SpeakerService_Roo_Service.aj
Updated core|SRC_TEST_JAVA/org/xebia/conference/core/domain/
                                       SpeakerDataOnDemand_Roo_DataOnDemand.aj
Updated core|SRC_TEST_JAVA/org/xebia/conference/core/domain/
                                       SpeakerIntegrationTest_Roo_IntegrationTest.aj
Created core|SRC_MAIN_JAVA/org/xebia/conference/core/service/
                                       SpeakerServiceImpl_Roo_Service.aj

除了创建服务文件夹和修改测试类之外,它还创建了SpeakerService,实现SpeakerServiceImpl和两个ITD:SpeakerService_Roo_Service.aj和SpeakerServiceImpl_Roo_Service.aj。 SpeakerService_Roo_Service.aj是SpeakerService接口的ITD,并确保SpeakerService接口包含所有必需的方法声明。 SpeakerServiceImpl_Roo_Service.aj包含SpeakerService_Roo_Service.aj ITD中定义的实现方法,并在编译时将所有这些实现添加到SpeakerServiceImpl类。

这样,您的核心模块便拥有了本文所需的所有代码。 现在,您将使用Spring Roo创建GWT和MVC UI。

建立GWT使用者介面

Google Web Toolkit(GWT)(请参阅参考资料 )是一个开源开发工具包,用于以Java编程语言构建复杂而丰富JavaScript应用程序。 使用GWT,Java开发人员可以轻松地编写支持Ajax的复杂Web应用程序,也可以轻松地以Java代码编写代码。 另外,GWT会编译代码以生成高度优化JavaScript。

Spring Roo为域模型中的GWT应用程序脚手架提供支持。

在以前的版本中,一个名为gwt setup的命令完成了从设置GWT到创建实体视图到确保Google App Engine兼容性的所有魔术。 现在,gwt setup命令被分解为十个不同的命令,从而使开发人员拥有更多的控制权。 清单14显示了命令。

清单14. Web gwt的帮助输出
view/gwt roo> help --command "web gwt" 
* web gwt all - Locates all entities in the project and creates GWT requests, proxies 
     and creates the scaffold 
* web gwt gae update - Updates the GWT project to support GAE 
* web gwt proxy all - Locates all entities in the project and creates GWT proxies 
* web gwt proxy request all - Locates all entities in the project and creates GWT 
     requests and proxies 
* web gwt proxy request type - Creates a proxy and request based on the specified type 
* web gwt proxy type - Creates a GWT proxy based on the specified type 
* web gwt request all - Locates all entities in the project and creates GWT requests 
* web gwt request type - Creates a GWT proxy based on the specified type 
* web gwt scaffold - Creates a GWT request, proxy and scaffold for the specified type
* web gwt setup - Install Google Web Toolkit (GWT) into your project

要为域模型创建GWT前端,您需要两个命令:web gwt setup和web gwt all。 使用其他命令可以:

  • 当您不想使用UI时,创建代理,请求或同时创建请求和代理
  • 创建代理,请求,或者创建请求和代理,以及创建UI
  • 更新GWT项目以支持Google App Engine

本文仅介绍web gwt的设置和全部的web gwt。 您可以根据对这两个命令的工作原理的了解轻松使用其他命令。

设置GWT项目

现在,Spring Roo遵循一个约定,即其所有视图附加组件(如GTW,MVC和JSF)都具有setup命令。 setup命令负责添加所需的Maven依赖项,一些配置文件,一些虚拟类,并创建视图技术所需的文件夹结构。 要设置GWT项目,请在清单15中键入命令,该清单还显示了命令的输出。

清单15. Web gwt设置的示例输出
view/gwt roo> web gwt setup 

Created view/gwt|ROOT/src/main/webapp/WEB-INF/spring 
Created view/gwt|ROOT/src/main/webapp/WEB-INF/spring/webmvc-config.xml 
Created view/gwt|ROOT/src/main/webapp/WEB-INF/web.xml 
Updated view/gwt|ROOT/src/main/webapp/WEB-INF/spring/webmvc-config.xml 
Created view/gwt|SRC_MAIN_JAVA/org/xebia/conference/view/gwt 
Created view/gwt|SRC_MAIN_JAVA/org/xebia/conference/view/gwt/App.gwt.xml 
Created view/gwt|SRC_MAIN_JAVA/org/xebia/conference/view/gwt/client 
Created view/gwt|SRC_MAIN_JAVA/org/xebia/conference/view/gwt/client/AppEntryPoint.java 
Updated view/gwt|ROOT/src/main/webapp/WEB-INF/web.xml 
Updated view/gwt|ROOT/pom.xml 
   [added dependencies org.springframework:spring-webmvc:${spring.version}, 
   org.springframework.webflow:spring-js-resources:2.2.1.RELEASE, 
   commons-digester:commons-digester:2.1, commons-fileupload:commons-fileupload:1.2.2, 
   javax.servlet.jsp.jstl:jstl-api:1.2, org.glassfish.web:jstl-impl:1.2, 
   javax.el:el-api:1.0, joda-time:joda-time:1.6, javax.servlet.jsp:jsp-api:2.1, 
   commons-codec:commons-codec:1.5; updated project type to war; 
   added repository http://maven.springframework.org/external; 
   added dependencies com.google.gwt:gwt-servlet:2.4.0, com.google.gwt:gwt-user:2.4.0, 
   org.json:json:20090211, com.google.gwt.inject:gin:1.5.0, 
   javax.validation:validation-api:1.0.0.GA, 
   javax.validation:validation-api:1.0.0.GA:sources, xalan:xalan:2.7.1; 
   added plugin org.codehaus.mojo:gwt-maven-plugin:2.2.0; 
   added plugin org.codehaus.mojo:exec-maven-plugin:1.2]

该命令的输出显示它刚刚创建了一个模板GWT项目,其中包含必需的Maven依赖项和插件,一个示例AppEntryPoint类,一个示例GWT模块描述符App.gwt.xml和所有Web应用程序都需要的web.xml。 web gwt setup命令没有执行任何有趣的操作,因此让我们看一下web gwt all命令。 要为该域提供GWT UI,请执行以下命令:

web gwt all --proxyPackage ~.client.proxy --requestPackage ~.client.request

web gwt all命令可以完成所有繁重的工作,并创建GWT模块部署描述符ApplicationScaffold.gwt.xml,GWT入口点Scaffold.java,代理类Speakerpeaker和TalkProxy,用于Speaker和Talk实体的各种Activity类,用于Speaker和Talker的RequestFactory类。交谈和各种地方课程。

要为GWT项目设置log4j日志记录,请输入:

logging setup --level INFO

要退出外壳,请输入qquit 。 这些命令将创建功能齐全的GWT前端会议应用程序。

要运行该应用程序,请从命令行转到gwt目录,键入mvn gwt:run (这将启动码头服务器并启动GWT开发模式)。 要在默认浏览器中打开应用程序,请单击启动默认浏览器 ,或将URL复制到剪贴板,然后在另一个浏览器中打开应用程序。

该应用程序将运行在http://127.0.0.1:8888/ApplicationScaffold.html?gwt.codesvr=127.0.0.1:9997。 您将看到图3中的屏幕。 下面。 点击会谈演讲者可以查看所有会谈和扬声器。

图3.运行GWT应用程序
在浏览器中运行的GWT应用程序的屏幕截图

构建一个Spring MVC用户界面

本节简要介绍为您在本文中创建的域模型创建Spring MVC Web视图。 第1部分中提到的'controller all'命令现在已被弃用,不建议使用。 在使用新命令之前,首先要关注mvc模块。 在Roo shell上键入以下命令:

module focus --moduleName view/mvc

Spring Roo的新setup命令执行与设置Spring MVC应用程序有关的所有配置。 现在,如果您想安装控制器或仅想进行设置,便有了一个控制器。 要在您的应用程序中设置Spring MVC,请输入:

view/mvc roo> web mvc setup

该命令的输出显示该命令进行了与添加Spring webmvc-config.xml上下文文件,添加Maven依赖项,添加静态资源文件以及添加Spring Roo标记库有关的设置。 该命令未为实体创建视图。 这对于不需要其实体视图的用户很有用。 您可以手动创建控制器并公开RESTful Web服务。

完成会议应用程序的基本设置后,下一步是为实体创建控制器和视图。 键入以下命令:

view/mvc roo> web mvc all --package ~.web

web mvc all命令将为所有实体创建控制器和jspx视图。 要构建单个实体,请使用web mvc scaffold命令为它提供实体名称和控制器的标准名称。 清单16显示了许多其他的web mvc命令。 第2部分介绍了其中一些命令,因此此处不赘述。

清单16. Web mvc的帮助输出
view/mvc roo> help --command "web mvc" 
* web mvc all - Scaffold Spring MVC controllers for all project entities 
     without an existing controller 
     * web mvc controller - Create a new manual Controller (where you write the methods)
* web mvc embed document - Embed a document for your WEB MVC application 
* web mvc embed generic - Embed media by URL into your WEB MVC application 
* web mvc embed map - Embed a map for your WEB MVC application 
* web mvc embed photos - Embed a photo gallery for your WEB MVC application 
* web mvc embed stream video - Embed a video stream into your WEB MVC application 
* web mvc embed twitter - Embed twitter messages into your WEB MVC application 
* web mvc embed video - Embed a video for your WEB MVC application 
* web mvc embed wave - Embed Google wave integration for your WEB MVC application 
* web mvc finder add - Adds @RooWebFinder annotation to MVC controller type 
* web mvc finder all - Adds @RooWebFinder annotation to existing MVC controllers 
* web mvc install language - Install new internationalization bundle for MVC 
     scaffolded UI.
* web mvc install view - Create a new static view. 
* web mvc json add - Adds @RooJson annotation to target type 
* web mvc json all - Adds or creates MVC controllers annotated with @RooWebJson 
     annotation 
* web mvc json setup - Set up Spring MVC to support JSON 
* web mvc language - Install new internationalization bundle for MVC scaffolded UI. 
* web mvc scaffold - Create a new scaffold Controller (that is where Roo maintains CRUD 
     functionality automatically) 
* web mvc setup - Setup a basic project structure for a Spring MVC / JSP application 
* web mvc update tags - Replace an existing application tagx library with the latest 
     version (use --backup option to backup your application first) 
* web mvc view - Create a new static view.

部署到Cloud Foundry

既然您已经创建了会议应用程序,那么部署它就很有意义了。 您可以将Spring应用程序部署到Cloud Foundry公共云,而无需进行任何修改。 第4部分详细介绍了Cloud Foundry,包括如何使用Spring Roo Cloud Foundry插件从Roo Shell内部署Spring Roo应用程序。 但是,在1.2.1版中,该支持似乎已被破坏。 因此,在本文中,您将使用vmc ruby​​ gem在Cloud Foundry上部署会议应用程序。 跟着这些步骤:

  1. 安装vmc客户端。 对于所谓一步一步的教程“安装命令行界面(VMC),”见相关主题
  2. 使用您在Cloud Foundry上注册的凭据登录到Cloud Foundry公共云。 输入vmc login命令,它将要求您提供电子邮件和密码,如清单17所示
    清单17. vmc登录示例
    shekhar@shekhar:~/dev/conference/view/mvc/target$ vmc login 
    Attempting login to [http://api.cloudfoundry.com] 
    Email: shekhargulati84@gmail.com 
    Password: ************* 
    Successfully logged into [http://api.cloudfoundry.com]
  3. 安装vmc客户端后,执行会议应用程序的完整Maven构建。 为此,请键入:
    mvn clean install
  4. 生成项目后,将会议应用程序推送到Cloud Foundry。 在本文中,您将推送两个应用程序:一个用于Spring MVC,另一个用于GWT。 要推送Spring MVC会议应用程序,请转到Conference / view / mvc / target文件夹并输入vmc push,如清单18所示
    清单18.推送Spring MVC应用程序的示例
    shekhar@shekhar:~/dev/conference/view/mvc/target$ vmc push  
    Would you like to deploy from the current directory? [Yn]: Y 
    Application Name: mvcconference  
    Application Deployed URL [mvcconference.cloudfoundry.com]:  
    Detected a Java SpringSource Spring Application, is this correct? [Yn]: Y  
    Memory Reservation (64M, 128M, 256M, 512M, 1G) [512M]:  
    Creating Application: OK  
    Would you like to bind any services to 'mvcconference'? [yN]: N  
    Uploading Application:  
    Checking for available resources: OK  
    Processing resources: OK  
    Packing application: OK  
    Uploading (91K): OK  
    Push Status: OK  
    Staging Application: OK  
    Starting Application: OK

    Cloud Foundry vmc客户端将询问与应用程序名称,应用程序类型,要部署的URL,内存保留以及是否绑定任何服务有关的问题,最后将应用程序上载并部署到Cloud Foundry。 您可以在http://mvcconference.cloudfoundry.com/上查看运行的Spring MVC应用程序

  5. 将GWT应用程序推送到Cloud Foundry。 切换到Conference / view / gwt / target文件夹,然后输入vmc push,如清单19所示
清单19.推送GWT应用程序的示例
shekhar@shekhar:~/dev/conference/view/gwt/target$ vmc push 
Would you like to deploy from the current directory? [Yn]: Y 
Application Name: gwtconference 
Application Deployed URL [gwtconference.cloudfoundry.com]: 
Detected a Java SpringSource Spring Application, is this correct? [Yn]: Y 
Memory Reservation (64M, 128M, 256M, 512M) [512M]: 
Creating Application: OK 
Would you like to bind any services to 'gwtconference'? [yN]: N 
Uploading Application: 
  Checking for available resources: OK 
  Processing resources: OK 
  Packing application: OK 
  Uploading (5M): OK   
Push Status: OK 
Staging Application: OK                                                         
Starting Application: OK

在以下位置查看正在运行的应用程序:http://gwtconference.cloudfoundry.com/

下载会议应用程序的源代码

结论

本文重新介绍了Spring Roo。 您了解了新功能,例如多模块Maven项目,Spring Roo 1.2中引入的存储库和服务层,然后使用Roo 1.2创建了应用程序,其中合并了一些新功能。 您还研究了如何使用Spring Roo创建GWT应用程序。 最后,您将Spring MVC和GWT应用程序部署到Cloud Foundry。 本文未回顾一些新功能,例如JSF和MongoDB支持。

本系列的第7部分将讨论使用Spring Roo创建Spring MongoDB应用程序并将其部署到Cloud Foundry。


翻译自: https://www.ibm.com/developerworks/java/library/os-springroo6/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值