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
Trang 1Xin 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
Trang 2TÓ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
MỤC LỤC
Trang 3CHƯƠNG 1 GIỚI THIỆU
Trang 41.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
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ễ
Trang 5dà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…
CHƯƠNG 2 CÁC CÔNG TRÌNH LIÊN QUAN ĐẾN ĐỀ TÀI
Trang 6Vớ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
CHƯƠNG 3 PHƯƠNG PHÁP LUẬN
3.1 Tổng quan về J2EE
3.1.1 J2EE là gì ?
Trang 7Java 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 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ủ ứ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
Trang 8Hình 3 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
Hình 3 Containers và Components
J2EE có các loại container như :
Trang 9• 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ộ
• 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
Trang 10• 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)
Trang 11Hình 3.4 Mô hình application server
Trang 12Enterprise 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
Trang 13Ví dụ :
(showSomething="Hi! How r you")
public void anymethod() {
}
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(){
Trang 14public void anymethod{
…
}
• Đị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ố
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();
}
Trang 15public 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
(2)TestJavaApplication1buildclasses
D:tempNew Folder
(2)TestJavaApplication1srctestmyannotation
Test_Deprication.java:27:
warning: [deprecation] showSomething() in
test.myannotation.Deprecated_method has been deprecated
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
@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
Trang 16 @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ênpublic class Test_Annotations {public static void main(String arg[]) {new Test_Annotations().doTestElement();
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 {
Trang 17public class Test_Annotations {
public static void main(String arg[]) {
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ụ :
Trang 18public Class ChildObjectDemo {
}
public class ChildObjectDemo implements ParentObjectDemo {
public boolean isInherited() {
Trang 19Hình 3.5 : Session bean tương tác với client
1. Các loại 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ớ
gọi business method từ client
Stateless Session Bean yêu cầu ít resource nên còn gọi là lightweight bean
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
Trang 20dù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
• 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
Trang 21EJB 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
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ở
Trang 22và đặ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
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()
Trang 23Khi 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
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
thực thể bean
thể bean
Trang 24• 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 đượ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
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
Trang 25để 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 :
xử lý xong và trả về kết quả, sau đó, client sẽ tiếp tục xử lý
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
nào nếu server hoặc mạng(network) xảy ra lỗi
: 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
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
JMS APIs đóng vai trò quan trọng trong giao thức RMI-IIOP
Trang 26Hình 3.8 Hoạt động của JMSCá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
• 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
Trang 274. 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à
• 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)
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
• 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
Trang 28• 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:
Hình 3.9 Kiến trúc JPA
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
Trang 29Giao 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 :
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
Trang 30Cũ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ử
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
Trang 31Hình 3.10 Tổng quan kiến trúc JSFHì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.
Trang 32Hì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"/>
Trang 33Hì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
Trang 34Hì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
Trang 35Pha 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
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ó
Trang 36thể 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ủ :
Trang 37Hì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 :
Trang 38Hì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ả
Trang giỏ hàng:
Trang 39Hì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
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
Trang 40 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
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: