spring roo

    技术2024-05-15  81

    Spring Release 3.1中的功能

    获取有关Spring Release 3.1(Spring框架的最新和最出色的版本)功能的更多信息:

    个人资料 环境抽象 其他新功能

    在本系列的第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功能
    MongoDB的 。 NoSQL文档数据存储。 JSF 2.0视图选项。 Apache MyFaces 。 Oracle Mojarra JSF实现。 JIRA问题 。 最受欢迎的功能请求 。 Active Record模式是一个流行的功能请求。

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

    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 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分发中。

    多模块Maven项目支持:这是社区要求的最受欢迎的功能之一,现已可用。 在1.2版之前,所有应用程序代码都必须在一个Maven项目中编写。 这对于构建企业应用程序具有抑制作用,该企业应用程序通常具有用于不同应用程序关注点(例如Web,持久性,服务等)的不同子模块。 现在,父项目可以为持久性,服务和Web定义不同的子模块。 本文稍后将详细介绍,您将学习使用Spring Roo构建多模块Maven项目。 存储库和服务层支持:在版本1.2之前,Spring Roo尚未提供在应用程序中具有存储库(或DAO)和服务层的方法。 默认情况下,它支持Active Record模式,该模式可通过所有与持久性相关的方法来确保丰富的实体类。 这也是社区要求的流行功能之一,现已可用。 默认情况下,Spring Roo仍然支持Active Record作为实现策略,但是可以通过使用–activeRecord false创建实体来选择存储库。 本文稍后还将对此进行详细介绍。 对逆向工程支持的更强大,更强大的数据库支持:尽管在第2部分中进行了介绍,但该附件在去年进行了重大改进。 所做的一些改进是多模式支持,从而允许DBRE通过Java命名和目录接口(JNDI)建立数据库连接,反向工程视图以及对存储库而不是Active Record实体对象的支持。 此外,许多错误已修复。 DBRE不在本文讨论范围之内。 有关详细信息,请参阅在Spring Roo的文档相关主题 。 改进的Spring Roo附加组件API:第5部分介绍了如何创建Spring Roo附加组件。 在那篇文章中,由于API的更改,我使用了Spring Roo版本1.2。 版本1.2之前存在的某些类在版本1.2中不再存在或已弃用。 Spring Roo团队使该API与当前的Spring Roo附加组件更加一致和一致。 将加载项更新到版本1.2可能会出现问题。 改进的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入门

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

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

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

    构建会议应用程序

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

    图1. Speaker和Talk表的类图

    创建一个多模块项目

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

    图2. Maven项目结构

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

    打开您的操作系统命令行外壳。 使用mkdir命令创建一个名为Conference的目录。 进入外壳中的会议目录。 输入roo 。 此命令将启动Roo Shell。 在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。

    创建会议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命令需要两个必填属性: moduleName和topLevelPackage 。 moduleName属性用于指定模块的名称, 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> 接下来,让我们创建视图子模块。 但是,在创建该代码之前,请使用以下模块focus命令将焦点移回到根项目: module focus --moduleName ~

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

    module focus --moduleName core 现在创建视图模块。 该模块也将是POM项目,它将具有两个子模块:MVC和GWT。 要创建视图模块,请输入: module create --moduleName view --topLevelPackage org.xebia.conference.view --packaging POM --java 6 要创建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 JPA和Spring Data
    SpringJPA项目 Spring数据 Spring Data JPA文档

    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

    要退出外壳,请输入q或quit 。 这些命令将创建功能齐全的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应用程序

    构建一个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上部署会议应用程序。 跟着这些步骤:

    安装vmc客户端。 对于所谓一步一步的教程“安装命令行界面(VMC),”见相关主题 。 使用您在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] 安装vmc客户端后,执行会议应用程序的完整Maven构建。 为此,请键入: mvn clean install 生成项目后,将会议应用程序推送到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应用程序

    将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/

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

    结论

    本系列的其他文章
    第1部分:从源代码构建 第2部分:使用Spring Roo开发应用程序 第3部分:开发Spring Roo附加组件 第4部分:使用Spring Roo和Cloud Foundry在云中快速开发应用程序 第5部分:编写高级的包装Roo附加程序 第7部分:使用Spring Roo开发Spring MongoDB应用程序

    本文重新介绍了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

    相关资源:微信小程序源码-合集6.rar
    Processed: 0.012, SQL: 9