BaoCaoEJB

115
Trang 4 LỜI CẢM ƠN Xin chân thành cảm ơn sự hướng dẫn, giúp đỡ của quý Thầy Cô trong trường Đại Học Sư Phạm Kỹ Thuật. Xin đặc biệt chân thành cảm ơn Thầy Ths. Nguyễn Minh Đạo giảng viên khoa Công nghệ thông tin đã tận tình hướng dẫn truyền đạt những kiến thức và kinh nghiệm quý báu, những tình cảm yêu mến của Thầy đã giúp chúng em có đầy đủ kiến thức và nghị lực để hoàn thành luận văn. Xin cảm ơn những bạn bè và người thân trong gia đình đã tin yêu và truyền cho chúng em thêm sức mạnh trong công việc học tập nghiên cứu của bản thân. Mặc dù đã có rất nhiều cố gắng trong việc thực hiện luận văn, song với thời gian có hạn và mức độ nghiên cứu bản thân còn hạn chế, nên không thể không có những thiếu sót, mong được sự đóng góp ý kiến của quý Thầy cô và các bạn. Tp.HCM, ngày 06 tháng 06 năm 2013 Sinh viên Nguyễn Tuấn Anh Nguyễn Đình Hà

Transcript of BaoCaoEJB

Page 1: BaoCaoEJB

LỜI CẢM ƠN

Xin chân thành cảm ơn sự hướng dẫn, giúp đỡ của quý Thầy Cô trong trường Đại Học Sư Phạm Kỹ Thuật.

Xin đặc biệt chân thành cảm ơn Thầy Ths. Nguyễn Minh Đạo giảng viên khoa Công nghệ thông tin đã tận tình hướng dẫn truyền đạt những kiến thức và kinh nghiệm quý báu, những tình cảm yêu mến của Thầy đã giúp chúng em có đầy đủ kiến thức và nghị lực để hoàn thành luận văn.

Xin cảm ơn những bạn bè và người thân trong gia đình đã tin yêu và truyền cho chúng em thêm sức mạnh trong công việc học tập nghiên cứu của bản thân.

Mặc dù đã có rất nhiều cố gắng trong việc thực hiện luận văn, song với thời gian có hạn và mức độ nghiên cứu bản thân còn hạn chế, nên không thể không có những thiếu sót, mong được sự đóng góp ý kiến của quý Thầy cô và các bạn.

Tp.HCM, ngày 06 tháng 06 năm 2013

Sinh viên

Nguyễn Tuấn Anh

Nguyễn Đình Hà

Page 2: BaoCaoEJB

TÓM TẮT ĐỀTÀI

Trong thời kỳ kinh tế thế giới đang trong thời kỳ toàn cầu hóa. Các kênh bán hàng của

các doanh nghiệp ngày càng phong phú và đóng một vai trò nhất định trong quá trình

quảng bá và tiêu thụ sản phẩm của doanh nghiệp. Với sự phát triển của nền công nghiệp

công nghệ thông tin và đặt biệt là sự bùng nổ nhanh chóng của Internet . Kênh bán hàng

trực tuyến đã và đang là xu thế chung của các doanh nghiệp nhằm tiếp cận một cách

nhanh chóng với khách hàng.

Java EE 5 là một phiên bản chính trong sự phát triển của Java EE với nhiều đặc

tính mới. Điểm mạnh của nó là giúp cho sự phát triển ứng dụng web Java được dễ dàng.

Sự dễ dàng phát triển này bao gồm sử dụng những khai báo annotation thay vì dùng

những tập tin deployment description, đơn giản hóa sự phát triển EJB, sử dụng

dependency injection để truy nhập những tài nguyên. Và còn nhiều cái đặc biệt bên

dưới....

Trong đề tài này, nhóm thực hiện sẽ từng bước tìm hiểu các cấu trúc, qui trình hoạt

động và điều hành một website bán hàng . Tiến hành xây dựng một website bán sách

hoàn chỉnh.

Bố cục của đồ án được trình bày như sau:

Chương 1: Giới thiệu

Chương 2: Các công trình liên quan đến đề tài

Chương 3: Phương pháp luận

Chương 4: Giải quyết vấn đề thực tế

Chương 5: Kết luận

Chương 6: Hướng phát triển

Chương 7: Tài liệu tham khảo

Page 3: BaoCaoEJB

MỤC LỤC

Page 4: BaoCaoEJB

CHƯƠNG 1. GIỚI THIỆU

1.1 Tầm quan trọng của vấn đề nghiên cứu trong luận văn

Những ứng dụng của doanh nghiệp ngày càng xử lý nhiều công việc hơn, dữ liệu

của doanh nghiệp phân tán nhiều nơi và vấn đề bảo mật cũng như đảm bảo toàn vẹn dữ

liệu trở nên quan trọng. Bên cạnh đó, việc ứng dụng cần được triển khai phân tán ở nhiều

nơi để đáp ứng những yêu cầu công việc hiện tại đã mang lại nhiều thách thức cho lập

trình viên. J2EE (Java 2 Platform Enterprise Edition) được giới thiệu lần đầu tiên vào

năm 1999 là một platform mang nhiều tính năng mạnh mẽ đặc biệt hổ trợ mạnh về xử lý

giao tác (transaction) và bảo mật (security). Những ứng dụng J2EE cho phép khả năng

mở rộng cao, khả năng cung cấp dịch vụ cho nhiều khách hàng (client) và phân tán trên

nhiều nơi. Kể từ khi ra đời J2EE đã cho ra đời những đặc tả mới và trở nên phong phú,

mạnh mẽ cho việc phát triển ứng dụng web sử dụng J2EE, việc kiểm lỗi và triển khai trở

nên dễ dàng hơn.

Trong đặc tả của J2EE cung cấp nhiều công nghệ cho phép lập trình viên xử lý

những yêu cầu khác nhau như: JSP/Servlet, JMS (Java Message Service), JavaMail, EJB

(Enterprise Java Bean), …Trong đó EJB là một thành phần tốt nhất trong J2EE, EJB hổ

trợ mạnh việc xử lý giao tác và bảo mật. Đi kèm với EJB là đặc tả Java Persistence API

(JPA) cho phép các lớp Java ánh xạ với các bảng trong cơ sở dữ liệu dựa trên mô hình

ORM (Object Relational Mapping). Qua lịch sử phát triển của J2EE, EJB cũng đã thay

đổi nhiều kể từ lúc mới được giới thiệu. Phiên bản EJB 3.0 kết hợp với đặc tả JPA 2.0

được giới thiệu cùng với J2EE 5.0 là một bước ngoặc trong lịch sử phát triển của EJB.

EJB 3.0 tập trung vào tính dễ sử dụng và triển khai ứng dụng mang lại một động lực mới

cho giới lập trình tiếp tục sử dụng EJB cũng như những công nghệ của J2EE để phát triển

ứng dụng phía máy chủ mà điển hình là những ứng dụng web.

Page 5: BaoCaoEJB

Cùng với sự ra đời của EJB 3.0, một bước tiến lớn so với phiên bản EJB 2.0 trước

đó, mang đến sự mạnh mẽ, giao tác (transaction), bảo mật (security) tốt cho việc xử lý

nghiệp vụ trong các ứng dụng Enterprise chạy trên nền J2EE, Sun còn cho ra đời công

nghệ Java Server Faces (JSF), một framework cho việc phát triển tầng giao diện của ứng

dụng Server. Với mục tiêu là giúp cho việc phát triển ứng dụng web nhanh hơn và dễ

dàng hơn cho người lập trình thông qua sự hỗ trợ của các thành phần giao diện người

dùng (như các text box, list box, datagrid,…), JSF thực sự là một framework tốt và cần

thiết cho người lập trình Java. Bên cạnh đó, hiện nay cũng có nhiều nhà phát triển lớn sử

dụng framework này để phát triển các bộ thư viện cho người dùng với nhiều control đẹp,

đa dạng và đặc biệt hỗ trợ Ajax chạy tốt trên nhiều trình duyệt. Trong số đó có thể nói

đến hai nhà phát triển mã nguồn mở lớn hiện này là Jboss với bộ thư viện RichFaces và

Apache với bộ thư viện MyFaces. Đây là hai bộ thư viện được sử dụng phổ biến nhất

hiện nay để phát triển ứng dụng JSF.

1.2 Mục tiêu của các vấn đề nghiên cứu trong luận văn

Ứng dụng các công nghệ trên nền J2EE 5.0 như EJB 3.0, JPA 2.0, JSP/Servlet, …

để xây dựng hoàn chỉnh ứng dụng website bán sách online với đầy đủ các tính năng và

tiện ích cho việc mua hàng và quản lý bán hàng.

1.3 Kết quả đạt được

Webiste bán sách online sử dụng các công nghệ trong J2EE, đáp ứng được nhu cầu của một trang bán hàng trực tuyến và các gói quản lý cho hệ thống. Cho phép khách hàng tìm kiếm, đặt hàng…

Page 6: BaoCaoEJB

CHƯƠNG 2. CÁC CÔNG TRÌNH LIÊN QUAN ĐẾN ĐỀ TÀI

Với sự phát triển của internet đã tạo động lực cho sự phát triển mạnh mẽ của hoạt

động thương mại điện tử và đang trở thành một xu hướng kinh doanh trên toàn cầu. Cùng

với sự phát triển của thương mại điện tử, không thể không đề cập đến website thương mại

điện tử, đóng vai trò như một người bán hàng đắc lực và mang lại một nguồn thu lớn cho

doanh nghiệp. Dựa vào quá trình phát triển của thương mại điện tử và qui mô kinh doanh,

người ta phân thành hai loại website thương mại điện tử chính: website thương mại điện

tử loại một và website thương mại điện tử loại hai.

2.1 Các website thương mại điện tử loại một

Những website thương mại điện tử loại này thường chỉ thực hiện các hoạt động

mua bán và thanh toán trực tuyến thông thường mà không có sự phân loại khách hàng.

Ưu điểm của nó là tốn ít chi phí xây dựng, dễ dàng phát triển và thích hợp cho những hệ

thống kinh doanh qui mô nhỏ, số lượng sản phẩm không nhiều.

2.2 Các website thương mại điện tử loại hai

Đối với những hệ thống kinh doanh lớn và các hoạt động thương mại điện tử phức tạp, các website thương mại điện tử loại một không đáp ứng các được các yêu cầu kinh doanh cũng như gặp một số hạn chế. Việc ra đời các website thương mại điện tử loại hai là sự cải tiến từ những hạn chế của website thương mại điện tử loại một với việc hỗ trợ phân loại của khách hàng. Trong các hệ thống kinh doanh qui mô lớn, số lượng sản phẩm kinh doanh lớn, khách hàng sẽ cảm thấy bất tiện trong việc tìm những sản phẩm kinh doanh lớn, khách hàng sẽ cảm thấy bất tiện trong việc tìm những sản phẩm theo sở thích của mình. Vì vậy, việc phân loại khách hàng sẽ giúp khách hàng nhanh chóng tìm được những sản phẩm ưng ý. Hệ thống sẽ đưa ra những gợi ý sản phẩm cho khách hàng dựa theo việc phân loại khách hàng theo hai tiêu chí : thông tin sở thích về sản phẩm và lịch sử mua hàng của khách hàng.

Page 7: BaoCaoEJB

CHƯƠNG 3. PHƯƠNG PHÁP LUẬN

3.1 Tổng quan về J2EE3.1.1 J2EE là gì ?

Java 2 Platform Enterprise Edition viết tắt là J2EE, là một nền tảng công nghệ cho

phép phát triển những ứng dụng thương mại đa tầng (multitier enterprise applications).

J2EE mở rộng hổ trợ cho nhiều công nghệ như : JSP/Servlet, Enterprise JavaBeans, JSF,

JMS, JTA, …

3.1.2 Kiến trúc của J2EE

J2EE sử dụng một mô hình ứng dụng phân tán đa tầng.

Hình 3-1 Mô hình đa tầng của J2EE

Trong mô hình ứng dụng J2EE có nhiều tầng: Tầng khách hàng (client tier), tầng web

(web tier),tầng thương mại(business tier)và tầng hệ thống thông tin thương mại

(enterprise information system tier). Tầng thương mại và tầng web nằm trên một máy chủ

Page 8: BaoCaoEJB

ứng dụng gọi là máy chủ ứng dụng (application server) hay máy chủ J2EE (J2EE server).

Máy chủ J2EE cung cấp những dịch vụ cần thiết cho những thành phần (component) của

tầng thương mại và tầng web.

Hình 3-2 Giao tiếp giữa các tầng

Có hai loại khách hàng (client) là: Những khách hàng ứng dụng (application clients) và

những khách hàng web (web clients). Khách hàng web truy cập tới những thành phần

trong tầng web là các lớp Java Servlet hay Java ServerPages. Những khách hàng ứng

dụng là những ứng dụng độc lập, chúng truy cập trực tiếp tới các thành phần trong tầng

thương mại.

Page 9: BaoCaoEJB

Hình 3-3 Containers và Components

J2EE có các loại container như :

Web Container : Quản lý sự thực thi của các thành phần web, và container của

chúng chạy trong máy chủ J2EE (J2EE server).

EJB Container : Quản lý sự thực thi của các thành phần EJB, các thành phần EJB

và container của chúng chạy trong J2EE server.

Application client Container : Quản lý sự thực thi các thành phần của ứng dụng

client.

Applet Container : Quản lý sự thực thi của applets (ứng dụng ký sinh).

Các công nghệ trong J2EE :

Java Database Connectivity (JDBC) API: JDBC là một tập hợp các giao diện cho

phép các ứng dụng Java truy cập vào cơ sở dữ liệu bất kỳ. API này có cùng một

mục đích như ODBC (Open Database Connectivity) Microsoft.

Remote Method Invocation (RMI): RMI là một API cho phép các đối tượng Java

để giao tiếp từ xa với các đối tượng khác.

Java IDL: IDL (Interface Definition Language) là một ngôn ngữ nền tảng tiêu

chuẩn khai báo độc lập được sử dụng để xác định các giao diện đối tượng triển

khai cung cấp và đối tượng khách hàng gọi. Java IDL cho phép bất kỳ đối tượng

Java để giao tiếp với các đối tượng khác trong ngôn ngữ bất kỳ bằng phương tiện

của IDL.

Enterprise Java Beans: Đóng gói các logic thương mại (business logic) và hổ trợ

thực hiện giao tác và bảo mật.

Servlets và Java Server Pages (JSP): Công nghệ dùng trong xây dựng những ứng

dụng web.

Java Message Service (JMS): Tập APIs cho phép ứng dụng tạo, gởi, nhận, và đọc

thông điệp bất đồng bộ.

Page 10: BaoCaoEJB

Java Transaction API (JTA): JTA cho phép những ứng dụng J2EE thực hiện

những giao tác phân tán (distributed transaction).

JavaMail: Cho phép thành phần java gởi và nhận mail.

Java API cho xử lý XML (Java API for XML Processing -JAXP): XML là một

định dạng dữ liệu cho các tài liệu thay thế cấu trúc trên Web. JAXP cho phép các

ứng dụng Java phân tích và chuyển đổi tài liệu XML. XML được sử dụng nhiều

trong J2EE như là một định dạng dữ liệu.

