Proyecto ya no se mantiene activamente, consulte: Sistema de pedido de ventas 2.0 en su lugar
Esta es una aplicación web muy pequeña que se utiliza como muestra y es para fines de demostración puros.
git clone https://github.com/colinbut/sales-order-system.git
mvn clean package
... compilará las fuentes, empaquetará el archivo de guerra
Vaya al directorio de aplicación en línea y ejecute el siguiente comando:
mvn tomcat7:run-war
Utiliza el complemento Maven TomCat7 para ejecutar la aplicación dentro de un contenedor web de Apache Tomcat integrado
Una vez que se cargue la aplicación, navegue a:
http://localhost:8080/online-application/login
Algunas credenciales de muestra se pueden encontrar configuradas en el archivo de configuración Aplication-Security.xml de Spring.
mvn test
... Esto ejecutará todas las pruebas unitarias dentro del conjunto de pruebas
o
Desde su IDE, simplemente navegue a la clase de prueba unitaria y haga clic en el botón 'Ejecutar' del IDE
mvn verify
... Esto ejecutará todas las pruebas de integración dentro del conjunto de pruebas.
o
Desde su IDE, simplemente navegue a la clase de prueba de integración y haga clic en el botón 'Ejecutar' del IDE
[TBD]
Use Sonar (Sonarqube) para ejecutar el análisis de calidad del código en el proyecto. Un archivo Sonar-Project.Properties proporcionado. Necesitará Sonarqube Server y Sonar Runner, por lo que debe descargarlos tanto desde el sitio web de Sonarqube y seguir las instrucciones de instalación.
Suponiendo que se instala Sonar (con Sonar Runner en la ruta del entorno), en CLI Run:
sonar-runner
También es posible ejecutar con MySQL. Necesita que se instale mysql. Descargue desde el sitio web de MySQL y siga las instrucciones de instalación.
Descopment a continuación como se especifica:
<!-- 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 >La asignación de MongoDB está instalado en el sistema. Si no, puede descargarlo desde el sitio web de MongoDB y seguir las instrucciones de instalación.
Iniciar servidor de base de datos MongoDB:
./mongod
Abra el cliente de la base de datos MongoDB:
./mongo
Cargue el archivo JavaScript MongoDB que poca algunos datos de muestra
load("mongodb.js")
La aplicación es solo una aplicación monolítica simplista construida con varias capas. En resumen, el back-end está escrito en Java que se conecta a una base de datos relacional de back-end en memoria (HSQL). También puede conectarse a otras bases de datos relacionales (MySQL). La aplicación está chiflada por Spring Framework. El patrón arquitectónico de control-visión del modelo (MVC) se utiliza para separar el front-end del back-end. Esto se logra por Spring Web MVC. Esta aplicación se implementaría en un contenedor web integrado (Apache Tomcat).

El front-end es claramente JSP con un poco de JSTL aquí y allá. Las bases de datos de Dandelion también utilizan para implementar tablas en la interfaz de usuario. CSS básico para el estilo. Bootstrap proporciona el marco frontal para esto.
[TBD]
Esta aplicación es muy simple. Es una aplicación web que actualmente proporciona operaciones básicas de CRUD. Todo lo operativo se ve como una transacción comercial que se ejecuta a través de las diversas capas. Por lo tanto, se utiliza un modelo de dominio anémico en oposición a un modelo de dominio orientado a objetos puro. Esto es suficiente e ideal porque en este momento no hay mucho (si alguno) procesamiento lógico comercial complejo que se requiere.
Definir el límite de la aplicación y establecer las operaciones disponibles desde la perspectiva de las capas de cliente de interfaz (front-end). Encapsula la lógica comercial de la aplicación, controlando las transacciones y las respuestas de finalización de coor en la implementación de sus operaciones.
p.ej
@ Service ( "itemServiceImpl" )
@ Transactional
public class ItemServiceImpl implements ItemService {
@ Autowired
private ItemRepository itemRepository ;
...
}Una vista orientada a objetos del almacén de datos debajo que proporciona una capa adicional de abstracción (Spring Data JPA) frente a las capacidades de acceso a datos del patrón de mapeadores de datos. El marco de mapeo relacional de objetos (Hibernate) se utiliza para lograr este efecto de mapear las diferencias entre las tablas de bases de datos relacionales y el modelo de dominio. El administrador de entidades de JPA encapsula el elemento de acceso a datos (patrón de objeto de acceso a datos).
Por ejemplo, un repositorio de JPA de datos de Spring Data
@ Repository
public interface ItemRepository extends JpaRepository < Item , Integer > {
}El soporte de anotación de Spring Framework (escaneo de componentes) se realiza para aprovechar esto aprovechando las habilidades centrales de Spring Framework: inyección de dependencia proporcionada por el contenedor de inversión de control (COI).
@ 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 ;Otro ejemplo del objeto Modelo del cliente:
@ 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 ;Proyecto Lombok utilizado para generar getters/setters/toString/iguales y hashcode para eliminar el código de calderas
La aplicación habilita la función de inicio de sesión/cierre de sesión que se implementó utilizando las características básicas del módulo de seguridad Spring del marco Spring.
El siguiente archivo de configuración de Spring Security.xml Spring muestra configuraciones de seguridad clave:
< 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 >Las pruebas de integración se implementan utilizando el marco de contexto de prueba de Spring. Se utiliza una base de datos en memoria (HSQL).
Las pruebas finales finales (prueba de aceptación) se realizan utilizando pucumber-jvm. Esto está disponible bajo el submódulo de automatización de prueba. La intención de esto es proporcionar la automatización de extremo a extremo de la aplicación web de pila completa. Tal vez, pueda integrar Selenium en el futuro, lo que permitiría la automatización de la aplicación web en los navegadores web. Pero por ahora, las pruebas de pepino se escriben en el código de back-end. Los criterios de aceptación se escriben en los archivos .Feature utilizando el idioma Gherkin. Esta área necesita mejora. Tenga en cuenta que las pruebas finales de finalización para este proyecto aún son WIP.
Yo ([email protected])
[TBD]
| Interfaz | Back -end | Base de datos | Pruebas | Otro |
|---|---|---|---|---|
| Html | Java 8 | HSQL (HyperSQL) | Junit | SLF4J - LOG4J |
| CSS | Núcleo de primavera | Mysql | Afirmación | Aturdir |
| Js | Spring Web MVC | Mongodb | Simulacro | Gato |
| Oreja | Datos de primavera JPA | Pepino-jvm | Sonarqube | |
| JSP | Seguridad de primavera | Contexto de prueba de primavera | Lombok | |
| Jstl | JPA - Hibernate | |||
| Dandelion Datatable | JTA | |||
| Validación de frijoles |