项目不再积极维护,请参阅:销售订单系统2.0而不是
这是一个非常小的全堆栈Web应用程序,用于样本,用于纯演示目的。
git clone https://github.com/colinbut/sales-order-system.git
mvn clean package
...将编译来源,打包战争文件
进入在线应用程序目录并执行以下命令:
mvn tomcat7:run-war
使用Maven Tomcat7插件在嵌入式Apache Tomcat Web容器中运行该应用程序
加载应用程序后,导航到:
http://localhost:8080/online-application/login
可以在Spring的application-security.xml配置文件中找到一些示例凭据。
mvn test
...这将在测试套件中运行所有单元测试
或者
从您的IDE导航到单元测试类,然后单击IDE的“运行”按钮
mvn verify
...这将在测试套件中运行所有集成测试。
或者
从您的IDE中,只需导航到集成测试类,然后单击IDE的“运行”按钮
[TBD]
使用Sonar(Sonarqube)对项目进行代码质量分析。提供了声纳项目。提供的Properties文件。将需要Sonarqube服务器和Sonar Runner,因此需要从Sonarqube网站下载它们并遵循安装说明。
假设安装了声纳(在环境路径上使用Sonar Runner),在CLI Run上:
sonar-runner
也可以使用MySQL运行。您需要安装mySQL。从MySQL网站下载并遵循安装说明。
如下规定的未注释:
<!-- uncomment out for use with MySQL database -->
< bean id = " dataSource " class = " org.springframework.jdbc.datasource.DriverManagerDataSource " >
< property name = " driverClassName " value = " com.mysql.jdbc.Driver " />
< property name = " url " value = " jdbc:mysql://localhost:3306/sales_order_system " />
< property name = " username " value = " root " />
< property name = " password " value = " " />
</ bean >
< jdbc : initialize-database ignore-failures = " DROPS " >
< jdbc : script location = " file:src/main/resources/scripts/db-drop-tables.sql " />
< jdbc : script location = " file:src/main/resources/scripts/db-create.sql " />
</ jdbc : initialize-database >屁股MongoDB已安装在系统上。如果没有,可以从MongoDB网站下载并遵循安装说明。
启动MongoDB数据库服务器:
./mongod
打开MongoDB数据库客户端:
./mongo
加载MongoDB JavaScript文件,该文件填充一些示例数据
load("mongodb.js")
该应用程序只是一个简单的整体应用程序,该应用程序构建了几层。总之,后端用Java编写,该Java连接到后端内存关系数据库(HSQL)。也可以连接到其他关系数据库(MySQL)。应用程序通过春季框架进行了SCAFOLD。模型视图控制器(MVC)架构模式用于将前端与后端区分开。这是通过Spring Web MVC实现的。然后,该应用程序将部署在嵌入式Web容器(Apache Tomcat)上。

