โครงการไม่ได้รับการดูแลอย่างแข็งขันอีกต่อไปโปรดดู: Sales Order System 2.0 แทน
นี่เป็นเว็บแอปพลิเคชั่นเต็มรูปแบบขนาดเล็กที่ใช้เป็นตัวอย่างและมีไว้เพื่อการสาธิตที่บริสุทธิ์
git clone https://github.com/colinbut/sales-order-system.git
mvn clean package
... จะรวบรวมแหล่งที่มาบรรจุไฟล์สงคราม
ไปที่ไดเรกทอรีแอพพลิเคชั่นออนไลน์และดำเนินการตามคำสั่งต่อไปนี้:
mvn tomcat7:run-war
ใช้ปลั๊กอิน Maven Tomcat7 เพื่อเรียกใช้แอปพลิเคชันภายในคอนเทนเนอร์ Apache Tomcat Apache
เมื่อแอปพลิเคชันโหลดแล้วให้ไปที่:
http://localhost:8080/online-application/login
ข้อมูลรับรองตัวอย่างบางอย่างสามารถกำหนดค่าได้ในไฟล์การกำหนดค่าแอปพลิเคชัน security.xml ของ Spring
mvn test
... สิ่งนี้จะเรียกใช้การทดสอบหน่วยทั้งหมดภายในชุดทดสอบ
หรือ
จาก IDE ของคุณเพียงแค่นำทางไปยังคลาสทดสอบหน่วยและคลิกที่ปุ่ม 'Run' ของ IDE
mvn verify
... สิ่งนี้จะเรียกใช้การทดสอบการรวมทั้งหมดภายในชุดการทดสอบ
หรือ
จาก IDE ของคุณเพียงแค่นำทางไปยังคลาสทดสอบการรวมและคลิกที่ปุ่ม 'Run' ของ IDE
[TBD]
ใช้ Sonar (Sonarqube) เพื่อเรียกใช้การวิเคราะห์คุณภาพรหัสในโครงการ มีไฟล์ Sonar-Project.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
โหลดไฟล์ JavaScript MongoDB ซึ่งสำรองข้อมูลตัวอย่างบางส่วน
load("mongodb.js")
แอปพลิเคชันเป็นเพียงแอปพลิเคชั่นเสาหินที่เรียบง่ายที่สร้างขึ้นด้วยหลายเลเยอร์ โดยสรุป Back-End เขียนใน Java ซึ่งเชื่อมต่อกับฐานข้อมูลเชิงสัมพันธ์ในหน่วยความจำย้อนหลัง (HSQL) ยังสามารถเชื่อมต่อกับฐานข้อมูลเชิงสัมพันธ์อื่น ๆ (MySQL) แอปพลิเคชันถูก scafolded โดย Framework Spring รูปแบบสถาปัตยกรรมแบบ Model-View-Controller (MVC) ใช้เพื่อแยกส่วนหน้าออกจากส่วนหลัง นี่คือความสำเร็จโดย Spring Web MVC แอปพลิเคชันนี้จะถูกปรับใช้กับคอนเทนเนอร์เว็บแบบฝัง (Apache Tomcat)

