Проект больше не активно поддерживается, см. Вместо этого: Система заказа на продажу 2.0
Это очень маленькое веб-приложение с полным стеком, которое используется в качестве образца и предназначено для чистых демонстрационных целей.
git clone https://github.com/colinbut/sales-order-system.git
mvn clean package
... Скомпилируйте источники, упаковывайте файл войны
Зайдите в каталог онлайн-применения и выполните следующую команду:
mvn tomcat7:run-war
Использует плагин Maven Tomcat7 для запуска приложения в встроенном веб -контейнере Apache Tomcat
После загрузки приложения перейдите к:
http://localhost:8080/online-application/login
Некоторые примеры учетных данных могут быть найдены в файле конфигурации Spring Application-Security.xml.
mvn test
... это запустит весь модульный тест в наборе тестов
или
Из вашей IDE просто перейдите к классу для испытаний модуля и нажмите кнопку «Запустить» IDE
mvn verify
... Это запустит весь интеграционный тест в наборе тестов.
или
Из вашей IDE просто перейдите к классу тестирования интеграции и нажмите кнопку «Запустить» IDE
[TBD]
Используйте Sonar (Sonarqube), чтобы запустить анализ качества кода в проекте. Предоставленный файл Sonar-project.properties. Потребуется Sonarqube Server и Sonar Runner, поэтому вам нужно загрузить их как с веб -сайта Sonarqube, так и следовать инструкциям по установке.
Предполагая, что Sonar установлен (с 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 >Appumming MongoDB установлен на системе. Если нет, можно скачать его с веб -сайта MongoDB и следовать инструкциям по установке.
Запустите сервер базы данных MongoDB:
./mongod
Откройте клиент базы данных MongoDB:
./mongo
Загрузите файл JavaScript MongoDB, который заполняет некоторые образцы данных
load("mongodb.js")
Приложение представляет собой просто упрощенное монолитное приложение, построенное с несколькими слоями. Таким образом, Back-End написана на Java, которая соединяется с контрольной реляционной базой данных в памяти (HSQL). Также может подключиться к другим реляционным базам данных (MySQL). Применение подсчитано Spring Framework. Архитектурный шаблон модели-визевого контроллера (MVC) используется для отделения передней части от задней части. Это достигается с помощью Spring Web MVC. Это приложение затем будет развернуто в встроенном веб -контейнере (Apache Tomcat).

Передний конец явно JSP с небольшим количеством JSTL здесь и там. Базы данных одуванчиков также используются для реализации таблиц в пользовательском интерфейсе. Основные CSS для стиля. Bootstrap предоставляет переднюю структуру для этого.
[TBD]
Это приложение очень простое. Это веб -приложение, которое в настоящее время предоставляет базовые операции CRUD. Все операционное, рассматривается как бизнес -транзакция, которая выполняется через различные слои. Следовательно, используется модель анемичной области в отличие от чистой объектно-ориентированной модели домена. Этого достаточно и идеально, потому что в этот момент не требуется много (если есть) сложная обработка бизнес -логики, которая требуется.
Определение границы приложения и установление доступных операций с точки зрения взаимодействия клиентских слоев (фронт). Он инкапсулирует бизнес-логику приложения, контролируя транзакции и ответы, разбирающиеся в реализации, при внедрении его операций.
например
@ Service ( "itemServiceImpl" )
@ Transactional
public class ItemServiceImpl implements ItemService {
@ Autowired
private ItemRepository itemRepository ;
...
}Объектно-ориентированное представление хранилища данных внизу, обеспечивающее дополнительный уровень абстракции (Spring Data JPA) перед возможностями доступа к данным шаблона Mapper Data. Структура картирования объекта (Hibernate) используется для достижения этого эффекта отображения различий между таблицами реляционной базы данных и моделью домена. Менеджер объектов JPA инкапсулирует элемент доступа к данным (шаблон объекта доступа к данным).
Например, репозиторий для данных Spring Data JPA
@ Repository
public interface ItemRepository extends JpaRepository < Item , Integer > {
}Поддержка аннотации Spring Framework (сканирование компонентов) выполняется для того, чтобы использовать это преимущества основных способностей Spring Framework - инъекции зависимости, обеспечиваемой инверсией контрольного контейнера (МОК).
@ 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 Spring Framework.
Следующий файл конфигурации пружины приложений.
< 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. Это доступно в подмодуле тестирования. Цель этого состоит в том, чтобы обеспечить автоматизацию полного веб -приложения полного стека. Может быть, в будущем может интегрировать селен, что позволит автоматизировать веб -приложение в веб -браузерах. Но сейчас тесты огурца написаны в коде первого конца. Критерии принятия написаны в файлах .feature с использованием языка Gherkin. Эта область нуждается в улучшении. Обратите внимание, что конец 2 Конечного тестирования для этого проекта все еще остается WIP.
[TBD]
| Внешний интерфейс | Задняя часть | База данных | Тестирование | Другой |
|---|---|---|---|---|
| HTML | Java 8 | HSQL (HyperSQL) | Юнит | SLF4J - log4j |
| CSS | Весенний ядро | Mysql | Assertj | Мавен |
| Младший | Весенний веб -mvc | Mongodb | Макето | Томкат |
| Начальная загрузка | Весенние данные JPA | Cucumber-jvm | Сонаркубе | |
| JSP | Весенняя безопасность | Весенний контекст теста | Ломбок | |
| JSTL | JPA - Hibernate | |||
| Dandelion DataTables | JTA | |||
| Проверка бобов |