前端显然是JSP,在这里和那里有一点JSTL。蒲公英数据库也用于在UI中实现表。基本CSS样式。 Bootstrap为此提供了前端框架。
[TBD]
此应用程序非常简单。这是一个当前提供基本CRUD操作的Web应用程序。所有操作都被视为通过各个层次执行的业务交易。因此,与纯面向对象的域模型相反,使用了贫血模型。这是足够和理想的,因为目前,所需的复杂业务逻辑处理并不多。
定义应用程序的边界并从接口客户层(前端)的角度设置可用操作。它封装了应用程序的业务逻辑,在实施其运营时控制交易和COOR调整响应。
例如
@ Service ( "itemServiceImpl" )
@ Transactional
public class ItemServiceImpl implements ItemService {
@ Autowired
private ItemRepository itemRepository ;
...
}下面的数据存储的面向对象的视图,在数据映射模式的数据访问功能的前面提供了额外的抽象(Spring Data JPA)。对象关系映射框架(Hibernate)用于实现映射关系数据库表与域模型之间的差异的效果。 JPA的Entity Manager封装了数据访问元素(数据访问对象模式)。
例如弹簧数据JPA存储库
@ Repository
public interface ItemRepository extends JpaRepository < Item , Integer > {
}弹簧框架的注释支持(组件扫描)是为了利用Spring Framework的核心能力 - 依赖性注入控制(IOC)容器提供的依赖性注入。
@ Controller
public class OrderController {
private static final Logger logger = LoggerFactory . getLogger ( OrderController . class );
@ Autowired
@ Qualifier ( "orderServiceImpl" )
private OrderService orderService ;
@ Autowired
@ Qualifier ( "customerServiceImpl" )
private CustomerService customerService ;
@ Autowired
@ Qualifier ( "itemServiceImpl" )
private ItemService itemService ;
@ Autowired
@ Qualifier ( "orderFormValidator" )
private OrderFormValidator orderFormValidator ;客户模型对象的另一个示例:
@ Entity
@ Table ( name = "customer" )
@ Getter
@ Setter
@ NoArgsConstructor
@ EqualsAndHashCode ( exclude = "orders" )
@ ToString
public class Customer {
@ Id
@ GeneratedValue ( strategy = GenerationType . IDENTITY )
@ Column ( name = "customer_id" )
private int customerId ;
@ NotNull ( message = "{error.null.firstname}" )
@ NotBlank ( message = "{error.blank.firstname}" )
@ NotEmpty ( message = "{error.empty.firstname}" )
@ Pattern ( regexp = "[a-zA-Z]*" , message = "{error.invalid.firstname}" )
@ Column ( name = "customer_firstname" , nullable = false , length = 50 )
private String firstName ;
@ NotNull ( message = "{error.null.lastname}" )
@ NotBlank ( message = "{error.blank.lastname}" )
@ NotEmpty ( message = "{error.empty.lastname}" )
@ Pattern ( regexp = "[a-zA-Z]*" , message = "{error.invalid.lastname}" )
@ Column ( name = "customer_lastname" , nullable = false , length = 50 )
private String lastName ;Lombok项目用于生成Getters/setters/tostring/equals和Hashcode删除样板代码
该应用程序启用了使用Spring Framework的Spring Security模块的基本功能实现的登录/注销功能。
以下应用程序security.xml Spring配置文件显示关键安全配置:
< beans : beans xmlns = " http://www.springframework.org/schema/security "
xmlns : beans = " http://www.springframework.org/schema/beans "
xmlns : xsi = " http://www.w3.org/2001/XMLSchema-instance "
xsi : schemaLocation = " http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd " >
< http auto-config = " true " >
<!-- items -->
< intercept-url pattern = " /items " access = " ROLE_TEST_USER,ROLE_ADMIN " />
< intercept-url pattern = " /items/create " access = " ROLE_TEST_USER,ROLE_ADMIN " />
< intercept-url pattern = " /items/createItem " access = " ROLE_TEST_USER,ROLE_ADMIN " />
....
< form-login
login-page = " /login "
default-target-url = " /customers "
authentication-failure-url = " /login?error "
username-parameter = " username "
password-parameter = " password "
/>
< logout logout-success-url = " /login?logout " />
< csrf />
</ http >
< authentication-manager >
< authentication-provider >
< user-service >
<!-- hard coding application user credentials - switch to DB or LDAP -->
< user name = " testUser " password = " password " authorities = " ROLE_TEST_USER " />
< user name = " admin " password = " password " authorities = " ROLE_ADMIN " />
</ user-service >
</ authentication-provider >
</ authentication-manager >
</ beans : beans >使用Spring的测试上下文框架实施集成测试。使用内存数据库(HSQL)。
端2结束测试(接受测试)是使用Cucumber-JVM进行的。这是在测试自动化子模块下可用的。这样做的目的是提供完整堆栈Web应用程序的端到端自动化。也许将来可以集成硒,这将允许在Web浏览器上自动化Web应用程序。但是目前,黄瓜测试以后端代码编写。接受标准使用Gherkin语言写在.feature文件中。该区域需要改进。请注意,该项目的End 2结束测试仍然是WIP。
[TBD]
| 前端 | 后端 | 数据库 | 测试 | 其他 |
|---|---|---|---|---|
| html | Java 8 | HSQL(HypersQL) | 朱尼特 | slf4j -log4j |
| CSS | 弹簧核 | mysql | assertj | 小牛 |
| JS | 春季Web MVC | mongodb | 嘲笑 | tomcat |
| 引导程序 | 春季数据JPA | 黄瓜-JVM | Sonarqube | |
| JSP | 春季安全性 | 春季测试上下文 | 伦波克 | |
| JSTL | JPA-休眠 | |||
| 蒲公英数据表 | JTA | |||
| 豆验证 |