Proyek tidak lagi dipertahankan secara aktif, silakan lihat: Sistem Pesanan Penjualan 2.0 sebagai gantinya
Ini adalah aplikasi web full-stack yang sangat kecil yang digunakan sebagai sampel dan untuk tujuan demonstrasi murni.
git clone https://github.com/colinbut/sales-order-system.git
mvn clean package
... akan menyusun sumber, mengemas file perang
masuk ke direktori aplikasi online dan jalankan perintah berikut:
mvn tomcat7:run-war
Menggunakan plugin Maven Tomcat7 untuk menjalankan aplikasi dalam wadah web Apache Tomcat tertanam
Setelah aplikasi dimuat, arahkan ke:
http://localhost:8080/online-application/login
Beberapa kredensial sampel dapat ditemukan dikonfigurasi dalam file konfigurasi Application-Security.xml Spring.
mvn test
... Ini akan menjalankan semua tes unit dalam rangkaian tes
atau
Dari IDE Anda, cukup navigasikan ke kelas uji unit dan klik tombol 'Jalankan' IDE
mvn verify
... Ini akan menjalankan semua tes integrasi dalam rangkaian tes.
atau
Dari IDE Anda, cukup navigasikan ke kelas uji integrasi dan klik tombol 'Run' IDE
[TBD]
Gunakan Sonar (Sonarqube) untuk menjalankan analisis kualitas kode pada proyek. File sonar-project.properties disediakan. Akan membutuhkan server sonarqube dan sonar runner jadi perlu mengunduh keduanya dari situs web sonarqube dan mengikuti instruksi instalasi.
Dengan asumsi sonar dipasang (dengan sonar runner di jalur lingkungan), di CLI run:
sonar-runner
Dimungkinkan juga untuk berjalan dengan MySQL. Anda perlu mysql untuk diinstal. Unduh dari situs web MySQL dan ikuti instruksi instalasi.
Uncomment di bawah seperti yang ditentukan:
<!-- 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 >Assumming MongoDB diinstal pada sistem. Jika tidak, dapat mengunduhnya dari situs web MongoDB dan mengikuti instruksi instalasi.
Start Up MongoDB Database Server:
./mongod
Buka Klien Database MongoDB:
./mongo
Muat file MongoDB JavaScript yang mengisi beberapa data sampel
load("mongodb.js")
Aplikasi ini hanyalah aplikasi monolitik sederhana yang dibangun dengan beberapa lapisan. Singkatnya, back-end ditulis dalam Java yang terhubung ke database relasional dalam memori back-end (HSQL). Dapat juga terhubung ke database relasional lainnya (MySQL). Aplikasi dipenuhi oleh Spring Framework. Pola arsitektur Model-View-Controller (MVC) digunakan untuk memisahkan front-end dari back-end. Ini dicapai oleh Spring Web MVC. Aplikasi ini kemudian akan digunakan pada wadah web tertanam (Apache Tomcat).

Front-end jelas JSP dengan sedikit JSTL di sana-sini. Database Dandelion juga digunakan untuk mengimplementasikan tabel di UI. CSS dasar untuk gaya. Bootstrap menyediakan kerangka kerja front-end untuk ini.
[TBD]
Aplikasi ini sangat sederhana. Ini adalah aplikasi web yang saat ini menyediakan operasi dasar CRUD. Semuanya operasional dipandang sebagai transaksi bisnis yang dieksekusi melalui berbagai lapisan. Oleh karena itu, model domain anemik digunakan sebagai lawan dari model domain berorientasi objek murni. Ini cukup dan ideal karena pada saat ini tidak ada banyak (jika ada) pemrosesan logika bisnis yang kompleks yang diperlukan.
Mendefinisikan Batas Aplikasi dan mengatur operasi yang tersedia dari perspektif Interfacing Client Layers (front-end). Ini merangkum logika bisnis aplikasi, mengendalikan transaksi dan respons yang bernasib coor dalam implementasi operasinya.
misalnya
@ Service ( "itemServiceImpl" )
@ Transactional
public class ItemServiceImpl implements ItemService {
@ Autowired
private ItemRepository itemRepository ;
...
}Tampilan penyimpanan data yang berorientasi objek di bawahnya memberikan lapisan tambahan abstraksi (data pegas JPA) di depan kemampuan akses data dari pola mapper data. Kerangka Pemetaan Relasional Objek (Hibernate) digunakan untuk mencapai efek pemetaan perbedaan antara tabel database relasional dan model domain. Manajer Entitas JPA merangkum elemen akses data (pola objek akses data).
misalnya repositori JPA data pegas
@ Repository
public interface ItemRepository extends JpaRepository < Item , Integer > {
}Dukungan anotasi Spring Framework (pemindaian komponen) dilakukan untuk melakukan ini mengambil keuntungan dari kemampuan inti Spring Framework - injeksi ketergantungan yang disediakan oleh wadah inversi kontrol (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 ;Contoh lain dari objek model pelanggan:
@ 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 ;Proyek Lombok digunakan untuk menghasilkan getters/setter/tostring/setara dan kode hash untuk menghapus kode boilerplate
Aplikasi ini memungkinkan fitur login/logout yang diimplementasikan menggunakan fitur dasar modul keamanan musim semi dari kerangka kerja Spring.
File konfigurasi pegas aplikasi-security.xml berikut menunjukkan konfigurasi keamanan utama:
< 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 >Pengujian integrasi diimplementasikan menggunakan kerangka konteks tes Spring. Database In-Memory (HSQL) digunakan.
AKHIR 2 Pengujian Akhir (Pengujian Penerimaan) dilakukan dengan menggunakan Cucumber-JVM. Ini tersedia di bawah sub modul uji-otomasi. Maksud dari ini adalah untuk menyediakan otomatisasi ujung ke ujung dari aplikasi web tumpukan penuh. Mungkin, dapat mengintegrasikan Selenium di masa depan yang akan memungkinkan otomatisasi aplikasi web di browser web. Tetapi untuk saat ini, tes mentimun ditulis dalam kode back-end. Kriteria penerimaan ditulis dalam file .feature menggunakan bahasa Gherkin. Area ini membutuhkan perbaikan. Perhatikan bahwa pengujian akhir akhir 2 untuk proyek ini masih WIP.
Saya ([email protected])
[TBD]
| Ujung depan | Back End | Database | Pengujian | Lainnya |
|---|---|---|---|---|
| Html | Java 8 | HSQL (HypersQL) | Junit | Slf4j - log4j |
| CSS | Spring Core | Mysql | Assertj | Maven |
| JS | Spring Web MVC | Mongodb | Mockito | Kucing jantan |
| Bootstrap | JPA data pegas | CUCOMBER-JVM | Sonarqube | |
| Jsp | Keamanan musim semi | Konteks tes musim semi | Lombok | |
| Jstl | JPA - Hibernate | |||
| DataTables dandelion | JTA | |||
| Validasi kacang |