Java Naming và Directory Interface (JNDI): JNDI là một giao thức cung cấp một

tập API chuẩn cho phép truy cập tới những dịch vụ naming và directory.

Java Persistence API (JPA) : Cho phép ánh xạ giữa một thực thể (entity) với một

bảng trong cơ sở dữ liệu quan hệ.

3.2 Enterprise Java Bean

3.2.1 Application Server

Một Application server là một chương trình ứng dụng nhận các yêu cầu và trả về các phản hồi (Client) . Một Application server có thể chạy từ xa hoặc chạy trên các máy tính có cài đặt ứng dụng. Bao gồm các ứng dụng như : file server, database server, backup server, print server, mail server, web server, FTP server, application server, VPN server, DHCP server, DNS server, WINS server, logon server, security server, domain controller, backup domain controller, proxy server, firewall, etc.

Application server được phát triển để hổ trợ phát triển các ứng dụng lớn, chúng bảo đảm an ninh và duy trì sự ổn định cho database.

Application server có thể nằm trong tầng thứ 3 của architecture model (Client tier,Middle tier và Enterprise Information System).

Page 11: BaoCaoEJB

Hình 3.4 Mô hình application server

Page 12: BaoCaoEJB

3.2.2 Enterprise Beans

Enterprise beans là một phần của Java EE server,chạy trên EJB container và nằm

trong tầng business logic của một Enterprise Application.

Enterprise Application là phần mềm được phát triển để sử dụng trong nhiều chức

năng. Những ứng dụng này bao gồm nhiều lượt truy cập đồng thời tới dữ liệu bởi nhiều

người dùng.

Enterprise beans được sử dụng trong nhiều chức năng như : tương tác với

client,duy trì sự ổn định của sesion, chứa dữ liệu từ database và tương tác với server.

Lợi ích của Enterprise beans : Enterprise beans được sử dụng rộng rãi trong nhiều

trong việc phát triển các ứng dụng lớn. EJB container cung cấp các dịch vụ ( như : quản

lý các chuyển đổi và phân quyền bảo mật) cho Enterprise beans. Những ứng dụng đó làm

đơn giản hóa việc xử lý trong quá trình phát triển ứng dụng và các lập trình viên chỉ phải

tập tring giải quyết những vấn đề phát sinh .

Các loại Enterprise beans : EJB 3.0 xác định 2 loại Enterprise beans :

Sesion bean : tương tác trực tiếp với client

Message driven bean : lắng nghe các tin nhắn dịch vụ đặc biệt như : Java Message

API hoặc JPA trong một khoảng thời gian ngắn.

3.2.3 Annotations

Annotation được thêm trong EJB3.0 để thay thế deployment descriptor trong các

phiên bản trước đó. Điều này mang lại tính đơn giản và hiểu quả hơn đối với các ứng

dụng sử dụng EJB(jdk 5 trở lên).

Annotation cũng giống như metadata,ta có thể code,variables,parameters,fields, methods

và constructors.

Annotation là cách để tương tác giữa các thành phần của chương trình với các meta-tag,

compiler có thể hổ trợ để sinh ra code tương ứng khi cần thiết.

Page 13: BaoCaoEJB

1. Định nghĩa một annotation

public @interface Example {

String showSomething();

}

Ví dụ :

(showSomething="Hi! How r you")

public void anymethod() {

....

}

2. Annotation Types : Có 3 dạng annotation trong java Marker : marker annotation không chứa bất kỳ một thành phần nào khác ngoài

trừ tên cửa chính nó .

marker annotation không chứa bất kỳ một thành phần nào khác ngoài trừ tên

cửa chính nó

Ví dụ :

public @interface Example{}

..

@Example

Public void anymethod(){

..

} Single-value: dạng annotation này chỉ cung cấp một giá trị duy nhất.

public @interfaceExample{

String showSomething();

}

@Example(“Xin chào”)

Public void anymethod(){

..

}

Page 14: BaoCaoEJB

Multi-value or Full-value: dạng annotation này có thể có nhiều dữ liệu thành

phần, vì vậy, cần sử dụng nhiều giá trị của annotation để chứa các dữ liệu thành

phần.

public @interface Example(){

int num;

String name;

}

@Example(showSomething=”Xin chào!”, num=5, name=”XXX” )

public void anymethod{

….

}

3. Các quy đinh khi định nghĩa Annotation Định nghĩa một annotation với dạng: @interface annotationName.

Các phương thức trong annotation không nên đưa ra các exception.

Các phương thức không nên có chứa các đối số (parameter).

Các phương thức thường được trã về các đối số.

4. Các dạng annotation: Có 2 dạng annatation Simple annotations : chỉ được sử dụng để chứa các đoạn code, không thể sử dụng

để tạo các custom-annotation. Meta annotations : thường được gọi là annotation,được sử dụng để tạo các

annotation type.

5. Override annotation

Override annotation đảm bảo các annotated-method được sử dụng để override các

phương thức trong lớp cha. Nếu các phương thức này không định nghĩa lại các

phương thức trong lớp cha thì trình biên dịch sẽ sinh ra lỗi lúc biên dịch.

6. Deprecated annotation

Page 15: BaoCaoEJB

Khi sử dụng Deprecated annotation,trình biên dịch sẽ đưa ra các cảnh

báo(warning) khi sử dụng các thành phần được khai báo. Đồng thời, các phương thức

được khai báo với deprecated sẽ không thể sử dụng thêm được nữa.

Ví dụ :

public class Deprecated_method{

@Deprecated

public void showSomething() {

System.out.println("Method has been depricated'");

}

}

gọi deprecated-method từ class khác:

