프로젝트는 더 이상 적극적으로 유지 관리되지 않습니다. 대신 판매 주문 시스템 2.0
이것은 샘플로 사용되며 순수한 데모 목적을위한 매우 작은 전체 스택 웹 응용 프로그램입니다.
git clone https://github.com/colinbut/sales-order-system.git
mvn clean package
... 출처를 컴파일하고 전쟁 파일을 포장합니다.
온라인 적용 디렉토리로 이동하여 다음 명령을 실행하십시오.
mvn tomcat7:run-war
Maven Tomcat7 플러그인을 사용하여 임베디드 아파치 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 웹 사이트에서 둘 다 다운로드하고 설치 지침을 따라야합니다.
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로 작성되어 백엔드 Memory In Mepalational Database (HSQL)에 연결됩니다. 다른 관계형 데이터베이스 (MySQL)에도 연결할 수도 있습니다. 응용 프로그램은 Spring 프레임 워크에 의해 스카 폴딩됩니다. MVC (Model-View-Controller) 아키텍처 패턴은 프론트 엔드를 백엔드와 분리하는 데 사용됩니다. 이것은 Spring Web MVC에 의해 달성됩니다. 그런 다음이 응용 프로그램은 임베디드 웹 컨테이너 (Apache Tomcat)에 배포됩니다.

프론트 엔드는 여기 저기 약간의 JSTL이있는 JSP입니다. 민들레 데이터베이스는 UI에서 테이블을 구현하는 데 사용되었습니다. 스타일링을위한 기본 CS. Bootstrap은이를위한 프론트 엔드 프레임 워크를 제공합니다.
[TBD]
이 응용 프로그램은 매우 간단합니다. 현재 기본 CRUD 작업을 제공하는 웹 응용 프로그램입니다. 운영되는 모든 것은 다양한 계층을 통해 실행되는 비즈니스 거래로 간주됩니다. 따라서, 순수한 객체 지향 도메인 모델과는 반대로 빈혈 도메인 모델이 사용된다. 이 순간에 필요한 복잡한 비즈니스 로직 처리가 많지 않기 때문에 이것은 충분하고 이상적입니다.
응용 프로그램의 경계를 정의하고 인터페이스 클라이언트 계층 (프론트 엔드)의 관점에서 사용 가능한 작업을 설정합니다. 그것은 애플리케이션의 비즈니스 로직을 캡슐화하고, 운영 구현에서 트랜잭션을 제어하고 쿠어-구분 응답을 캡슐화합니다.
예를 들어
@ Service ( "itemServiceImpl" )
@ Transactional
public class ItemServiceImpl implements ItemService {
@ Autowired
private ItemRepository itemRepository ;
...
}데이터 맵퍼 패턴의 데이터 액세스 기능 앞에서 추가 추상화 층 (스프링 데이터 JPA)을 제공하는 아래 데이터 저장소의 객체 지향보기. 객체 관계형 매핑 프레임 워크 (Hibernate)는 관계형 데이터베이스 테이블과 도메인 모델 간의 차이점을 매핑하는 효과를 달성하는 데 사용됩니다. JPA의 엔티티 관리자는 데이터 액세스 요소 (데이터 액세스 객체 패턴)를 캡슐화합니다.
예를 들어 스프링 데이터 JPA 저장소
@ Repository
public interface ItemRepository extends JpaRepository < Item , Integer > {
}Spring Framework의 주석 지원 (구성 요소 스캔)은 Spring Framework의 핵심 능력 - IOC (Control) 컨테이너에 의해 제공되는 종속성 주입을 활용하기 위해 수행됩니다.
@ 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 ;Boilerplate 코드를 제거하기 위해 Getters/Setters/Tostring/Equals 및 Hashcode를 생성하는 데 사용되는 Lombok 프로젝트
응용 프로그램은 Spring Framework의 Spring Security 모듈의 기본 기능을 사용하여 구현 된 로그인/로그 아웃 기능을 활성화합니다.
다음 Application-Security.xml 스프링 구성 파일은 주요 보안 구성을 보여줍니다.
< 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)가 사용됩니다.
END 2 END 테스트 (수락 테스트)는 Cucumber-JVM을 사용하여 수행됩니다. 테스트-보조 서브 모듈에서 사용할 수 있습니다. 이것의 의도는 풀 스택 웹 애플리케이션의 엔드 - 엔드 자동화를 제공하는 것입니다. 아마도 앞으로 셀레늄을 통합하여 웹 브라우저에서 웹 응용 프로그램을 자동화 할 수 있습니다. 그러나 현재 오이 테스트는 백엔드 코드로 작성되었습니다. 수락 기준은 Gherkin 언어를 사용하여 .feature 파일로 작성됩니다. 이 지역은 개선이 필요합니다. 이 프로젝트에 대한 END 2 END 테스트는 여전히 WIP입니다.
[TBD]
| 프론트 엔드 | 백엔드 | 데이터 베이스 | 테스트 | 다른 |
|---|---|---|---|---|
| HTML | Java 8 | HSQL (hypersql) | 주니트 | SLF4J -LOG4J |
| CSS | 봄 코어 | MySQL | assertj | Maven |
| JS | 스프링 웹 MVC | Mongodb | 모키토 | 수코양이 |
| 부트 스트랩 | 스프링 데이터 JPA | 오이 -JVM | 소나 퀴 베 | |
| JSP | 봄 보안 | 스프링 테스트 컨텍스트 | 롬복 | |
| JSTL | JPA- 최대 절전 모드 | |||
| 민들레 데이터 테이블 | JTA | |||
| 콩 검증 |