ส่วนหน้าเป็น JSP ที่มี JSTL เล็กน้อยที่นี่และที่นั่น ฐานข้อมูล Dandelion ยังใช้ในการใช้ตารางใน UI CSS พื้นฐานสำหรับการออกแบบ Bootstrap จัดเตรียมกรอบส่วนหน้าสำหรับสิ่งนี้
[TBD]
แอปพลิเคชันนี้ง่ายมาก เป็นเว็บแอปพลิเคชันที่ให้การดำเนินการ CRUD ขั้นพื้นฐานในปัจจุบัน การดำเนินงานทุกอย่างถูกมองว่าเป็นการทำธุรกรรมทางธุรกิจซึ่งดำเนินการผ่านเลเยอร์ต่างๆ ดังนั้นแบบจำลองโดเมนโลหิตจางจึงถูกใช้เมื่อเทียบกับแบบจำลองโดเมนที่มุ่งเน้นวัตถุบริสุทธิ์ นี่เป็นสิ่งที่เพียงพอและเหมาะเพราะในขณะนี้มีการประมวลผลตรรกะทางธุรกิจที่ซับซ้อนไม่มากที่จำเป็น
การกำหนดขอบเขตของแอปพลิเคชันและการตั้งค่าการดำเนินงานที่มีอยู่จากมุมมองของการเชื่อมต่อเลเยอร์ไคลเอนต์ (front-end) มันห่อหุ้มตรรกะทางธุรกิจของแอปพลิเคชันควบคุมธุรกรรมและการตอบสนองแบบ coor-dinating ในการดำเนินการตามการดำเนินงาน
เช่น
@ Service ( "itemServiceImpl" )
@ Transactional
public class ItemServiceImpl implements ItemService {
@ Autowired
private ItemRepository itemRepository ;
...
}มุมมองเชิงวัตถุของที่เก็บข้อมูลภายใต้การให้เลเยอร์พิเศษของสิ่งที่เป็นนามธรรม (ข้อมูลสปริง JPA) ด้านหน้าความสามารถในการเข้าถึงข้อมูลของรูปแบบการทำแผนที่ข้อมูล กรอบการทำแผนที่ความสัมพันธ์เชิงวัตถุ (Hibernate) ใช้เพื่อให้ได้ผลกระทบของการทำแผนที่ความแตกต่างระหว่างตารางฐานข้อมูลเชิงสัมพันธ์และโมเดลโดเมน Entity Manager ของ JPA สรุปองค์ประกอบการเข้าถึงข้อมูล (รูปแบบวัตถุการเข้าถึงข้อมูล)
เช่นที่เก็บข้อมูลสปริงข้อมูล JPA
@ Repository
public interface ItemRepository extends JpaRepository < Item , Integer > {
}การสนับสนุนคำอธิบายประกอบของ Spring Framework (การสแกนส่วนประกอบ) ทำเพื่อทำสิ่งนี้การใช้ประโยชน์จากความสามารถหลักของ Spring Framework - การฉีดพึ่งพาการพึ่งพาโดยการผกผันของคอนเทนเนอร์ Control (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 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 >การทดสอบการรวมถูกนำมาใช้โดยใช้กรอบบริบทการทดสอบของฤดูใบไม้ผลิ ใช้ฐานข้อมูลในหน่วยความจำ (HSQL)
การทดสอบสิ้นสุด 2 สิ้นสุด (การทดสอบการยอมรับ) ทำได้โดยใช้ Cucumber-JVM สิ่งนี้มีอยู่ภายใต้โมดูลย่อยการทดสอบอัตโนมัติ ความตั้งใจของสิ่งนี้คือการให้ระบบอัตโนมัติจากการสิ้นสุดของแอปพลิเคชันเว็บสแต็คเต็มรูปแบบ บางทีสามารถรวมซีลีเนียมในอนาคตซึ่งจะอนุญาตให้ระบบอัตโนมัติของเว็บแอปพลิเคชันบนเว็บเบราว์เซอร์ แต่สำหรับตอนนี้การทดสอบแตงกวาถูกเขียนในรหัสแบ็คเอนด์ เกณฑ์การยอมรับถูกเขียนขึ้นในไฟล์. feature โดยใช้ภาษา gherkin พื้นที่นี้ต้องการการปรับปรุง โปรดทราบว่าการทดสอบสิ้นสุด 2 จุดสิ้นสุดสำหรับโครงการนี้ยังคงเป็น WIP
ฉัน ([email protected])
[TBD]
| ส่วนหน้า | ส่วนหลัง | ฐานข้อมูล | การทดสอบ | อื่น |
|---|---|---|---|---|
| HTML | Java 8 | HSQL (HyperSQL) | จูท | slf4j - log4j |
| CSS | แกนฤดูใบไม้ผลิ | mysql | assertj | หนอง |
| JS | สปริงเว็บ MVC | MongoDB | ม็อกิโตะ | แมตคัต |
| รองเท้าบู๊ต | สปริงข้อมูล jpa | แตงกวา-jvm | Sonarqube | |
| JSP | ความปลอดภัยในฤดูใบไม้ผลิ | บริบทการทดสอบฤดูใบไม้ผลิ | ลอมบอก | |
| jstl | JPA - ไฮเบอร์เนต | |||
| Dandelion DataTables | JTA | |||
| การตรวจสอบความถูกต้องของถั่ว |