public class Test_Deprication {

public static void main(String arg[]) throws Exception {

new Test_Deprication();

}

public Test_Deprication() {

Deprecated_method d = new Deprecated_method();

d.showSomething();

}

Sau khi biên dịch,trinh biên dịch sẽ thông báo :

Compiling 1 source file to D:tempNew Folder

Page 16: BaoCaoEJB

(2)TestJavaApplication1buildclasses

D:tempNew Folder

(2)TestJavaApplication1srctestmyannotation

Test_Deprication.java:27:

warning: [deprecation] showSomething() in

test.myannotation.Deprecated_method has been deprecated

d.showSomething();

1 warning

7. Suppresswarning annotation

Suppresswarning annotation bảo đảm trình biên dịch sẽ che đi các warning đối với

các annotated-elements và sub-elements.

Ví dụ :

public class Test_Depricated {

public static void main(String arg[]) throws Exception {

new TestDepricated().showSomething();

}

@SuppressWarnings({"deprecation"})

public void showSomething() {

Deprecation_method d = new Deprecation_method();

d.showSomething();

}

}

Lúc biên dịch,trình biên dịch sẽ không đưa ra bất kỳ một warning nào.

8. Meta-Annotations :Có 4 dạng meta-annotation được định nghĩa trong JDK5 Target annotation : đặc tả các thành phần của class,bao gồm các dạng :

Page 17: BaoCaoEJB

@Target(ElementType.TYPE) : có thể dùng được với bất kỳ thành phần nào

của class. @Target(ElementType.FIELD) : dùng được cho field hoặc property.

@Target(ElementType.PARAMETER) : dung được cho các parameter của

các phương thức. @Target(ElementType.LOCAL_VARIABLE) : dụng được cho các biến local.

@Target(ElementType.METHOD) : dùng cho các method trong annotation.

@Target(ElementType.CONSTRUCTOR) : dùng cho các constructors.

@Target(ElementType.ANNOTATION_TYPE): xác định khai báo là một

annotation type.

Ví dụ:

@Target(ElementType.METHOD)

public @interface Test_Element {

public String doTestElement();

}

Tạo một class sử dụng annotation trên

public class Test_Annotations {

public static void main(String arg[]) {

new Test_Annotations().doTestElement();

}

@Test_Target(doTestElement="Hi ! How r you")

public void doTestElement() {

System.out.printf("Testing Target Element annotation");

}

Page 18: BaoCaoEJB

}

Retention annotation

Retention annotation dùng để xác định địa điểm và phương thức annotation sẽ

được lưu lại. Có 3 dạng retention annotation :

RetentionPolicy.SOURCE : được lưu ở source-level và trình biên dịch sẽ

bỏ qua chúng RetentionPolicy.CLASS : được lưu vào lúc biên dịch, virtual

machine(VM) sẽ bỏ qua chúng. RetentionPolicy.RUNTIME : virtual machine sẽ lưu dạng annotation này

và có thể được đọc vào lúc run-time.

Ví dụ :

@Retention(RetentionPolicy.RUNTIME)

public @interface Retention_Demo {

String doRetentionDemo();

}

Documented annotation

Documented annotation không được khai báo mặc định,được xử lý bằng

javadoc tool để sinh ra các document.

Ví dụ :

@Documented

public @interface Documented_Demo {

String doTestDocumentedDemo();

}

Page 19: BaoCaoEJB

public class Test_Annotations {

public static void main(String arg[]) {

new Test_Annotations().doTestRetentionDemo();

new Test_Annotations().doTestDocumentedDemo();

}

@Retention_Demo (doTestRetentionDemo="Hello retention annotation")

public void doTestRetentionDemo() {

System.out.printf("Testing 'Retention' annotation");

}

@Documented_Demo (doTestDocumentedDemo="Hello Test

documentation")

public void doTestDocumentedDemo() {

System.out.printf("Testing 'Documented' annotation");

}

}

Inherited annotation

Nếu annotate 1 class với @Inherited, các class con khi extend từ class đó sẽ tự

động kế thừa các properties.

Ta phải implement tất cả các method của parent-interface, bao gồm :

equals(),toString(),hashCode(). Ngoài ra, trong class phải có các phương thức

của lớp cha,dù có thực thi hay không.

Ví dụ :

@ParentObjectDemo

public Class ChildObjectDemo {

}

public class ChildObjectDemo implements ParentObjectDemo {

public boolean isInherited() {

return false;

}

public String showSomething() {

return "";

Page 20: BaoCaoEJB

}

public boolean equals(Object obj) {

return false;

}

public int hashCode() {

return 0;

}

public String toString() {

return "";

}

public Class annotationType() {

return null;

}

}

3.2.4 Sesion Beans

Session bean là một enterprise bean tương tác trực tiếp với người dùng và chứa

các bussiness logic của ứng dụng. Một session bean thể hiện cho một client kết nối tới

enterprise application trên server thông qua việc gọi cái phương thức. Một ứng dụng có

thể có nhiều sesion tùy thuộc vào số lượng người dùng kết nối tới ứng dụng. Một session

bean tương tác với session và chặn các client khác bằng việc xử lý các business-task trên

server. EJB container sẽ hủy session bean sau khi xử lý xong.

Page 21: BaoCaoEJB

Hình 3.5 : Session bean tương tác với client

1. Các loại Session Beans

a. Stateless Session Beans

Trạng thái giao dịch liên kết với một client, gọi là trạng thái đặc trưng cho client

(client-specific state). Trạng thái này gọi là conversation state, thực tế còn bao gồm cả

các kết nối socket, kết nối database, tham chiếu đến bean khác...

Stateless Session Bean được thiết kế để phục vụ cho nhiều client, với những session chỉ

có một request

Stateless Session Bean chỉ có 2 trạng thái:

Does Not Exist: không có thực thể bean tồn tại trong bộ nhớ.

Method-Ready Pool: thực thể bean có mặt trong pool, sẵn sàng phục vụ các triệu

gọi business method từ client

Stateless Session Bean yêu cầu ít resource nên còn gọi là lightweight bean.

Page 22: BaoCaoEJB

b. Stateful Session Bean

Một phiên giao dịch giữa client và bean còn gọi là một conversation. Một Stateful

Session Bean có khả năng lưu lại trạng thái của conversation trong các biến thực thể của

lớp bean xuyên qua các request của conversation. Một ví dụ quen thuộc là shopping cart

dùng để lưu trữ các món hàng đã chọn xuyên qua hàng loạt request chọn hàng (hoặc loại

bỏ hàng đã chọn) của một session mua hàng. Như vậy, Stateful Session Bean chứa trong

nó business logic và trạng thái conversation của client.

Stateful Session Bean được thiết kế để phục vụ cho một client trong đời sống của nó

thông qua một EJB Object.

Stateful Session Bean không có khả năng tự lưu giữ (persistent) giống như entity

bean. Để lưu giữ được trạng thái của conversation như trên, Stateful Session Bean có 3

trạng thái :

Does Not Exits: không tồn tại trong bộ nhớ.

Method-Ready: sẵn sàng phục vụ các yêu cầu từ client được ủy nhiệm (delegate)

bởi EJB Object.

Passivated: thụ động, lưu trữ trạng thái của conversation, sẽ được kích hoạt

(activate) khi cần.

2. Khi nào sử dụng Session Beans

Thông thường, một session bean được sử dụng trong các hoàn cảnh sau:

Khi chỉ có một client kết nối tới bean tại một thời điểm

Khi dữ liệu không còn mang tính ổn định thì bean cũng không còn tồn tại nữa

Khi bean thực thi các dịch vụ trong web.

Stateful session beans được sử dụng khi :

Cần khởi gán khi tạo bean.

Client triệu gọi phương thức nhiều lần.

Page 23: BaoCaoEJB

Cần lưu trữ thông tin client xuyên qua nhiều lần gọi.

Stateless session beans được sử dụng khi :

Khi bean không chứa dữ liệu của client.

Khi chỉ có một phương thức chung giữa nhiều client để thực hiện một công việc

chung.

3. Vòng đời của Session Bean

a. Vòng đời của Stateless Session Bean

EJB Container quản lý các thực thể bean. Khi cần thực thể, thực thể bean được khởi

tạo bằng cách dùng phương thức Class.newInstance() trên lớp bean. Sau đó phương thức

setSessionContext( sc ) của thực thể bean được triệu gọi để thực thể bean nhận tham

chiếu đến đối tượng SessionContext. Thực thể bean cần SessionContext để truy xuất

thông tin môi trường: identity và role của client, transaction context,… Cuối cùng

phương thức ejbCreate() không đối số của bean được EJB Container triệu gọi (chỉ một

lần trong vòng đời của bean). Lúc này bean đã ở trạng thái sẵn sàng thực hiện các yêu cầu

của client do EJB(Local) Object ủy nhiệm (delegate) đến, gọi là trạng thái Method-Ready

Pool.

Do không cần lưu trữ trạng thái giao dịch, Stateless Session Bean không quan tâm đến

việc kích hoạt (activation) bean, container không bao giờ gọi đến các phương thức

callback ejbActivate() và ejbPassivate() của nó. Ra khỏi trạng thái Method-Ready Pool,

bean sẽ rơi vào trạng thái Does Not Exits nghĩa là container không cần nó nữa. Khả năng

lưu trữ của pool là cơ sở để container thu giảm số bean ở trạng thái Method-Ready Pool

bằng phương thức ejbRemove(), giải phóng tài nguyên và hủy bean. Xem phần Instance

swapping phía dưới để hiểu rõ cơ chế.

Hình 3.6: Vòng đời của Stateless Session Beans

Page 24: BaoCaoEJB

b. Vòng đời của Stateful Session Bean

Stateful Session Bean không dùng instance pooling. Ở trạng thái không hoạt động,

thực thể bean bị đẩy khỏi bộ nhớ một cách đơn giản trong lúc EJB Object vẫn còn giữ

liên hệ với client.

Khi phương thức create() của EJB Home được gọi, container triệu gọi phương

thức newInstance() của lớp bean để tạo một thực thể bean mới. Sau đó container triệu

gọi phương thức setSessionContext() để liên kết bean với một SessionContext dùng suốt

vòng đời của nó, lúc này bean sẽ được gán cho một EJB Object. Cuối cùng, container

triệu gọi phương thức ejbCreate()tương ứng với create() của EJB Home. Thực thể bean

bây giờ ở trạng thái Method-Ready.

Để tiết kiệm tài nguyên, khi không phục vụ client, bean có thể chuyển sang trạng thái

Passivated bằng phương thứcejbPassivate(). Bean sẽ trả lại tất cả các tài nguyên đang

mở và đặt các field thành null. Trạng thái của conversation sẽ được lưu, cách lưu trữ tùy

đối tượng.

Hình 3.7: Vòng đời của Stateful Session Bean

Page 25: BaoCaoEJB

Khi có yêu cầu của client đối với một bean đang ở trạng thái Passivated, container sẽ

kích hoạt thực thể bean, khôi phục bean và tham chiếu SessionContext, trạng thái

conversation lưu trữ, … rồi gọi ejbActivate().

Khi phương thức của bean nhận một exception hệ thống, container không dùng EJB

Object và loại bỏ thực thể bean. Bean sẽ chuyển trực tiếp sang trạng thái Does Not Exits,

không gọi phương thức ejbRemove()

4. Các phương thức CallBack

a. Đối với Stateless Session Bean Phương thức void ejbCreate() chỉ có duy nhất một và không tham số vì không

cần khởi tạo trạng thái conversation. Session bean phải có ít nhất một phương thức

ejbCreate(). Thường rỗng do client không triệu gọi đến.

Page 26: BaoCaoEJB

Phương thức void ejbRemove() thường rỗng do client không triệu gọi đến.

Phương thức void ejbPassivate() rỗng vì container không bao giờ thụ động hóa

thực thể bean. Phương thức void ejbActivate() rỗng vì container không bao giờ kích hoạt thực

thể bean. Phương thức void setSessionContext( SessionContext ctx ) thường rỗng vì bean

không có biến thực thể (biến lớp riêng) nên không cần lưu các tham chiếu đến các

biến đó.

b. Đối với Stateful Session Bean Phương thức ejbCreate() khởi gán dữ liệu thành viên, cũng là nơi lưu trữ trạng

thái conversation, cho thực thể bean. Sau khi được tạo, bean có thể ở: Trạng thái Method-Ready, thực hiện các business method phục vụ cho

client. Không cần thiết, sẽ được container chuyển thành trạng thái Passivated.

Chuyển sang trạng thái Does Not Exist do lỗi server hoặc do người dùng

chấm dứt session. Phương thức ejbPassivate() sẽ được container gọi trước khi chuyển bean vào

trạng thái Passivated, lưu trữ trạng thái của conversation. Phương thức này gọi

thực thể bean để giải phóng các tài nguyên liên kết với nó. Container chuyển trạng

thái của bean thành Passivated theo nguyên tắc LRU (Least Recently Used – bean

tồn tại lâu nhất sẽ được chọn để thụ động hóa). Bean ở trạng thái Passivated có

thời gian timeout, quá thời gian này hoặc do lỗi server, bean sẽ bị loại. Phương thức ejbActivate() chuyển bean từ trạng thái Passivated ngược trở lại

trạng thái Method-Ready. Trạng thái của conversation đang lưu trữ sẽ được đọc lại

và bean được khôi phục trước khi container gọi ejbActivate(). Khi kích hoạt bean,

container dùng nguyên tắc JIT (Just-In-Time – tức thời). Phương thức setSessionContext() được container gọi để liên kết một session

context với một bean chỉ định ngay từ đầu vòng đời của bean đó.3.2.5 Message Driven Beans

Message Driven Beans là một bean trong EJB cho phép thực hiện gởi và nhận

những thông điệp bất đồng bộ. Message Driven Bean hoạt động như một Listener cho

JMS API. Vòng đời của Message Driven Bean tương tự như stateless session bean.

Message Driven Bean là một thành phần EJB nên nó thừa hưởng được những thuộc tính

tốt của EJB như: giao tác và bảo mật. Ngoài ra, Message Driven Bean được quản lý bởi

EJB container nên việc tạo ra nhiều thể hiện bean để hỗ trợ nhiều khách hàng cùng lúc

Page 27: BaoCaoEJB

được thực hiện bởi EJB container, đối với các hệ thống JMS bình thường thì điều này đòi

hỏi lập trình viên phải code và xử lý những thao tác phức tạp.

1. Motivations for messaging

Các thành phần của EJB được sử dụng để phát triển các ứng dụng trong mạng máy

tính phân tán. Các máy tính trong mạng máy tính phân tán sử dụng giao thức RMI-IIOP

để giao tiếp với nhau. Giao thức này sử dụng để gọi các thành phần của EJB. RMI-IIOP

chấp nhận các dạng :

Asynchrony : Một dạng RMI-IIOP điển hình, client phải chờ cho đến khi server

xử lý xong và trả về kết quả, sau đó, client sẽ tiếp tục xử lý. Decoupling : RMI-IIOP server phải có thông tin về server đang sử dụng, client có

thể gửi chúng trực tiếp cho các đối tượng tham chiếu. Muốn bỏ đi server thì phải

tác động trực tiếp lên client. Reliability : Dữ liệu có thể mất đi hoặc client không thể thực thi bất kỳ chức năng

nào nếu server hoặc mạng(network) xảy ra lỗi. Support for multiple senders and receivers : Ta có thể sử dụng messaging

server : thay thế cho RMI (remote method invocation) nhưng messaging service sử

dụng bộ trung chuyển (middleman) giữa client và server. Middleman nhận thông

báo từ một hoặc nhiều sender và gửi những thông báo đó tới một hoặc nhiều

receiver. Messaging service không yêu cầu sự phản hồi ngay lập tức từ receiver.

Receiver có thể phản hồi tới sender sau khi xử lý xong.

2. Java Message Services (JMS)

JMS API là một công cụ được phat triển bởi Sun MicroSystems, được sử dụng để

phát triển các ứng dụng lớn. JMS API hổ trợ một framework cho phép phat triển các ứng

dụng một cách thuận tiện.

JMS sử dụng 2 phương thức giao tiếp : đồng bộ và bất đồng bộ, tương ứng với 2 kiểu

model : point-to-point và publish-subcribe.

JMS được cung cấp bới các nhà cung cấp lớn như : IBM,Oracle,Hewlett-Packard,BEA

Systems và Macromedia.

Page 28: BaoCaoEJB

3. JMS API

JMS APIs đóng vai trò quan trọng trong giao thức RMI-IIOP.

Hình 3.8 Hoạt động của JMS

Các bước tạo JMS :

Xác định thể hiện của JMS provider’s ConnectionFactory : thiết lập kết nối bằng

cách sử dụng thể hiện ConnectionFactory để truy cập vào JMS provider. Một bộ

quản lý sẽ được tạo ra và thiết lập ConnectionFactory cho JMS client đang sử

dụng. Tạo kết nối JMS : JMS connection cũng có cách giao tiếp giống như JDBC

connection, sử dụng ConnectionFactory để lấy kết nối.

Tạo JMS sesion : một đối tượng JMS session được sử dụng để gửi/nhận thông báo

và hoạt động giống như một ConnectionFactory. Nó cũng cho phép đóng gói các

thông báo trong quá trình chuyển/nhận thông báo.

Page 29: BaoCaoEJB

Xác định JMS Destination : JMS destination là một đối tượng được gửi/nhận các

thông báo. Tạo JMS producer/consumer : các thông báo được gửi thông các đối tượng(object)

được gọi là JMS producer. Các thông báo nhận được bằng cách gọi các JMS

object, được gọi là JMS Comsumer. Gửi và nhận các thông báo : để nhận một thông báo, đầu tiên khởi tạo chúng, gửi

các thông báo thông qua producer object. Ta có thể nhận các thông báo thông qua

Comsumer object.

4. Messaging Domains

Một tin nhắn hệ thống báo gồm nhiều loại chức năng. JMS API cung cấp nhiều

domain để phản hồi lại. Point-to-Point và Publish/Subscribe là 2 dạng domain được sử

dụng nhiều nhất. 2 dạng trên tuân theo các nguyên tắc sau :

Producer : client chịu trách nhiệm gửi các thông báo tới các Producer

Consumer : client chịu trách nhiệm nhận các thông báo được xem như là

comsumer. Destination : destination là đối tượng được sử dụng bởi client để xác định đối

tượng để gửi/nhận thông báo

5. Point-to-Point (PTP)

Một ứng dụng sử dụng phương thức point-to-point có các tính chất sau:

PTP producer là sender.

PTP comsumer là receiver.

PTP sử dụng hàng đợi giống như một destination.

Một receiver có thể nhận một thông báo đơn lẻ (single message).

6. Publish/Subscribe (pub/sub)

Một ứng dụng sử dụng công nghệ pub/sub có các tính chất sau :

Pub/sub producer là publisher.

Pub/sub comsumer là subcriber.

Pub/sub sử dụng topic như một destination.

Page 30: BaoCaoEJB

Một thông báo có thể có nhiều consumer.

3.3 Java Persistence API 3.3.1 Giới thiệu JPA

JPA là một khái niệm trừu tượng hóa trên JDBC làm cho nó có thể độc lập với SQL. Tất cả các lớp và annotation JPA nằm trong gói javax.persistence. Thành phần chính của JPA gồm có:

Object Relational Mapping (ORM), là một kỹ thuật ánh xạ các đối tượng thành dữ

liệu lưu trữ trong cơ sở dữ liệu quan hệ.

Một Entity Manager thực hiện các hoạt động trên cơ sở dữ liệu như tạo, thêm, xóa,

cập nhật. API này giúp chúng ta tránh phải sử dụng trực tiếp API JDBC.

Java Persistence Query Language (JPQL), cho phép lấy dữ liệu với một ngôn ngữ

truy vấn hướng đối tượng.

Các giao tác và các kỹ thuật locking khi truy xuất dữ liệu đồng thời được cung cấp

bởi Java Transaction API (JTA). Các giao tác cấp tài nguyên (non- JTA) cũng

được hỗ trợ JPA.

Callback và Listener để móc nối bussiness logic vào vòng đời của một đối tượng

persistence.

3.3.2 Kiến trúc JPA

Khái niệm JPA bao gồm ba thành phần

Entity.

Entity Manager.

Entiy Manager Factory.

Lược đồ dưới đây thể hiện các thành phần chính của kiến trúc JPA:

Page 31: BaoCaoEJB

Hình 3.9 Kiến trúc JPA.

a. Entity

Entity là các đối tượng persistence biểu diễn cho một record trong bảng cơ sở dữ liệu. Entity là mộ lớp POJO đơn giản, dễ phát triển. Dưới đây là một số đặc điểm của Entity:

Entity có thể được ánh xạ vào trong cơ sở dữ liệu quan hệ.

Entity được xác định bởi một định danh (tương đương khóa chính của bảng –

primary key).

Entity hỗ trợ xử lý giao tác (transaction).

Entity hỗ trợ kế thừa.

b. Entity Manager

Giao diện EntityManager cung cấp các API cho việc tương tác với Entity. Một số hàm

được cung cấp bởi API EntityManager :

Page 32: BaoCaoEJB

Hình 3.9 Các hàm được cung cấp bởi API Entity Manager

c. Entity Manager Factory

Entity Manager Factory được sử dụng để tạo một thể hiện Entity Manager. Entity

Manager Factory được dùng trong môi trường được quản lý bởi ứng dụng (Application

managed).

3.4 Java Server Faces (JSF)

3.4.1 JavaServer Faces là gì?Hiện nay, có hai công nghệ phổ biến để lập trình một ứng dụng web:

Dạng “rapid development”, phát triển ứng dụng nhanh chóng, cho phép nhà phát triển sử dụng môi trường lập trình trực quan, như Asp.net của Microsoft.

Dạng “hard-core coding”, nhà phát triển cần lập trình với nhiều dòng lệnh hơn để thực hiện những tác vụ bên dưới, như Java EE. (Java Enterprise Edition).

Nhà phát triển gặp nhiều khó khăn trong việc lựa chọn. Java EE là một hệ thống khá hấp dẫn, được hỗ trợ rộng rãi, có thể chạy trên nhiều nền khác nhau, có một cộng đồng hỗ trợ phát triển đông đảo. Mặt khác, Asp.net thì cho phép ta có thể phát triển giao diện người dùng thân thiện mà không cần phải viết nhiều code. Tất nhiên, nhà phát triển muốn cả hai. JSF (JavaServer Faces) mang đến cho ta sự dễ dàng hơn trong việc tạo ra giao diện người dùng ở phía server.

Cũng như lập trình ứng dụng phía client, có thể xem JSF chính là “Swing dành cho ứng dụng server”. So với lập trình JSP (Java Server Pages), thì JSF giúp người lập trình dễ dàng hơn trong nhiều tác vụ mà nếu phát triển bằng JSP cần phải tự viết, ví dụ như xử

Page 33: BaoCaoEJB

lý điều hướng và kiểm tra tính hợp lệ của dữ liệu nhập. Một sự ví von, ta có thể xem servlet và JSP như là “ngôn ngữ assembly” nếu so với framework JSF.

JSF gồm những phần sau:

Một tập những giao diện người dùng (user interface component) đã được xây dựng sẵn.

Mô hình lập trình hướng sự kiện. Mô hình component cho phép các bên phát triển thứ 3 xây dựng bổ sung các

component.

Có những component JSF rất đơn giản, ví dụ như input field hay button. Nhưng cũng có những component thì phức tạp hơn nhiều, ví dụ như: data tables hay trees.

JSF chứa đựng tất cả những đoạn code phục vụ cho việc xử lý sự kiện và tổ chức các component. Lập trình viên không cần phải quan tâm đến những chi tiết đó và có thể tập trung để xử lý các thao tác logic của ứng dụng.

Và quan trọng nhất, JSF chính là một phần của Java EE. Do đó JSF đã được bao gồm trong các Java EE application server (vd: Tomcat), và do đó dễ dàng để có thể chạy được ứng dụng phát triển bằng JSF.

Và hầu hết các môi trường phát triển tích hợp (IDE) ngày nay đều hỗ trợ cho JSF, từ đơn giản cho đến phức tạp, gấp thả các component. Một số IDE hỗ trợ JSF bao gồm: NetBean, JBuilder, Eclipse, JDeveloper…

3.4.2 Các dịch vụ của framework JSF

Page 34: BaoCaoEJB

Hình 3.10 Tổng quan kiến trúc JSF

Hình 3.10 cho ta cái nhìn tổng quan về kiến trúc của JSF. Như có thể thấy, framework JSF có nhiệm vụ tương tác với các thiết bị phía client, và nó cung cấp những công cụ để kết các tầng presentation, application logic và business logic của một ứng dụng web lại với nhau. Tuy nhiên, phạm vi của JSF được giới hạn lại ở tầng presentation. Các dịch vụ khác như web service, databasse persistence nằm ngoài phạm vi của JSF.

Sau đây là các dịch vụ quan trọng mà JSF framework mang lại:

Kiến trúc Model-View-Controller: Tất cả các ứng dụng đều cho phép người sử dụng tạo ra những dữ liệu cụ thể, ví dụ như giỏ hàng (shopping carts), đăng ký vé máy bay... Những dữ liệu như thế được gọi là model. Và nhà lập trình phải tạo ra view cho dữ liệu model đó. Trong lập trình web, HTML (hay những kỹ thuật tương tự) được dùng để tạo ra view. JSF kết nối view và model với nhau, Faces Servlet đóng vai trò như một controller, để cập nhật view cũng như model.

Page 35: BaoCaoEJB

Hình 3.11 Kiến trúc JSF và MVC Chuyển đổi dữ liệu - người dùng nhập dữ liệu vào web form dưới dạng text.

Nhưng đối tượng xử lý muốn dữ liệu ở dạng số, ngày tháng hay một kiểu dữ liệu nào đó. Với JSF thì sự chuyển đổi dữ liệu rất đơn giản.

Xử lý lỗi và kiểm tra tính hợp lệ - với JSF, ta có thể dễ dàng để thêm những luật kiểm tra tính hợp lệ cho các field ví dụ như “field này không được để trống”, “field này phải là số”, … Và tất nhiên, khi người dùng nhập sai, JSF cung cấp cho ta cơ chế hiển thị thông báo lỗi rất đơn giản.

Quốc tế hóa – JSF hỗ trợ chúng ta phát triển ứng dụng đa ngôn ngữ với resource

bundles (tuỳ thuộc vào người dùng ở quốc gia nào thì ứng dụng web của ta sẽ hiện

thị đúng ngôn ngữ của vùng đó).

Custom components – nhà phát triển thứ 3 có thể phát triển những component riêng cho ứng dụng JSF. Ví dụ như Calendar component, sau đó muốn sử dụng ta chỉ việc khai báo một lệnh đơn giản:

<rich:calendar ... inputClass="myFontClass"/>

Page 36: BaoCaoEJB

Hình 3.11 Custom component: Calendar của Jboss.

Chuyển dạng sang các chuẩn khác nhau - mặc định, website được viết bằng JSF sẽ

giải mã sang định dạng HTML để hiện thị lên các trình duyệt web. Nhưng không

khó để có thể mở rộng framework JSF và giải mã nó sang các định dạng khác như

WML hay XUL.

Hình 3.12 Website JSF hỗ trợ nhiều giao thức

Công cụ hỗ trợ - các công cụ hỗ trợ cho JSF không ngừng phát triển và lớn mạnh

trong vài năm gần đây. Có thể tin rằng trong một tương lai không xa, JSF sẽ là một

framework không thể thiếu dùng cho phát triển giao diện người dùng với ứng

dụng web Java.

3.1 JSF Life Cycle

JSF đặc tả 6 pha riêng biệt trong vòng đời của nó, như được mô tả như hình 2.10.

Dòng đi thông thường được vẽ bằng nét liền, dòng đi mở rộng được vẽ bằng nét đứt.

Page 37: BaoCaoEJB

Hình 3.13 Vòng đời JSF

Pha Restore View: tạo mới cây component trong trường hợp trang được yêu cầu lần

đầu, hoặc khôi phục lại cây component nếu nó được gọi trước đó. Nếu trang đã được gọi

trước đó, tất cả các component được khôi phục lại trạng thái trước đó của nó.Có nghĩa là

JSF sẽ tự động lưu lại thông tin trong form. Ví dụ: khi khi người dùng gửi form với thông

tin không chính xác và bị từ trối khi decoding, thì trang web sẽ hiện lại các thông tin

trước đó để người dùng có thể điều chỉnh. Nếu quá trình request về server không chứa bất

cứ dữ liệu nào thì JSF sẽ chuyển thẳng đến pha Render Response. Điều này xảy ra khi

trang web được hiện lên trong lần đầu tiên. Nếu không, pha kế tiếp sẽ được thực thi.

Pha Apply Request Values: trong pha này, JSF sẽ lần lượt đi qua các component trong

cây component. Mỗi đối tượng sẽ kiểm tra dữ liệu nào thuộc về mình và lưu lại dữ liệu

đó. Lưu ý: pha Apply Request Values sẽ lưu các sự kiện xuống hàng đợi (event queue)

khi một nút hay link được bấm, và xử lý ở pha khác.

Page 38: BaoCaoEJB

Pha Process Validation: giá trị string từ người dùng gửi về server sẽ được chuyển

sang kiểu dữ liệu khác, có thể là kiểu object hay bất cứ kiểu nào, giá trị đó được gọi là

“local values”. Khi thiết kế một trang JSF, ta có thể thêm bộ kiểm tra (validator) để kiểm

tra giá trị hợp lệ cho local values. Nếu pha này được thông qua, thì vòng đời sẽ tiếp tục

sang pha kế tiếp. Tuy nhiên, nếu quá trình chuyển đổi và kiểm tra tính hợp lệ xảy ra lỗi,

thì JSF sẽ gọi thẳng đến pha Render Response để hiện lại trang web cho người dùng

chỉnh sửa dữ liệu.

Pha Update Model Values: lúc này, mọi dữ liệu đã được chuyển đổi và kiểm tra tính

hợp lệ, chúng sẵn sàng để cập nhật xuống data model. Và local value được dùng để cập

nhật giữ liệu xuống bean.

Pha Invoke Application: lúc này, các sự kiện action của button hay link component sẽ

được thực thi. Giá trị trả về của các phương thức này sẽ được gửi đến bộ xử lý điều

hướng (navigation handler), và bộ xử lý có nhiệm vụ tìm kiếm trang web kế tiếp sẽ hiển

thi.

Pha Render Response: pha này sẽ mã hóa response và gửi nó vể cho trình duyệt.

Khi người dùng bấm vào một nút hay link thì một request mới được tạo, một vòng đời

mới lại được tiếp tục

CHƯƠNG 4 : GIẢI QUYẾT CÁC VẤN ĐỀ THỰC TẾ

4.1 Xây dựng website bán điện thoại MobileShop Online

Website bán sách online được xây dựng và phát triển trên nền J2EE 5.0 với các công

nghệ con như: EJB3.0,JSP/Servlet… Website được triển khai trên Jboss AS 7.1.1 .

Page 39: BaoCaoEJB

Website bao gồm hai gói chính : gói bán hàng và gói quản lý bán hàng. Gói bán hàng

sẽ cung cấp cho khách hàng nhiều tiện ích cho việc mua hàng trên mạng. Khách hàng có

thể sử dụng website để thông giới thiệu về sách,tìm kiếm sách theo tên,tác giả… Ngoài

ra, khách hàng có thể đăng ký thành viên,đặt hàng online và nhiều tiện ích thú vị khác

như : tham gia đánh giá sản phẩm,so sánh sản phẩm. Hệ thống sẽ đưa ra các nhận

định,đánh giá để tạo sự thuận tiện cho khách hàng trong quá trình mua sách. Với gói quản

lý bán hàng,website sẽ cung cấp các dịch vụ quản lý cho nhà quản lý bao gồm: quản lý

việc mua hàng, quản lý đơn đặt hàng, việc giao hàng, cơ sở dữ liệu….

4.1.1 Khảo sát hệ thống bán hàng hiện có trên mạng

a. Website https://sachweb.com/

Tổng quan về trang web:

Trang web thuộc hệ thống bán sách của nhà xuất bản tổng hợp TP.HCM. Hệ thống bao

gồm các chức năng chính :

Tìm kiếm sách theo từ khóa : theo tựa sách, theo tên sách.

Tìm kiếm nâng cao : tìm kiếm sách theo danh mục sách.

Giới thiệu sách mới,sách hay,sách theo bộ.

Phân loại sách.

Các ebook được download nhiều

Trang chủ :

Page 40: BaoCaoEJB

Hình 4.1 Trang chủ website websach.com

Phần trên cùng hiển thị tìm kiếm,tìm kiếm nâng cao, giỏ hàng.

Phần bên trái phân loại danh mục sách,giúp người dùng lựa chọn loại sách

Phần giữa hiển thị sách mới,sách hay

Phần dưới bên trái hiển thị danh mục các sách miễn phí.

Trang chi tiết sách :

Page 41: BaoCaoEJB

Hình 4.2 Trang chi tiết sách

Hiển thị trang bìa sách

Hiển thị thông tin sách : tác giả,số trang,giá bán

Giới thiệu nội dung sách

Giới thiệu các sách cùng nội dung

Chức năng mua sách

Ý kiến đọc giả

Page 42: BaoCaoEJB

Trang giỏ hàng:

Hình 4.3 Trang giỏ hàng của website websach.com

Liệt kê các sách đã chọn,đã đưa vào giỏ hàng

Chức năng tiếp tục mua sách,xóa sách khỏi giỏ hàng

Hiển thị số tiền của từng cuốn sách,tổng số tiền

Chức năng thanh toán.

b. Website http://www.nxbtre.com.vn/

Tổng quan về website :

Trang web thuộc hệ thống bán hàng trực tuyến của nhà xuất bản trẻ, bao gồm các chức

năng chính :

Tìm kiếm sách theo danh mục

Page 43: BaoCaoEJB

Tìm kiếm nâng cao

Các sách mới nhất

Sách bán chạy

Phân loại sách theo danh mục

Giới thiệu sách.

Tổng quan trang chủ :

Hình 4.4 : Tổng quan trang chủ website nxbtre.com.vn

Phần trên hiển thị các chức năng tìm kiếm

Phần trên cùng giới thiệu các sách tiêu biểu

Phần thân bên trái phân sách theo danh mục

Page 44: BaoCaoEJB

Phần thân giữa hiển thị các sách mới,sách bán chạy

Phần thân dưới hiển thị các tin tức nổi bật về sách

Trang chi tiết sách:

Hình 4.5 : Trang thông tin chi tiết sách trang web nxbtre.com.vn

Trích dẫn nội dung sách

Giới thiệu thông tin sách : tác giả, số trang, giá bán

Viết cảm nhận về sách

Các sách có nội dung liên quan

Page 45: BaoCaoEJB

4.1.2 Yêu cầu của website

4.1.2.1 Mục tiêu

Ứng dụng các công nghệ trên nền J2EE (JSP/Servlet, JSF, EJB, JPA…) để viết một

website bán hàng trực tuyến được gọi là MobileShop Online.Bên cạnh việc ứng dụng

mạng nơ-ron trong việc phân loại khách hàng.Website sẽ có một số yêu cầu sau :

Cho phép khách hàng có thể xem thông tin của sản phẩm cũng như tìm kiếm các

sản phẩm yêu thích của họ.

Cho phép những khách hàng đã đăng ký tài khoản thực hiện các hoạt động mua

hàng trên website (thêm hàng vào giỏ, đặt hàng, thanh toán sản phẩm…)

Cho phép khách hàng thực hiện các hoạt động thông thường khác như so sánh các

sản phẩm, đánh giá sản phẩm, xem bài viết liên quan tới sản phẩm, các thông tin

tin tức, khuyến mãi…

Thực hiện phân loại khách hàng dựa vào thông tin cung cấp và lịch sử mua hàng

của khách hàng.

Chứa năng quản lý website: quản lý cập nhật sản phẩm, cập nhật thông tin, cập

nhật chương trình khuyến mãi.

Chức năng quản lý người dùng, quản lý thông tin.

4.1.2.2 Môi trường phát triển

JDK 1.7

NetBean DEV

EJB3.0

JSP./Servlet

Jboss AS 7.1.1

MySQL database

Page 46: BaoCaoEJB

4.1.2.3 Yêu cầu chức năng

Tìm kiếm sản phẩm : người dùng sẽ nhập vào từ cần tìm kiếm, sau khi nhấn tìm

kiếm, hệ thống sẽ liệt kê sản phẩm có tên như người dùng đã nhập trong trường

hợp sản phẩm đó tồn tại.

Tìm theo tác giả

Tìm theo loại sách

Tìm theo tên sách

Tìm kiếm chuyên sâu: Tìm kiếm nâng cao, bao gồm tìm kiếm nhiều thông tin 1

lúc

Xem thông tin sách

Người dùng sau khi nhấn vào sản phẩm sẽ hiển thị ra thông tin sản phẩm, bao gồm :

Trang bìa

Tác giả

Số trang

Giá sách

Giá khuyến mãi

Trích đoạn nội dung

Các sách có nội dung liên quan.

Quản lý giỏ hàng

Chức năng này được dùng cho khách hàng đã login vào hệ thống (khách hàng

quen thuộc).Trong chức năng này khách hàng có thể thêm sách vào giỏ hàng của

mình hoặc xóa một sách đã tồn tại trong giỏ hàng, xem thông tin giỏ hàng, cập nhật số

lượng sản phẩm trong giỏ hàng.

Đặt hàng : Cho phép khách hàng đặt hàng từ thông tin trong giỏ hàng. Hệ thống

cung cấp các hình thức thanh toán :

Qua bưu điện

Chuyển khoản

Page 47: BaoCaoEJB

Thanh toán trực tiếp khi nhận hàng

So sánh sản phẩm

Cho phép người dùng có thể xem so sánh tính năng giữa các sản phẩm.Ở đây, qui

định số sản phẩm so sánh tối đa là 3 sản phẩm.

Đánh giá sản phẩm

Chức năng này dùng cho khách hàng đã đăng nhập vào hệ thống. Thông tin đánh

giá bao gồm : tiêu đề của đánh giá, nội dung, ưu điểm, khuyết điểm, mức điểm đánh

giá (tối đa 10 điểm).

Đăng ký thành viên

Cho phép khách hàng đăng ký làm thành viên của hệ thống.

Đăng nhập và đăng xuất.

Cho phép thành viên có thể đăng nhập, đăng xuất với tài khoản đã đă ký

Quản lý thông tin người dùng

Người dùng có thể thay đổi thông tin tài khoản thông qua trang web quản lý thông tin

người dùng.

Quản lý người dùng

Cho phép quản trị viên có thể quản lý thành viên, sủa đổi thông tin người dùng, cấp

quyền, cấp lại mật khẩu trong trường hợp cần thiết.

Quản lý tin tức

Chức năng này được sử dụng cho người quản lý tin tức (news manager).Người

quản lý tin tức có thể thêm mới tin tức, cập nhật nội dung tin tức, xóa tin đã tồn tại.

Tuy nhiên việc thêm, cập nhật hay xóa sau đó phải được chuyển đến người quản lý

cao hơn và phải được xác nhận của người này thi tin đó mới hoạt động chính thức.

Hình thức này cũng giống như trong tòa soạn báo, bài viết của phóng viên phải qua

kiểm duyệt của tổng biên tập mới chính thức được đăng tin.

Page 48: BaoCaoEJB

Quản lý chương trình khuyến mãi

Chức năng này được sử dụng cho người quản lý khuyến mãi.Chức năng hoàn toàn

tương tự như chức năng quản lý tin tức, tức là mọi hoạt động bên quản lý khuyến mãi

cũng đều phải qua kiểm duyệt.

Quản lý sản phẩm

Chức năng này được dùng cho người quản lý sản phẩm.Người quản lý sản phẩm có

thể thêm mới một sản phẩm, cập nhật thông tin sản phẩm, xóa sản phẩm đã tồn

tại.Cũng tương tự như quản lý tin, sản phẩm phải được duyệt trước khi cho lên trang

web.

Quản lý bài viết sản phẩm

Chức năng được dùng cho người quản lý bài viết sản phẩm.Chức năng này tương tự

như chức năng quản lý tin tức

Quản lý khác

Chức năng này được dùng cho người quản lý cấp cao (senior manager). Chức

năng này bào gồm: quản lý việc thêm, xóa, cập nhật các tính năng sản phẩm; quản

lý việc thêm, xóa, cập nhật hãng sản xuất, phong cách, kiểu dáng, phân lớp sản

phẩm.

Quản lý tài nguyên

Tài nguyên ở đây bao gồm sản phẩm, tin tức, khuyến mãi.Chức năng này

được dùng cho người quản lý cấp cao (senior manager).Người này đóng vai trò như

tổng biên tập, quyết định một trong các tài nguyên trên được phép hoạt động hay

không khi có sự thay đổi từ các bộ phận quản lý chuyên dụng hơn.

Quản lý đánh giá sản phẩm

Cho phép đánh giá có hiệu lực và hiển thị cho khách hàng khi xem thông tin

sản phẩm. Hoặc xóa những đánh giá không hợp lệ

Quản lý hóa đơn:

Page 49: BaoCaoEJB

Chức năng này cho phép nhân viên quản lý việc bán hàng của hệ thống. Việc

quản lý hóa đơn bao gồm những chức năng như: cập nhật hóa đơn, xóa những hóa

đơn không hợp lệ, đóng những hóa đơn đã thanh toán, gởi email cho khách hàng.

4.1.3 Mô hình hóa yêu cầu

4.1.3.1 Mô hình Usecase

4.1.3.1.1 Các Actor trong hệ thống

uc Actor

Admin

Guest

News Manager

Order Manager

Senior Manager

Product Manager

member

Hình 4.6 : Các actor trong hệ thống

Mô tả:

Admin: là người quản trị hệ thống.

Senior Manager:

Page 50: BaoCaoEJB

Là người chuyên chịu trách nhiệm về việc xuất bản tin tức, sản phẩm và các

thông tin về sách.

Quản lý việc cập nhật các nội dung chung như: nhà xuất bản , phân loại sách,

trích đoạn sách, chương trình khuyến mãi…

Order Manager:

Quản lý hóa đơn mua hàng của khách hàng như: Cập nhật thông tin giao hàng,

thông tin khách hàng, thanh toán hóa đơn, đóng hóa đơn, xóa hóa đơn không hợp

lệ.

News Manager:

Quản lý việc cập nhật các tin tức của website, các chương trình khuyến mãi. Các

thông tin sẽ được Senior Manager kiểm duyệt trước khi có hiệu lực hiển thị cho

phía khách hàng.

Product Manager:

Quản lý việc cập nhật sản phẩm, phụ kiện và các chương trình khuyến mãi của

sản phẩm. Các thông tin này sẽ được Senior Manager kiểm duyệt trước khi có

hiệu lực hiển thị cho phía khách hàng.

Guest

Là người sử dụng hệ thống nhưng không đăng nhập hệ thống. Sử dụng các chức

năng cơ bản của hệ thống : Xem thông tin sản phẩm, quản lý giỏ hàng, tìm kiếm

sách , nhận xét.

Member:

Là sử dụng người hệ thống đã đăng nhập vào hệ thống, có thể sử dụng các chức

năng của thành viên như: Đánh giá sách, đặt hàng….

4.1.3.2 Biểu đồ Usecase Diagram

Page 51: BaoCaoEJB

a. Gói bán hàng

uc function

Member

Guest

manage profile

rate product

forgot password

change password change profile

Login

v iew news

compare product

registor

v iew product info

search

find by name

find by author

find by category

manage cart

check out

delete product

add product

«extend» «extend»

«include»

«include»

«extend»«extend»

«extend»

«include»

«extend»

«extend»

«extend»

hình 4.7 : Lược đồ các chức năng trong gói bán hàng

Page 52: BaoCaoEJB

b. Gói quản lý

uc quanly

NEWS maganer

product manager

Senior manager

Order manager

Admin

manage news

manage product content

manage general content

manage orders

manage user

Login

«include»

«include»

«include»

«include»

«include»

Hình 4.8 : Lược đồ gói quản lý

Page 53: BaoCaoEJB

Usecase quản lý tin tức

uc manage NEWS

NEWS manager

manage general NEWS

add NEWS delete NEWS

modify NEWS

login

«extend» «extend»

«extend»

«include»

Hình 4.9 : Usecase quản lý tin tức

Page 54: BaoCaoEJB

Usecase quản lý đặt hàng uc manage order

Order manager

add book into order delete book from order

order

login

manage order

«extend» «extend»

«extend»

«include»

Hình 4.10 : Usecase quản lý đơn đặt hàng Usecase quản lý sách

uc manage product

product manager

manage product

add product delete product

modify product

login

«extend» «extend»

«extend»

«include»

Hình 4.11: Usecase quản lý sách

Page 55: BaoCaoEJB

Usecase quản lý user uc manager user

Admin

manage user

change info delete user

create user

login

«extend» «extend»

«extend»

«include»

Hình 4.12: Usecase quản lý user

Page 56: BaoCaoEJB

Usecase quản lý chương trình khuyến mãi uc manage promotion

senior manager

manage promotion

add promotion delete promotion

change promotion

modify promotion

re-open promotionlogin

«include»

«extend» «extend»

«extend»

«extend»

«extend»

Hình 4.13 Usecase quản lý chương trình khuyến mãi

Page 57: BaoCaoEJB

4.1.3.3 Mô tả Usecase

Quản lý đơn đặt hàng:

Cập nhật đơn đặt hàng (Update Order)

UseCase Update OrderMô tả vắn tắt Use case này cho phép actor yêu cầu chỉnh sữa thông tin

của một hóa đơn mở (chưa thanh toán).Các Actor liên quan

Admin, Order Manager

Điều kiện tiên quyết

Actor đã đăng nhập vào hệ thống.

Luồng sự kiện chính

1. Use case bắt đầu khi actor yêu cầu hệ thống cập nhật một hóa đơn mở.

2. Actor sửa đổi thông tin của hóa đơn.3. Actor nhấn nút Cập nhật.4. Hệ thống kiểm tra dữ liệu hợp lệ.

A1: dữ liệu hợp lệ.5. Hệ thống cập nhật dữ liệu đã sửa vào cơ sở dữ liệu.6. Hệ thống thông báo cập nhật thành công.

Luồng phụ A1: dữ liệu không hợp lệ1. Hệ thống thông báo dữ liệu không hợp lệ.2. Trở lại luồng chính ở bước 2.

Kết quả sau khi usecase thực hiện

Nếu use case thành công thì thông tin của hóa đơn này sẽ được cập nhật trong cơ sở dữ liệu .

Bảng 4-1 Usecase Update Order

Xóa đơn đặt hàng (Delete Order)

UseCase Delete OrderMô tả vắn tắt Use case này cho phép actorxóa mộthóa đơn mở trong cơ

sở dữ liệu.Các Actor liên quan

Admin

Điều kiện tiên quyết

Actor đã đăng nhập vào hệ thống.

Luồng sự kiện chính

1. Use case bắt đầu khi actor yêu cầu hệ thống xóa một hóa đơn.

2. Actor chọn hóa đơn cần xóa.3. Actor nhấn nút xóa để hệ thống xóa hóa đơn.4. Hệ đưa ra xác nhận xóa hóa đơn

Page 58: BaoCaoEJB

A1: Không xóa hóa đơn5. Actor xác nhận xóa6. Hệ thống tiến hành xóa hóa đơn khỏi cơ sở dữ liệu7. Thông báo kết quả

Luồng phụ A1: Không xóa hóa đơn1. Hệ thống hủy thao tác xóa hóa đơn

Kết quả sau khi usecase thực hiện

Nếu use case thành công thì hóa đơn này sẽ được xóa khỏi cơ sở dữ liệu.

Bảng 4-2 Usecase Delete Order

Thanh toán hóa đơn (Close Order)

UseCase Close OrderMô tả vắn tắt Use case này cho phép actor yêu cầu đóng hóa đơn đã

thanh toán.Các Actor liên quan

Admin, Order Manager

Điều kiện tiên quyết

Actor đã đăng nhập vào hệ thống.

Luồng sự kiện chính

1. Use case bắt đầu khi actor yêu cầu hệ thống đóng một hóa đơn.

2. Hệ thống cập nhật trạng thái cho hóa đơn là đã thanh toán và vô hiệu hóa mọi thao tác trên hóa đơn này

3. Hệ thống thông báo kết quả bước 2.Luồng phụ Không cóKết quả sau khi usecase thực hiện

Nếu use case thành công thì thông tin của hóa đơn này sẽ được cập nhật trong cơ sở dữ liệu trạng thái là ‘đã thanh toán’

Bảng 4-3 Usecase Close Order

Quản lý sách :

Thêm một sản phẩm (Add new product)

UseCase Add new productMô tả vắn tắt Use case này cho phép actor thêm mới sảm phẩm vào cơ

sở dữ liệuCác Actor liên quan

Product manager, senior manager

Điều kiện tiên quyết

Actor đã đăng nhập vào hệ thống

Page 59: BaoCaoEJB

Luồng sự kiện chính

1. Use case bắt đầu khi actor yêu cầu hệ thống thêm mới sản phẩm.

2. Actor nhập thông tin sản phẩm.3. Actor nhấn nút “thêm sản phẩm”.4. Hệ thống kiểm tra dữ liệu hợp lệ.

A1: dữ liệu không hợp lệ5. Hệ thống tiến hành thêm dữ liệu sản phẩm vào cơ sở

dữ liệu.6. Hệ thống thông báo thêm thành công nếu giao dịch

thành công.Luồng phụ A1: dữ liệu không hợp lệ.

1. Hệ thống thông báo dữ liệu không hợp lệ.2. Trở lại luồng chính ở bước 2.

Kết quả sau khi usecase thực hiện

Nếu use case thành công thì hệ thống sẽ thêm một sản phẩm mới vào bảng “product” trong cơ sở dữ liệu và cập nhật trạng thái của sản phẩm là “mới tạo”.

Bảng 4-4 Usecase Add new product

Cập nhật sản phẩm (Modify an available product)

UseCase Modify an available productMô tả vắn tắt Use case này cho phép actor chỉnh sửa các sản phẩm đã có

trong cơ sở dữ liệu.Các Actor liên quan

Product manager, senior manager.

Điều kiện tiên quyết

Actor đã đăng nhập vào hệ thống.

Luồng sự kiện chính

1. Use case bắt đầu khi actor yêu cầu hệ thống cập nhật.2. Actor sửa đổi thông tin sản phẩm.3. Actor nhấn nút Cập nhật.4. Hệ thống kiểm tra dữ liệu hợp lệ.

A1: dữ liệu hợp lệ.5. Hệ thống cập nhật dữ liệu đã sửa vào cơ sở dữ liệu.6. Hệ thống thông báo cập nhật thành công.

Luồng phụ A1: dữ liệu không hợp lệ1. Hệ thống thông báo dữ liệu không hợp lệ.2. Trở lại luồng chính ở bước 2.

Kết quả sau khi usecase thực hiện

Nếu use case thành công thì sản phẩm này sẽ cập nhật trạng thái của sản phẩm thành “đang cập nhật” và cập nhật vào bảng “product_management” trong cơ sở dữ liệu.

Bảng 4-5 Usecase Modify an available product

Page 60: BaoCaoEJB

Xóa sản phẩm (Delete an available product)

UseCase Delete an available productMô tả vắn tắt Use case này cho phép actor xóa tạm thời sản phẩm trong

cơ sở dữ liệu( thực chất là việc thay đổi trạng thái của sản phẩm thành “đã xóa”).

Các Actor liên quan

Product manager, senior manager.

Điều kiện tiên quyết

Actor đã đăng nhập vào hệ thống.

Luồng sự kiện chính

1. Use case bắt đầu khi actor yêu cầu hệ thống xóa sản phẩm.

2. Actor chọn sản phẩm cần xóa.3. Actor nhấn nút xóa để hệ thống xóa sản phẩm.4. Hệ thống gởi yêu cầu xác nhận5. User xác nhận xóa sản phẩm

A1: User xác nhận không xóa sản phẩm.6. Hệ thống thực hiện xóa tạm thời sản phẩm(cập nhật

trạng thái sản phẩm thành “đã xóa”).7. Hệ thống thông báo xóa thành công.8. Hoàn tất.

Luồng phụ A1: User xác nhận không xóa sản phẩm.1. Hệ thống hủy yêu cầu xóa2. Trở lại luồng chính ở bước 8.

Kết quả sau khi usecase thực hiện

Nếu use case thành công thì sản phẩm sẽ được cập nhật trạng thái “đã xóa” và cập nhật vào bảng “product_management” trong cơ sở dữ liệu.

Bảng 4-6 Usecase Delete an available product

Quản lý tin tức

Thêm tin tức (Add News)

UseCase Add NewsMô tả vắn tắt Use case này cho phép actor thêm mới tin tức vào cơ sở dữ

liệuCác Actor liên quan

News Manager, Senior Manager, Admin

Điều kiện tiên quyết

Actor đã đăng nhập vào hệ thống

Page 61: BaoCaoEJB

Luồng sự kiện chính

1. Use case bắt đầu khi actor yêu cầu hệ thống thêm mới tin tức.

2. Actor nhập thông tin của tin tức.3. Actor nhấn nút “lưu tin tức”.4. Hệ thống kiểm tra dữ liệu hợp lệ.

A1: dữ liệu không hợp lệ5. Hệ thống tiến hành thêm dữ liệu tin tức vào cơ sở dữ

liệu.6. Hệ thống thông báo thêm thành công nếu giao dịch

thành công.Luồng phụ A1: dữ liệu không hợp lệ.

1. Hệ thống thông báo dữ liệu không hợp lệ.2. Trở lại luồng chính ở bước 2.

Kết quả sau khi usecase thực hiện

Nếu use case thành công thì hệ thống sẽ thêm một tin tức mới vào cơ sở dữ liệu và cập nhật trạng thái của tin tức là “mới tạo”.

Bảng 4-7 Usecase Add news

Cập nhật tin tức (Modify an available News)

UseCase Modify available NewsMô tả vắn tắt Use case này cho phép actor chỉnh sửa các tin tức đã có

trong cơ sở dữ liệu.Các Actor liên quan

News Manager, Senior Manager, Admin

Điều kiện tiên quyết

Actor đã đăng nhập vào hệ thống.

Luồng sự kiện chính

9. Use case bắt đầu khi actor yêu cầu hệ thống cập nhật một tin tức.

10. Actor sửa đổi thông tin của tin tức.11. Actor nhấn nút Cập nhật.12. Hệ thống kiểm tra dữ liệu hợp lệ.

A1: dữ liệu hợp lệ.13. Hệ thống cập nhật dữ liệu đã sửa vào cơ sở dữ liệu.14. Hệ thống thông báo cập nhật thành công.

Luồng phụ A1: dữ liệu không hợp lệ1. Hệ thống thông báo dữ liệu không hợp lệ.2. Trở lại luồng chính ở bước 2.

Kết quả sau khi usecase thực hiện

Nếu use case thành công thì tin tức này sẽ được cập nhậtvào một bảng NewsManagement trong cơ sở dữ liệu và cập nhật trạng thái của sản phẩm thành “đang cập nhật” trong bảng TheNews.

Page 62: BaoCaoEJB

Bảng 4-8 Usecase Modify an available news

Xóa tin tức (Delete an available News)

UseCase Delete available NewsMô tả vắn tắt Use case này cho phép actor xóa tạm thời tin tức trong

cơ sở dữ liệu( thực chất là việc thay đổi trạng thái của tin tức thành “đã xóa”).

Các Actor liên quan News Manager, Senior Manager, AdminĐiều kiện tiên quyết Actor đã đăng nhập vào hệ thống.Luồng sự kiện chính 15. Use case bắt đầu khi actor yêu cầu hệ thống xóa tin

tức.2. Actor chọn tin tức cần xóa.3. Actor nhấn nút xóa để hệ thống xóa tin tức.4. Hệ đưa ra xác nhận xóa tin tức

A1: Không xóa tin tức.1. Actor xác nhận xóa2. Hệ thống tiến hành cập nhật trạng thái tin tức là

“đang được xóa”.Luồng phụ A1: Không xóa tin tức

1. Hệ thống hủy thao tác xóa tin tứcKết quả sau khi usecase thực hiện

Nếu use case thành công thì tin tức này sẽ được cập nhật trạng thái là “đang được xóa”

Bảng 4-9 Usecase Delete an available news

Quản lý người dùng Thêm người dùng (Add User)

UseCase Add UserMô tả vắn tắt Use case này cho phép actor thêm mới một User vào cơ sở

dữ liệuCác Actor liên quan

Admin

Điều kiện tiên quyết

Actor đã đăng nhập vào hệ thống

Luồng sự kiện chính

1. Use case bắt đầu khi actor yêu cầu hệ thống thêm mới User.

2. Actor nhập thông tin của và vai trò cảuUser.3. Actor nhấn nút “lưu”.4. Hệ thống kiểm tra dữ liệu hợp lệ.

Page 63: BaoCaoEJB

A1: dữ liệu không hợp lệ5. Hệ thống tiến hành thêm dữ liệu User vào cơ sở dữ liệu.6. Hệ thống thông báo thêm thành công nếu giao dịch

thành công.Luồng phụ A1: dữ liệu không hợp lệ.

1. Hệ thống thông báo dữ liệu không hợp lệ.2. Trở lại luồng chính ở bước 2.

Kết quả sau khi usecase thực hiện

Nếu use case thành công thì hệ thống sẽ thêm thông tin một User vào cơ sở dữ liệu

Bảng 4-10 Use case Add user

Cập nhật người dùng (Modify User)

UseCase Modify UserMô tả vắn tắt Use case này cho phép actor chỉnh sửa thông tin và vai trò

User.Các Actor liên quan AdminĐiều kiện tiên quyết Actor đã đăng nhập vào hệ thống.Luồng sự kiện chính

1. Use case bắt đầu khi actor yêu cầu hệ thống cập nhật một User.

2. Actor sửa đổi thông tin của User.3. Actor nhấn nút Cập nhật.4. Hệ thống kiểm tra dữ liệu hợp lệ.

A1: dữ liệu hợp lệ.5. Hệ thống cập nhật dữ liệu đã sửa vào cơ sở dữ liệu.6. Hệ thống thông báo cập nhật thành công.

Luồng phụ A1: dữ liệu không hợp lệ1. Hệ thống thông báo dữ liệu không hợp lệ.2. Trở lại luồng chính ở bước 2.

Kết quả sau khi usecase thực hiện

Nếu use case thành công thì thông tin User này sẽ được cập nhật trong cơ sở dữ liệu .

Bảng 4-11Usecase Modify user

Xóa người dùng (Delete User)

UseCase Delete UserMô tả vắn tắt Use case này cho phép actor xóamột Usertrong cơ sở dữ

liệu.Các Actor liên quan AdminĐiều kiện tiên quyết Actor đã đăng nhập vào hệ thống.

Page 64: BaoCaoEJB

Luồng sự kiện chính

1. Use case bắt đầu khi actor yêu cầu hệ thống xóa một User.

2. Actor chọn User cần xóa.3. Actor nhấn nút xóa để hệ thống xóa User.4. Hệ đưa ra xác nhận xóa User

A1: Không xóa User5. Actor xác nhận xóa6. Hệ thống tiến hành xóa User khỏi cơ sở dữ liệu7. Thông báo kết quả

Luồng phụ A1: Không xóa User1. Hệ thống hủy thao tác xóa User

Kết quả sau khi usecase thực hiện

Nếu use case thành công thì User này sẽ được xóa khỏi cơ sở dữ liệu.

Bảng 4-12 Usecase Delete user

Gói bán hàng Thêm hàng vào giỏ hàng (Add product to cart)

UseCase Add product to cartMô tả vắn tắt Use case này cho phép actor thêm một sản phẩm vào

trong giỏ hàng.Các Actor liên quan Guest, Member.Điều kiện tiên quyết Không có.

Luồng sự kiện chính 1. Use case bắt đầu khi actor yêu cầu hệ thống thêm sản phẩm vào giỏ hàng.

2. Actor yêu cầu hệ thống thêm sản phẩm vào giỏ hàng bằng cách nhấn nút đặt hàng trên sản phẩm.A1: Sản phẩm đã tồn tại trong giỏ hàng.A2: Sản phẩm chưa tồn tại trong giỏ hàng.

3. Hệ thống cập nhật sản phẩm và hiển thị thông tin đặt hàng của sản phẩm trong trang giỏ hàng.

4. Kết thúc.Luồng phụ A1: Sản phẩm đã tồn tại trong giỏ hàng

1. Hệ thống cập nhật số lượng của sản phẩm tăng thêm 1 đơn vị

A2: Sản phẩm chưa tồn tại trong giỏ hàng1. Hê thống thêm sản phẩm vào danh sách sản

phẩm của giỏ hàngKết quả sau khi usecase thực hiện

Nếu use case thành công hệ thống cập nhật thông tin sản phẩm trong giỏ hàng

Page 65: BaoCaoEJB

Bảng 4-13 Usecase Add product to cart

Xóa hàng khỏi giỏ hàng (Delete product from cart)

UseCase Delete product from cartMô tả vắn tắt Use case này cho phép actor xóa một sản phẩm khỏi

giỏ hàng.Các Actor liên quan Guest, Member.Điều kiện tiên quyết Không có.

Luồng sự kiện chính 1. Use case bắt đầu khi actor yêu cầu hệ thống xóa sản phẩm khỏi giỏ hàng.

2. Actor chọn sản phẩm cần xóa khỏi giỏ hàng và nhấn nút xóa.

3. Hệ thống gởi yêu cầu xác nhận xóa sản phẩm.4. Actor xác nhận xóa sản phẩm5. Sản phẩm được xóa khỏi giỏ hàng6. Kết thúc.

Luồng phụ Không cóKết quả sau khi usecase thực hiện

Nếu use case thành công hệ thống sẽ xóa thông tin sản phẩm khỏi giỏ hàng.

Bảng 4-14 Usecase Delete product from cart

Đặt hàng (Place an order)

UseCase Place an orderMô tả vắn tắt Use case này cho phép thanh toán đơn đặt hàng của

khách hàngCác Actor liên quan Member.Điều kiện tiên quyết Member đã đăng nhập.

Luồng sự kiện chính 1. Use case bắt đầu khi actor yêu cầu hệ thống thanh toán đơn đặt hàng.

2. Actor nhấn nút thanh toán đơn hàng trong giỏ hàng.

3. Hệ thống kiểm tra giỏ hàng.A1: Giỏ hàng có sản phẩm.A2: Giỏ hàng rỗng.

4. Actor nhập các thông tin cần thiết trong đơn đặt hàng.

5. Hệ thống kiểm tra thông tin hợp lệ.A3: Thông tin hợp lệ.

Page 66: BaoCaoEJB

A4: Thông tin không hợp lệ.6. Actor xác nhận đặt hàng.7. Hệ thống lưu thông tin đơn đặt hàng vào cơ sở

dữ liệu và thông báo đặt hàng thành công.8. Kết thúc

Luồng phụ A1: Giỏ hàng có sản phẩm.1. Hệ thống chuyển đến trang đặt hàng sản phẩm.2. Trở lại luồng chính ở bước 4.

A2: Giỏ hàng rỗng.1. Hệ thống xuất thông báo lỗi đặt hàng.2. Trở lại luồng chính ở bước 8.

A3: Thông tin hợp lệ.1. Hệ thống yêu cầu xác nhận đặt hàng.2. Trở lại luồng chính ở bước 6.

A4: Thông tin không hợp lệ.1. Hệ thống thông báo lỗi.2. Trở lại luồng chính ở bước 4.

Kết quả sau khi usecase thực hiện

Nếu use case thành công hệ thống sẽ lưu thông tin đơn đặt hàng vào cơ sở dữ liệu.

Bảng 4-15 Usecase Place an order

4.1.3.4 Mô hình Sequence Diagram

Gói quản lý :

Quản lý đơn đặt hàng : Update order

Page 67: BaoCaoEJB

sd update order

Order manager

OrderManagement

pageOrderController

:OrderBean

:Order

Update Orderpage

loop

[invalid]

alt

[invalid]

click update the order()call update navigation()

navigate()

modify order info()

submit()

validate()

error()

call update method()

updateOrder(order) :boolean

updateOrder(order) :boolean

success()

Hình 4-4 Lược đồ Sequence cho Usecase Update order

Page 68: BaoCaoEJB

Delete ordersd delete order

Order manager

OrderManagement

pageOrderController

:OrderBean

:Order

select orders()

click delete()

deleteOrder(List<Order> orders)

deleteOrder(List<Order> orders)

deleteOrder(List<Order> orders)

success()

Hình 4-5 Lược đồ Sequence cho Usecase Delete order

Page 69: BaoCaoEJB

Quản lý người dùng : Add user

sd Create an user

Admin

UserManagement

AddUser

User Role

alt

[user is avilable]

[user is not available]

alt

[pass is not equa with re-pass]

loop

add an user()CreatePage()

Enter User + Pass + Re-Pass()

validate pass()

password fail()

correct pass()

submit()

Read user()

a list of user()

check user()

Save(user,pass)

Select Roles()Save(user,List<Roles>)

fail()

Hình 4-6 Lược đồ Sequence cho Usecase Add user

Page 70: BaoCaoEJB

Modify user sd Modify an user

Admin

frmUserManagement

frmUpdateUser

User Role

opt

[Modify Roles]

alt

[newpass equa re-newpass]

[ELSE]

opt

[Change Pass]

alt

[user is available]

[ELSE]

opt

[change UserName]

Modify an user()CreatePage()

select an user()

Select role()

submit()Update(user,l ist<Role>)

Enter pass + newpass + re-newpass()

validate pass()

Update(user, newPass)

pass not valid()

Enter new User Name()

read users()

a list of user()

check user()

Update(user, newUser)

successful()

fail()

Hình 4-7 Lược đồ Sequence cho Usecase Modify user

Delete user

Page 71: BaoCaoEJB

sd Delete an User

Admin User Role

frmAdminManagement

frmUserManagement

alt

[Press OK]

[Press Cancel]

Delete an User()CreatePage()

Select an User()

Delete()

Dialog confirm()

OK() Delele Roles(user)

Delele an user(user)

Cancel()

Hình 4-8 Lược đồ sequence cho usecase Delete user

Page 72: BaoCaoEJB

Quản lý sản phẩm Add new product

sd add new product

Product Manager

(from MobileShop)

ProductManagementpage

AddNewProductpage

:ProductController :ProductBean

Product

alt checkValid

[valid]

loop

[invalid]

alt

[unavailable]

[available]

click add new product()

redirect()

input_product_info()

checkValid()

fail()

input again()

send_product_info()

getProducts() :List<Product>

getProducts() :List<Product>

return list()

checkAvailability(product)

addProduct(product) :boolean

addProduct(product) :boolean

success()

return false()

fail()

Hình 4-9 Lược đồ Sequence cho Usecase Add new product

Page 73: BaoCaoEJB

Modify an available productsd modify av ailable product

Product Manager

(from MobileShop)

ProductManagementpage

modifyProductform

:ProductController :ProductBean

Product

alt check v alid

[valid]

[invalid]

properties include product's name, company's name, image, price, model, style, product classification, waranty time, features, special features

post properties information to controller

modifyProduct()

redirect()

input properties that need to change()

clickUpdate()

checkValid()

send_product_info()

updateProduct(Product)

updateProduct()

successful()

error_message()

Hình 4-10 Lược đồ Sequence cho Usecase Modify an available product

Page 74: BaoCaoEJB

Delete an available productsd delete av ailable product

Product Manager

(from MobileShop)

ProductManagementpage

:ProductController :ProductBean

Product

alt confirm

[ok]

[cancel]

delete_product()

confirmDelete() :boolean

ok()

sendProductID()

getProductByID(productID) :Product

getProductByID(productID) :Product

return product()

deleteProduct(product) :boolean

setDeleteProduct(product) :boolean

success()

cancel()

stop()

Hình 4-11 Lược đồ Sequence cho Usecase Delete an available product

Page 75: BaoCaoEJB

Quản lý tin tức Add news

sd add news

News Manager

NewsManagement

pageNewsController

News page

:NewsBean

:News

loop

[invalid]

alt

[invalid]

click add news()

call navigation to add news()

input news info()

submit()

validate info()

error()

send news info()

addNews(news) :boolean

addNews(news) :boolean

success()

Hình 4-12 Lược đồ Sequence cho Usecase Add news

Page 76: BaoCaoEJB

Modify an availale newssd modify av ailable news

News Manager

NewsManagement

pageNewsController

Update newspage

:NewsBean

:News

alt

[invalid]

loop

[invalid]

click modify news()

call update news()

loadNews(newsID) :News

loadNews(newsID) :News

modify news info()

submit()

validate()

error()

send news info()

updateNews(news) :boolean

updateNews(news) :boolean

return()

success()

Hình 4-13 Lược đồ Sequence cho Usecase Modify an available news

Page 77: BaoCaoEJB

Delete an availale newssd delete av ailable news

News Manager

:NewsBean

:News

NewsManagement

pageNewsController

select news()

click delete()

call deleteNews method()

deleteNews(List<News> news) :boolean

deleteNews(List<News> news) :boolean

success()

Hình 4-14 Lược đồ Sequence cho Usecase Delete an available news

Quản lý giỏ hàng Add product to cart

sd add product to cart

:patron

Cart page

:CartControllerProductDetailpage

CartItem

alt av ailable

[true]

[false]

add product to cart()

sendProductID()

checkAvailabil ity(productID) :boolean

updateQuantity(cart) :boolean

addProduct(cart) :boolean

display()

Hình 4-15 Lược đồ Sequence cho Usecase Add product to cart

Delete product from cart

Page 78: BaoCaoEJB

sd delete product from cart

Member

Cart page

CartItemCartController

CartBean

alt

[cancel]

select product to delete()

click delete()

confirm()end()

call delete method()

deleteProduct(product)

deleteProduct(product)

success()

Hình 4-16 Lược đồ Sequence cho Usecase Delete product from cart

Page 79: BaoCaoEJB

Place an ordersd Place an order

patron

frmCartManager

frmOrder

OrderValidator

info = (name, address, company name, tax code, gender, phone, cellphone, email, Identified Code, check type, transport type, requirements)

loop

required : name, address, email, Identified code.valid: email, identified code.

opt

opt

Place an order()

CreateForm()

Enter infos ()

validate info()

send Email()

verify email()email verifying result()

invalid inputs()

correct infos()

erase()

Send oder()

Show infos()

confirm()

Save order()

return result()return result()

Hình 4-17 Lược đồ Sequence cho Usecase Place an order

Page 80: BaoCaoEJB

4.1.3.5Class Diagram

Lược đồ lớp cho chức năng Manage product :

class product

Serializable

Product

- accessories: String- accessoriesSet: List<Accessory>- article: String- articleImages: List<ArticleImage>- cellRight: boolean- check: boolean- company: Company- createdate: Date- currentCount: int- detailOrderProducts: List<DetailOrderProduct>- fromdate: Date- gender: Boolean- hot: Boolean- id: int- importdate: String- isnew: Boolean- largeImage: String- model: Model- newProduct: boolean- orderCount: int- price: double- productAlbums: List<ProductAlbum>- productClassification: ProductClassification- productEvaluations: List<ProductEvaluation>- productFeatures: List<ProductFeature>- productid: String- productname: String- promotions: List<Promotion>- publish: Boolean- serialVersionUID: long = 1L {readOnly}- slock: Boolean- smallImage: String- specialFeatures: String- status: int- style: Style- todate: Date- updatedate: Date- userCreator: String- userUpdate: String- warranty: String

ProductBean

- em: EntityManager+ LOG: Logger = Logger.getLogge...

+ addArticleImage(ArticleImage) : boolean+ addProduct(Product) : boolean+ addProductAccessory(ProductAccessory) : boolean+ addProductAlbum(ProductAlbum) : boolean+ deleteArticleImage(ArticleImage) : boolean+ deleteProduct(Product) : boolean+ deleteProductAlbum(ProductAlbum) : boolean+ getAllProducts() : List<Product>+ getArticleImages(int) : List<ArticleImage>+ getHotProducts() : List<Product>+ getProductAlbumByImageID(int) : ProductAlbum+ getProductAlbumByProductID(int) : List<ProductAlbum>+ getProductByClassificationID(int) : List<Product>+ getProductByCompanyID(String) : List<Product>+ getProductByID(int) : Product+ getProductByModelID(int) : List<Product>+ getProductByName(String) : List<Product>+ getProductByProductID(String) : Product+ getProductByQuery(String) : List<Product>+ getProductByStyleID(int) : List<Product>+ ProductBean()+ updateProduct(Product) : boolean

«interface»ProductBeanRemote

+ addArticleImage(ArticleImage) : boolean+ addProduct(Product) : boolean+ addProductAccessory(ProductAccessory) : boolean+ addProductAlbum(ProductAlbum) : boolean+ deleteArticleImage(ArticleImage) : boolean+ deleteProduct(Product) : boolean+ deleteProductAlbum(ProductAlbum) : boolean+ getAllProducts() : List<Product>+ getArticleImages(int) : List<ArticleImage>+ getHotProducts() : List<Product>+ getProductAlbumByImageID(int) : ProductAlbum+ getProductAlbumByProductID(int) : List<ProductAlbum>+ getProductByClassificationID(int) : List<Product>+ getProductByCompanyID(String) : List<Product>+ getProductByID(int) : Product+ getProductByModelID(int) : List<Product>+ getProductByName(String) : List<Product>+ getProductByProductID(String) : Product+ getProductByQuery(String) : List<Product>+ getProductByStyleID(int) : List<Product>+ updateProduct(Product) : boolean

ProductController

- classificationBean: ProductClassificationBeanRemote- companyBean: CompanyBeanRemote- featureBean: FeatureBeanRemote- hotProducts: List<Product>- modelBean: ModelBeanRemote- pAccessories: List<Accessory> = new ArrayList<A...- pagingSupport: PagingSupport<Product>- pEvaluationBean: ProductEvaluationBeanRemote- pEvaluationList: List<ProductEvaluation>- pFeatureBean: ProductFeatureBeanRemote- pList: List<Product>- productBean: ProductBeanRemote- productList: List<Product> = new ArrayList<P...- pSearchingBean: ProductSearchingBeanRemote- styleBean: StyleBeanRemote

+ archiveActionEvent(ActionEvent) : void+ deleteActionEvent(ActionEvent) : void+ executeEvaluationAction(ActionEvent) : void+ fi lterProductAction(ActionEvent) : void+ fi lterValueChange(ValueChangeEvent) : void+ findTypeValueChange(ValueChangeEvent) : void+ getCompaniesName() : List<String>+ getModelsName() : List<String>+ getNewProducts() : List<Product>+ getProductClassificationName() : List<String>- getPublishedProducts(List<Product>) : List<Product>+ getStylesName() : List<String>- initFeatureHasSearch() : void- initHotProducts() : void- initProducts() : void+ loadCorrespondenceProduct(ValueChangeEvent) : void+ pageInRowChange(ActionEvent) : void+ paging(ActionEvent) : void+ productActionEvent(ActionEvent) : void+ ProductController()+ publishActionEvent(ActionEvent) : void+ refreshEvaluation() : String+ unArchiveActionEvent(ActionEvent) : void+ unPublishActionEvent(ActionEvent) : void

-productBean

+product

Hình 4-18 Lược đồ lớp cho chức năng Manage product

Page 81: BaoCaoEJB

Lược đồ lớp cho chức năng Manage cart

class News

CartController

- accessoryBean: AccessoryBeanRemote- carts: List<CartItem>- customerId: int = -1- hide: boolean = true+ LOG: Logger = Logger.getLogge...- order: Order- orderBean: OrderBeanRemote- orderHide: boolean- orderShow: boolean- paymentType: PaymentType- paymentTypeId: String- paymentTypes: List<PaymentType>- productBean: ProductBeanRemote- quantity: int = 0- shippingType: ShippingType- shippingTypeId: String- shippingTypes: List<ShippingType>- totalAmount: double = 0

+ addItemToCart() : String+ CartController()+ deleteAllItems() : String+ deleteItems() : String+ goToCart() : String+ goToMainPage() : String+ goToOrder() : String+ previewOrder() : String+ submitOrder() : String+ updateItems() : String

Serializable

DetailOrderAccessory

- accessory: Accessory- count: int- order: Order- price: double- productname: String- total: double

Serializable

DetailOrderProduct

- count: int- order: Order- price: double- product: Product- productname: String- total: double

Serializable

Order

- address: String- customerid: int- customername: String- deliverydate: Date- detailOrderAccessories: List<DetailOrderAccessory>- detailOrderProducts: List<DetailOrderProduct>- email: String- expense: double- id: int- identify: String- orderdate: Date- orderid: String- orther: String- paymentType: PaymentType- phonenumber: String- requirements: String- shippingCost: double- shippingType: ShippingType- staffname: String- status: int- total: double- vat: double

OrderBean

- em: EntityManager

+ addAccessoryDetailOrder(DetailOrderAccessory) : boolean+ addOrder(Order) : boolean+ addProductDetailOrder(DetailOrderProduct) : boolean+ deleteOrder(Order) : boolean+ deleteOrder(int) : boolean+ getAllNewOrders() : List<Order>+ getAllOrderFil lter(String, int, Date, Date, int, int, int, int, int, int, int) : List<Order>+ getAllPaymentType() : List<PaymentType>+ getAllShippingType() : List<ShippingType>+ getDetailOrderAccesssoryByOrderId(int) : List<DetailOrderAccessory>+ getDetailOrderProductByOrderId(int) : List<DetailOrderProduct>+ getOrderByID(int) : Order+ getOrderByOrderId(String) : Order+ getOrdersByStatus(int) : List<Order>+ getPaymentTypeById(int) : PaymentType+ getShippingTypeById(int) : ShippingType+ OrderBean()+ updateOrder(Order) : boolean

«interface»OrderBeanRemote

+ addAccessoryDetailOrder(DetailOrderAccessory) : boolean+ addOrder(Order) : boolean+ addProductDetailOrder(DetailOrderProduct) : boolean+ deleteOrder(Order) : boolean+ deleteOrder(int) : boolean+ getAllNewOrders() : List<Order>+ getAllOrderFil lter(String, int, Date, Date, int, int, int, int, int, int, int) : List<Order>+ getAllPaymentType() : List<PaymentType>+ getAllShippingType() : List<ShippingType>+ getDetailOrderAccesssoryByOrderId(int) : List<DetailOrderAccessory>+ getDetailOrderProductByOrderId(int) : List<DetailOrderProduct>+ getOrderByID(int) : Order+ getOrderByOrderId(String) : Order+ getOrdersByStatus(int) : List<Order>+ getPaymentTypeById(int) : PaymentType+ getShippingTypeById(int) : ShippingType+ updateOrder(Order) : boolean

+detailOrderProducts

0..*

+detailOrderAccessories

0..*

-orderBean

+order

Hình 4-19 Lược đồ lớp cho chức năng Manage cart

Page 82: BaoCaoEJB

Lược đồ lớp cho chức năng Manage News class Cart

NewsBean

- em: EntityManager

+ addNews(TheNews) : int+ deleteNews(int) : boolean+ getAllByFillter(int, int, int, int, int, int, int, int, int, int, int, int) : List<TheNews>+ getAllByPublish(int, int) : List<TheNews>+ getAllByStatus(int, int) : List<TheNews>+ getAllByTitle(int, int) : List<TheNews>+ getAllByUpdateDate(int, int) : List<TheNews>+ getAllByUserUpdate(int, int) : List<TheNews>+ getAllNews() : List<TheNews>+ getAllNewsByType(int) : List<TheNews>+ getAllPublishedNews() : List<TheNews>+ getAllUnpublishNews() : List<TheNews>+ getNewsByID(int) : TheNews+ getNewsPromotionById(int) : NewsPromotion+ NewsBean()+ updateNews(TheNews) : boolean

«interface»NewsBeanRemote

+ addNews(TheNews) : int+ deleteNews(int) : boolean+ getAllByFillter(int, int, int, int, int, int, int, int, int, int, int, int) : List<TheNews>+ getAllByPublish(int, int) : List<TheNews>+ getAllByStatus(int, int) : List<TheNews>+ getAllByTitle(int, int) : List<TheNews>+ getAllByUpdateDate(int, int) : List<TheNews>+ getAllByUserUpdate(int, int) : List<TheNews>+ getAllNews() : List<TheNews>+ getAllNewsByType(int) : List<TheNews>+ getAllPublishedNews() : List<TheNews>+ getAllUnpublishNews() : List<TheNews>+ getNewsByID(int) : TheNews+ getNewsPromotionById(int) : NewsPromotion+ updateNews(TheNews) : boolean

NewsController

- l istAnotherNews: List<TheNews>- listNews: List<TheNews>- newsBeanRemote: NewsBeanRemote- newsList: List<TheNews>- newsManagementBeanRemote: NewsManagementBeanRemote- pagingSupport: PagingSupport<TheNews>- rList: List<TheNews>

+ addNews() : String+ addNewsAction() : String+ applyUpdate() : String+ changeNewsAvatar(ActionEvent) : void+ copyImageUrl() : void+ deleteImage(ActionEvent) : void- deleteImageAfterUpdate(TheNews) : void+ deleteNews() : String- initNews() : void+ NewsController()+ pageInRowChange(ActionEvent) : void+ publichNews() : String+ unpublishNews() : String+ updateAction() : String+ updateNews() : String+ uploadAvatar(ActionEvent) : void+ uploadImage(ActionEvent) : void+ viewNewsDetail() : String

Serializable

NewsImage

- imageid: int- serialVersionUID: long = 1L {readOnly}- status: int- url: String

Serializable

TheNews

- avatar: String- content: String- id: int- isnew: boolean- newsImages: List<NewsImage>- postdate: Date- publish: boolean- quickview: String- serialVersionUID: long = 1L {readOnly}- slock: boolean- status: int- title: String- type: int- updatedate: Date- userCreator: User- userUpdate: User

Serializable

User

- id: int- password: String- roles: List<Role>- serialVersionUID: long = 1L {readOnly}- user: String

-userUpdate-userCreator

-newsBeanRemote

+newsImages

0..*

+theNews

Hình 4-20 Lược đồ lớp cho chức năng Manage News

Page 83: BaoCaoEJB

Lược đồ lớp cho chức năng Manage Order

class Order

Serializable

DetailOrderAccessory

- accessory: Accessory- count: int- order: Order- price: double- productname: String- total: double

Serializable

DetailOrderProduct

- count: int- order: Order- price: double- product: Product- productname: String- total: double

Serializable

Order

- address: String- customerid: int- customername: String- deliverydate: Date- detailOrderAccessories: List<DetailOrderAccessory>- detailOrderProducts: List<DetailOrderProduct>- email: String- expense: double- id: int- identify: String- orderdate: Date- orderid: String- orther: String- paymentType: PaymentType- phonenumber: String- requirements: String- shippingCost: double- shippingType: ShippingType- staffname: String- status: int- total: double- vat: double

OrderBean

- em: EntityManager

+ addAccessoryDetailOrder(DetailOrderAccessory) : boolean+ addOrder(Order) : boolean+ addProductDetailOrder(DetailOrderProduct) : boolean+ deleteOrder(Order) : boolean+ deleteOrder(int) : boolean+ getAllNewOrders() : List<Order>+ getAllOrderFil lter(String, int, Date, Date, int, int, int, int, int, int, int) : List<Order>+ getAllPaymentType() : List<PaymentType>+ getAllShippingType() : List<ShippingType>+ getDetailOrderAccesssoryByOrderId(int) : List<DetailOrderAccessory>+ getDetailOrderProductByOrderId(int) : List<DetailOrderProduct>+ getOrderByID(int) : Order+ getOrderByOrderId(String) : Order+ getOrdersByStatus(int) : List<Order>+ getPaymentTypeById(int) : PaymentType+ getShippingTypeById(int) : ShippingType+ OrderBean()+ updateOrder(Order) : boolean

«interface»OrderBeanRemote

+ addAccessoryDetailOrder(DetailOrderAccessory) : boolean+ addOrder(Order) : boolean+ addProductDetailOrder(DetailOrderProduct) : boolean+ deleteOrder(Order) : boolean+ deleteOrder(int) : boolean+ getAllNewOrders() : List<Order>+ getAllOrderFil lter(String, int, Date, Date, int, int, int, int, int, int, int) : List<Order>+ getAllPaymentType() : List<PaymentType>+ getAllShippingType() : List<ShippingType>+ getDetailOrderAccesssoryByOrderId(int) : List<DetailOrderAccessory>+ getDetailOrderProductByOrderId(int) : List<DetailOrderProduct>+ getOrderByID(int) : Order+ getOrderByOrderId(String) : Order+ getOrdersByStatus(int) : List<Order>+ getPaymentTypeById(int) : PaymentType+ getShippingTypeById(int) : ShippingType+ updateOrder(Order) : boolean

OrderController

- customer: Customer- customerBeanRemote: CustomerBeanRemote- detailOrderAccessory: List<DetailOrderAccessory>- detailOrderProduct: List<DetailOrderProduct>- lOrder: List<Order>- order: Order- orderBeanRemote: OrderBeanRemote- paymentType: int- rOrder: List<Order>- shippingType: int

+ active(ActionEvent) : void+ CustomerNameOrdering(ActionEvent) : void+ DateOrdering(ActionEvent) : void+ deleteOrder(ActionEvent) : void+ EmailOrdering(ActionEvent) : void+ fi l lter(ActionEvent) : void+ goOrderManagent() : String+ OrderController()+ orderIdOrdering(ActionEvent) : void+ orderView() : String+ pageInRowChange(ActionEvent) : void+ PhoneNumberOrdering(ActionEvent) : void+ preview() : String+ resetFil lter(ActionEvent) : void+ StatusOrdering(ActionEvent) : void+ TotalOrdering(ActionEvent) : void+ updateAction() : String+ updateOrder(ActionEvent) : void

-orderBeanRemote

-order

+detailOrderProducts

0..*

+detailOrderAccessories

0..*

+order

Hình 4-21 Lược đồ lớp cho chức năng Manage order

Page 84: BaoCaoEJB

4.1.4 Thiết kế và cài đặt4.1.4.1 Thiết kế và cài đặta. Xác định yêu cầu lưu trữ

Thông tin khách hàng bao gồm địa chỉ email, mật khẩu, các thông tin liên lạc như

tên đầy đủ, tỉnh, thành phố, địa chỉ nhà, số điện thoại, giới tính và ngày tháng năm

sinh. Các khách hàng khác nhau được phân biệt thông qua địa chỉ email, username.

Hệ thống giới thiệu các sản phẩm mới, được mua nhiều cho khách hàng, để làm

việc này, thông tin về số lượng mua, số lượt xem, ngày đăng sẽ được quan tâm.

Thông tin về sách bao gồm mã sách để phân biệt các cuốn sách với nhau, tên sách,

tác giả, số trang, giá thành, giá khuyến mãi, số lượng còn lại..

Thông tin về nhà xuất bản bao gồm tên nhà xuất bản, mã nhà xuất bản

Thông tin về đơn hàng gồm một mã đơn hàng duy nhất dùng phân biệt các đơn

hàng, ngày lập đơn hàng, tổng tiền hóa đơn chưa gồm các khoản phí và thuế, tổng

tiền hóa đơn gồm các khoản phí và thuế, phí vận chuyển và các thông tin trạng thái

hóa đơn như việc hóa đơn đã thanh toán hoàn tất, đang xử lý hay bị hủy.

Thông tin về chương trình khuyến mãi, thời gian khuyến mãi có hiệu lực, thông tin

đánh giá chương trình khuyến mãi.

Thông tin về tin tức của hệ thống, tin tức 24h, tin tức khuyến mãi, bao gồm: tiêu đề, tóm tắt, nội dung, người cập nhật, người đăng tin, ngày đăng tin, ngày cập nhật, trạng thái.

Page 85: BaoCaoEJB

b. Cơ sở dữ liệu

Hình 4.50 : CSDL bán sách online

Page 86: BaoCaoEJB

c. Mô tả chi tiết các bảngBảng tintuc: Quản lý thông tin sản phẩm

STT Tên trường Kiểu dữ liệu Bảng tham chiếu

Mô tả

1 MaSoTinTuc Varchar(20) Khóa chính phân biệt tin tức2 NoiDung Varchar(45) Nội dung tin tức

Bảng 4-16 Bảng tin tức

Bảng tacgia : quản lý thông tin tác giả

STT Tên trường Kiểu dữ liệu Bảng tham chiếu

Mô tả

1 MaSoTacGia Varchar(50) Khóa chính tác giả2 TenTacGia Varchar(45) Tên tác giả3 NgheNghiep Varchar(45) Nghề nghiệp của tác giả4 Bằng cấp Varchar(45) Các bằng cấp của tác giả

Bảng 4-17 Bảng tác giả

Bảng sachtacgia : quản lý thông tin về sách của các tác giả

STT

Tên trường Kiểu dữ liệu Bảng tham chiếu

Mô tả

1 MaSoSach Varchar(20) Khóa chính2 MaSoTacGia Varchar(20) Mã số tác giả3 Tacgia_MaSoTacGia Varchar(50) tacgia Tham chiếu tới bảng

tác giả4 Sach_MaSoSach Varchar(50) sach Tham chiếu tới bảng

sách5 Sach_chungloai_MaSoChungLoai Varchar(45) sach Tham chiếu tới bảng

sách

Bảng 4-17 Bảng liên kết

Bảng lienket: quản lý các liên kết liên quan

STT Tên trường Kiểu dữ liệu Bảng tham chiếu

Mô tả

1 MaSoLienKet Varchar(20) Khóa chính

Page 87: BaoCaoEJB

2 TenLienKet Varchar(45) Tên liên kết3 URL liên kết Varchar(45) URL của liên kết4 ThuTu DECIMAL(18,0) Thứ tự của các liên kết

Bảng 4-19 Bảng liên kết

Bảng chungloai: quản lý thể loại sách

STT Tên trường Kiểu dữ liệu Bảng tham chiếu

Mô tả

1 MaSoChungLoai Varchar(45) Khóa chính2 TenChungLoai Varchar(45) Tên chủng loại

Bảng 4-20 Bảng liên kết

Bảng nhacungchap: quản lý nhà cung cấp

STT Tên trường Kiểu dữ liệu Bảng tham chiếu

Mô tả

1 MaSoNCC Varchar(20) Khóa chính2 TenNCC Varchar(50) Tên nhà cung cấp3 DiaChiNCC Varchar(45) Địa chỉ4 SoDienThoai DECIMAL(10,0) Số điện thoai5 TenNguoiDaiDien Varchar(45) Tên người đại diện

Bảng 4-21 Bảng nhà cung cấp

Bảng chitietphieunhap: quản lý các liên kết liên quan

STT Tên trường Kiểu dữ liệu Bảng tham chiếu

Mô tả

1 MaSoPhieuNhap Varchar(20) Khóa chính2 MaSoSach Varchar(20) Mã số sách3 SoLuong DECIMAL(10,0) Số lượng nhập4 DonGia Float Đơn giá5 Sach_MaSoSach Varchar(50) sach Khóa ngoại6 Sach_chungloai Varchar(45) chungloai Khóa ngoại

Page 88: BaoCaoEJB

7 Sach_loaisach Varchar(50) sach Khóa ngoại8 Phieunhap_maso Varchar(20) phieunhap Khóa ngoại

Bảng 4-22 chi tiết phiếu nhập

Bảng sach: quản lý sách

STT Tên trường Kiểu dữ liệu Bảng tham chiếu

Mô tả

1 MaSoSach Varchar(50) Khóa chính2 MaSoChungLoai Varchar(45) Mã chủng loại sách3 MaSoLoaiSach Varchar(45) Mã số loại sách4 MaSoNXB Varchar(45) Nhà xuất bản5 TenSach Varchar(45) Tên sách6 MoTa Varchar(1000) Trích đoạn7 GiaNhap DECIMAL(10,0) Giá nhập về

Bảng 4-23 Bảng sách

Bảng phieunhap: quản lý phiếu nhập

STT Tên trường Kiểu dữ liệu Bảng tham chiếu

Mô tả

1 MaSoPhieuNhap Varchar(20) Khóa chính2 MaSoNguoiDung Varchar(20) Mã số người nhập3 MaSoNCC Varchar(20) Mã số nhà cung cấp sách4 NgayNhap DateTime Ngày nhập5 DienDai Varchar(45) Trích đoạn6 Nguoidung_MaSo Varchar(20) nguoidung Tham chiếu tới nguoidung7 Nhacungcap_MaSo Varchar(20) nhacungcap Tham chiếu tới nhà cung cấp

Bảng 4-24 Bảng sách

Bảng nguoidung: quản lý người dùng

STT Tên trường Kiểu dữ liệu Bảng tham chiếu

Mô tả

Page 89: BaoCaoEJB

1 MaSoNguoiDung

Varchar(20) Khóa chính

2 HoTen Varchar(45) Họ tên người dùng3 GioiTinh Varchar(5) Giớ tính4 NgaySinh DateTime Ngày sinh5 TinhTP Varchar(45) Tỉnh/TP6 DiaChi Varchar(45) Địa chỉ7 DienThoai DECIMAL(18,0) Số điện thoại8 Email Varchar(45) Email9 TenDangNhap Varchar(45) Tên đăng nhập10 MatKhau Varchar(45) Mật khẩu11 Nhom DECIMAL(18,0) Nhóm người dùng

Bảng 4-25 Bảng người dùng

Bảng ngonngu: quản lý ngôn ngữ của sách

STT

Tên trường Kiểu dữ liệu Bảng tham chiếu

Mô tả

1 MaSoNgonNgu Varchar(20) Khóa chính2 TenNgonNgu Varchar(45) Tên ngôn ngữ3 Chitietsach_MSCTS Varchar(20) chitietsach Tham chiếu tới bảng chi tiết

sách

Bảng 4-26 Bảng ngôn ngữ

Bảng chitietsach: quản lý chi tiết sách

STT

Tên trường Kiểu dữ liệu Bảng tham chiếu

Mô tả

1 MaSoChiTietSach Varchar(20) Khóa chính2 MaSoSach Varchar(45) Tên ngôn ngữ3 MaSoNgonNgu Varchar(20) Tham chiếu tới bảng chi tiết

sách4 SoTrang DECIMAL(18,0) Số trang sách5 SoChuong DECIMAL(18,0) Số chương trong sách6 DonViTinh Varchar(10) Đơn vị tính7 NamXuatBan DateTime Năm xuất bản8 KichThuoc Varchar(50) Kích thước

Page 90: BaoCaoEJB

9 TrongLuong DECIMAL(18,0) Trọng lượng10 Sach_MaSoSach Varchar(50) sach Tham chiếu tới bảng sách11 Sach_chungloai Varchar(50) sach Tham chiếu tới bảng sách

Bảng 4-27 Bảng chi tiết sách

Bảng donhang: quản lý đơn hàng

STT

Tên trường Kiểu dữ liệu Bảng tham chiếu

Mô tả

1 MaSoDonHang Varchar(20) Khóa chính2 MaSoNguoiDung Varchar(45) Tên người đăt3 NgayDat DateTime Ngày đặt hàng4 NgayGiao DateTime Ngày giao hàng5 TenNguoiNhan Varchar(45) Tên người nhận6 TinhTP Varchar(45) Tỉnh/TP7 DiaChi Varchar(45) Địa chỉ8 GhiChu Varchar(45) Ghi chú khi giao hàng9 Nguoidung_MaSo Varchar(20) nguoidung Tham chiếu tới bảng

nguoidung

Bảng 4-28 Bảng đơn hàng

Bảng hoadonbanhang: quản lý hóa đơn bán hàng

STT

Tên trường Kiểu dữ liệu Bảng tham chiếu

Mô tả

1 MaSoHoaDon Varchar(20) Khóa chính2 MaSoDonHang Varchar(20) Mã số đơn hàng3 MaSoNguoiDung Varchar(20) Mã số người dùng4 NgayLapHD DateTime Ngày lập hóa đơn5 DienDai Varchar(1000) Chú thích6 TongTien FLOAT Tổng số tiền7 Donhang_maso Varchar(20) donhang Mã số đơn hàng8 Donhang_nguoidu

ng_masoVarchar(20) donhang Tham chiếu tới mã số người

dùng trong bảng nguoidung9 Nguoidung_maso Varchar(20) nguoidung Tham chiếu tới bảng

Page 91: BaoCaoEJB

nguoidung

Bảng 4-29 Bảng hóa đơn báng hàng

Bảng nhaxuatban: quản lý nhà xuất bản

STT

Tên trường Kiểu dữ liệu Bảng tham chiếu

Mô tả

1 MaSoNXB Varchar(20) Khóa chính2 TenNXB Varchar(45) Tên nhà xuất bản3 DiaChi Varchar(45) Địa chỉ4 SoDienThoai DECIMAL(10,0) Số điện thoại5 Fax DECIMAL(10,0) Số fax6 Email Varchar(45) Email7 Sach_MaSoSach Varchar(45) sach Tham chiếu tới bảng sach8 Sach_chungloai_

MaSoChungLoaiVarchar(45) sach Tham chiếu tới bảng sach

Bảng 4-30 Bảng nhà xuất bản

Page 92: BaoCaoEJB

4.1Thiết kế giao diện chương trình

Page 93: BaoCaoEJB

CHƯƠNG 5 : KẾT LUẬN

5.1 Kết luận5.2 Hạn chế

Vì thời gian giới hạn, khối lượng kiến thức nghiên cứu lớn, nhóm nghiên cứu vẫn còn thiếu sót một số tính năng trong website.

Vì khả năng nghiệp vụ mua bán hàng còn hạn chế, đa phần tìm hiểu qua các website bán hàng phổ biến trên mạng, nhóm nghiên cứu gặp không ít khó khăn về nghiệp vụ trong quá trình phân tích, thiết kế cho hệ thống, nên hệ thống vẫn chưa tối ưu trong tổ chức, một số chức năng mang tính chủ quan của người thiết kế. Kinh nghiệm phân tích thị trường, thị hiếu tiêu dùng của khách hàng còn quá hạn chế nên việc xây dựng tập mẫu cho mạng nơ-ron mang tính chủ quan cao, chưa chính xác lắm.

Page 94: BaoCaoEJB

CHƯƠNG 6 : HƯỚNG PHÁT TRIỂN

Nhóm nghiên cứu đề tài xin nêu lên một vài điểm phát triển đề tài sau này:

Phân tích các nghiệp vụ mua hàng và bán hàng chi tiết và sâu hơn để tạo ra sự

chuyên nghiệp hơn cho website và hỗ trợ tối đa nhu cầu người dùng. Đặc biệt là phần

quản lý của website, sẽ bổ sung thêm một số chức năng còn thiếu như thông kê đơn đặt

hàng, thống kê các mặt hàng bán chạy trong tháng, thống kê bán hàng, quản lý quảng cáo

trên website.

……….

Page 95: BaoCaoEJB

CHƯƠNG 7 : TÀI LIỆU THAM KHẢO

[1]. Antonio Goncalves, Beginning Java™ EE 6 Platform with GlassFish™ 3, Apress,

2009.

[2]. Rima Patel Sriganish, Gerald Brose, Micah silverman, Mastering Enterprise

JavaBeans 3.0, Wiley, 2006.

[3]. Kent Ka Iok Tong, Beginning JSF™ 2 APIs and JBoss® Seam, Apress, 2009.

[4]. Thạc sĩ Nguyễn Minh Đạo, Luận văn cao học: Mạng neural network với thuật giải

lan truyền ngược kết hợp luật Heurisic, tháng 05 năm 2002.

[5]. http://www.emforge.org/wiki/ImplementingCaptchaWithJS

[6]. http://code.google.com/p/mudim/

[7]. http://www.javaranch.com/

[8]. http://courses.coreservlets.com/Course-Materials/java-ee.html

[9]. http://www.roseindia.net/ejb/