Đề tài Nghiên cứu công nghệ J2EE Khảo sát Session Bean và thiết kế mô hình Web

Tài liệu Đề tài Nghiên cứu công nghệ J2EE Khảo sát Session Bean và thiết kế mô hình Web: MỤC LỤC DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT A API Application Program Interface C CGI Common Gateway Interface CSDL Cơ Sở Dữ Liệu D DHTML Dynamic Hypertext Markup Language E EJB Enterprise Java Bean H HTTP Hypertext Transfer Protocol HTML Hypertext Markup Language I IDE Integrated Drive Electronics J JAF JavaBeans Activation Framework JDBC Java Database Connectivity J2EE Java 2 Enterprise Edition JNDI Java Naming and Directory Interface JSP Java Server Pages JTA Java Transaction API M MOM Message Oriented Middleware R RMI Remote Method Invocation S SQL Structured Query Language X XML Extensible Markup Language DANH MỤC HÌNH VẼ Hình 1.1 Mô hình khách chủ 12 Hình 1.2 Mô hình đa tầng Multi-tier 14 Hình 1.3 J2EE và các trình chứa 15 Hình 1.4 Mô hình Enterprise Java Bean (EJB) 18 Hình 2.1 Khởi tạo môi trường J2EE 28 Hình 2.2 Giao tiếp giữa trình khách và đối tượng EJB 32 Hình 2.3 Chu trình hoạt đông của Stateless Bean 33 Hình 2.4 Sơ đồ trạng thá...

doc76 trang | Chia sẻ: hunglv | Lượt xem: 1201 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Nghiên cứu công nghệ J2EE Khảo sát Session Bean và thiết kế mô hình Web, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
MỤC LỤC DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT A API Application Program Interface C CGI Common Gateway Interface CSDL Cơ Sở Dữ Liệu D DHTML Dynamic Hypertext Markup Language E EJB Enterprise Java Bean H HTTP Hypertext Transfer Protocol HTML Hypertext Markup Language I IDE Integrated Drive Electronics J JAF JavaBeans Activation Framework JDBC Java Database Connectivity J2EE Java 2 Enterprise Edition JNDI Java Naming and Directory Interface JSP Java Server Pages JTA Java Transaction API M MOM Message Oriented Middleware R RMI Remote Method Invocation S SQL Structured Query Language X XML Extensible Markup Language DANH MỤC HÌNH VẼ Hình 1.1 Mô hình khách chủ 12 Hình 1.2 Mô hình đa tầng Multi-tier 14 Hình 1.3 J2EE và các trình chứa 15 Hình 1.4 Mô hình Enterprise Java Bean (EJB) 18 Hình 2.1 Khởi tạo môi trường J2EE 28 Hình 2.2 Giao tiếp giữa trình khách và đối tượng EJB 32 Hình 2.3 Chu trình hoạt đông của Stateless Bean 33 Hình 2.4 Sơ đồ trạng thái của Stateless Bean 33 Hình 2.5 Sơ đồ trình tự của Stateless Bean 34 Hình 2.6 Chu trình hoạt động của Stateful Bean 40 Hình 2.7 Sơ đồ trạng thái của Stateful Bean 41 Hình 2.8 Sơ đồ trình tự của Stateful Bean 42 Hình 6.1 Mô hình Use Case tổng quát của hệ thống 52 Hình 6.2 Phân rã Use Case Tim kiem 53 Hình 6.3 Phân rã Use Case Quan tri sách 53 Hình 6.4 Phân rã Use Case Quan tri don hang 54 Hình 6.5 Phân rã Use Case Quan tri thanh vien 54 Hình 6.6 Biều đồ trình tự cho Use Case Dang nhap 55 Hình 6.7 Biểu đồ trình tự cho Use Case Dat hang 55 Hình 6.8 Biểu đồ trình tự cho Use Case Tim kiếm 56 Hình 6.9 Biểu đồ trình tự cho Use Case Danh gia sach 56 Hinh 6.10 Biểu đồ trình tự cho Use Case Them sach moi 57 Hình 6.11 Biểu đồ trình tự cho Use Case Xem don hang 57 Hình 6.12 Biểu đồ trình tự cho Use Case Xoa don hang 58 Hình 6.13 Biểu đồ trình tự cho Use Case Xem thanh vien 58 Hình 6.14 Biểu đồ trình tự cho Use Case Xoa thanh vien 59 Hình 6.15 Biểu đồ lớp - đối tượng chi tiết 59 Hình 6.16 Bảng chúa các đề mục cho trang chủ 60 Hình 6.17 Bảng chúa các chi tiết đề mục cho trang chủ 60 Hình 6.18 Bảng danh mục các thể loại sách 60 Hình 6.19 Bảng danh mục chi tiết nội dung các tựa sách 60 Hình 6.20 Bảng danh mục chứa thông tin thành viên 61 Hình 6.21 Bảng chứa đơn đặt hàng 61 Hình 6.22 Bảng chứa chi tiết đơn hàng 61 Hình 6.23 Bảng chứa thông tin đánh giá của khách hàng 61 Hình 6.24 Bảng chứa các thể loại credit card 62 Hình 6.25 Bảng chứa các thông tin về giỏ hàng 62 Hình 6.26 Mô hình quan hệ của hệ thống 62 Hình 6.27 Mô hình hoạt động của Web site 63 Hình 7.1 Trang chủ 64 Hình 7.2 Trang đăng nhập 65 Hình 7.3 Trang đăng ký thành viên 66 Hình 7.4 Trang xem chi tiết sách 67 Hình 7.5 Trang giỏ hàng 68 Hình 7.6 Trang thanh toán 69 Hình 7.7 Trang tạo hóa đơn 70 Hình 7.8 Trang quản trị sách 71 Hình 7.9 Trang quản trị đơn hàng 72 Hình 7.10 Trang quản trị thành viên 73 MỞ ĐẦU Sự phát triển như vũ bão của hệ thống mạng nhất là mạng Internet đã khiến cho máy tính trở nên gần gũi và phục vụ đắc lực cho con người hơn. Tuy nhiên bên cạnh đó, một thách thức đặt ra cho các nhà phát triển ứng dụng là lập trình mạng ngày càng trở nên phức tạp. Mô hình lập trình đơn lẻ truyền thống đã được thay đổi rất nhiều. Chương trình ứng dụng đòi hỏi sự tương tác từ nhiều phía người dùng, chia sẻ tài nguyên, kết nối từ xa, liên kết giao tác, phân tán dữ liệu…Với những yêu cầu trên mô hình khách/chủ đã ra đời. Mô hình khách chủ đã tỏ ra rất hiệu quả trong thời gian dài. Tuy nhiên cả máy khách và máy chủ đều bị quá tải bởi độ phức tạp và yêu cầu của người dùng. Tất cả các yêu cầu trên đã làm phát sinh mô hình phát triển ứng dụng đa tầng (multi – tier). Các ứng dụng xử lý không còn được cài đặt trên máy khách mà được cài đặt trên một máy chủ. Mục tiêu là làm cho máy khách trở nên gọn nhẹ, dễ cấu hình, dễ thay đổi phía máy chủ, nếu chúng ta cần thay đổi mã nguồn của ứng dụng, chúng ta chỉ cần thay đổi trên máy chủ, tất cả các trình khách khi kết nối vào máy chủ chạy ứng dụng sẽ luôn được phục vụ với phiên bản chương trình mới nhất. Web là một ví dụ điển hình nhất của mô hình ứng dụng đa tầng. Trình chủ Web nằm trên một máy chủ , trình khách chỉ cần dùng trình duyệt (web browser) kết nối vào máy chủ và có thể truy cập được mọi thông tin cũng như dịch vụ. Trình chủ sử dụng Java Servlet, trang JSP hay các ứng dụng CGI (Common Gateway Interface) để kết nối với cơ sở dữ liệu, đối tượng phân tán RMI (Remote Method Invocation-nằm trên một máy chủ khác) xử lý tính toán và trả về kết quả cho trình khách thông qua các trang Web tĩnh. Mô hình đa tầng đã phân rã chức năng một cách cụ thể, cho phép ứng dụng chạy trên nhiều máy chủ khác nhau. Dễ dàng cho người phát triển, nhà cung cấp cũng như người sử dụng trên mạng diện rộng nhất là mạng Internet. Đó là lý do tại sao các nhà phát triển đều mong muốn hướng đến việc thiết kế ứng dụng Web. Trong ứng dụng đa tầng, giao tiếp người dùng được đặt trên máy cục bộ, trong khi đó logic của ứng dụng được chạy trong tầng giữa trên một server. Tầng cuối cùng vẫn đóng vai trò lưu trữ dữ liệu. Khi logic của một ứng dụng cần cập nhật, thay đổi làm cho phần mềm của tầng giữa trên server, rất đơn giản cho việc quản lý cập nhật. EJB chứa những logic nghiệp vụ của ứng dụng, nên có thể nói EJB chính là phần lõi của hầu hết các ứng dụng phân tán cho enterprise. Kiến trúc Enterprise Java Bean mà Sun đưa ra từ phiên bản Java 1.2 là mô hình lập trình đối tượng rất hiệu quả cho các ứng dụng mạng Java. Được sự cho phép của cô Phan Thị Hà, thông qua đồ án tốt nghiệp : Nghiên cứu công nghệ J2EE Khảo sát Session Bean và thiết kế mô hình Web em xin được nêu lên một số khái niệm cũng như kỹ thuật lập trình mới về kiến trúc phân tầng đang được đưa vào sử dụng rất rộng rãi trong nền công nghiệp phần mềm hiện nay. Các vấn đề chính mà đồ án tốt nghiệp này đề cập đến là : Mô hình khách/chủ và mô hình đa tầng trong Enterprise Java Bean. Tìm hiểu mô hình hoạt động của Bean bên trong trình chứa (container). Xây dựng và triệu gọi thành phần Bean mà cụ thể là Session Bean. Sử dụng trình đóng gói deploytool. Xây dựng mô hình web ứng dụng công nghệ EJB Nội dung của đồ án được xây dựng thành 2 phần: Phần 1: Khảo sát công nghệ Chương 1 Mô hình lập trình đa tầng với J2EE Chương 2 Triển khai đối tượng Bean EJB Chương 3 Tổng kết Phần 2: Xây dựng hệ thống bán sách trực tuyến ứng dụng công nghệ EJB Chương 4 Đặt vấn đề Chương 5 Đặc tả yêu cầu hệ thống Chương 6 Phân tích và thiết kế hệ thống Chương 7 Thực hiện bài toán Cuối cùng là đánh giá, kết luận những kết quả đạt được, những hạn chế và đề xuất các định hướng tiếp theo cho đồ án. Tuy đã cố gắng rất nhiều, nhưng sự hiểu biết của em còn hạn chế nên không thể tránh khỏi những sai xót, em rất mong nhận được sự góp ý, chỉ bảo của quý thầy cô và các bạn. PHẦN I KHẢO SÁT CÔNG NGHỆ CHƯƠNG 1 MÔ HÌNH LẬP TRÌNH ĐA TẦNG VỚI J2EE MÔ HÌNH KHÁCH CHỦ Sự phát triển của hệ thống mạng nhất là mạng Internet, đã làm vấn đề lập trình mạng ngày càng trở nên phức tạp. Mô hình lập trình đơn lẻ đã được cải thiện rất nhiều, ngày nay chúng ta không đơn thuần ngồi viết những ứng dụng chạy trên một máy duy nhất. Chương trình ứng dụng đòi hỏi sự tương tác từ phía người dùng, chia xẻ tài nguyên, triệu gọi từ xa, liên kết giao tác, phân tán dữ liệu. Với những yêu cầu trên, mô hình khách/chủ (hình 1.1)đã ra đời và tồn tại cho đến ngày nay. Gửi yêu cầu Máy khách (Client) Máy chủ (Server) Cơ sở dữ liệu Trình ứng dụng Đáp ứng yêu cầu Hình 1.1 Mô hình khách chủ Theo mô hình khách/chủ, tất cả các xử lý phức tạp đều được chuyển giao cho máy chủ xử lý, máy khách chỉ đóng vai trò gửi yêu cầu và thể hiện dữ liệu. Mô hình khách/chủ tỏ ra rất có hiệu quả, tuy nhiên cả máy khách và máy chủ ngày càng trở nên quá tải bởi độ phức tạp và yêu cầu của người dùng. Các trình ứng dụng của máy khách trở nên cồng kềnh với vô số trình điều khiển phải cài đặt để kết nối với cơ sở dữ liệu của máy chủ (như ODBC, Oracle Client Driver, MS SQL Driver, MS Access Driver…). Hơn nữa bất kỳ dịch vụ nào của trình chủ đều yêu cầu trình khách phải cài đặt một đơn thể kết nối tương ứng. Do đó mô hình khách/chủ gồm hai tầng dường như không đáp ứng được những yêu cầu hiện nay. MÔ HÌNH ĐA TẦNG Giả sử chúng ta quản lý và phân phối ứng dụng trên 100 máy tính nằm ở nhiều nơi khác nhau. chúng ta cài đặt trình điều khiển kết nối cơ sở dữ liệu SQL Server lên từng máy. Sau một thời gian dài sử dụng, ta muốn chuyển hệ cơ sở dữ liệu SQL Server sang hệ cơ sở dữ liệu Oracle, thì ta phải yêu cầu 100 máy khách cập nhật lại trình điều khiển truy xuất cơ sở dữ liệu Oracle thay cho SQL Server, đó là chưa kể đến cấu hình và kết nối với từng hệ cơ sở dữ liệu là vấn đề không phải đơn giản đối với người dùng. Hoặc khi chúng ta muốn thay đổi mã nguồn của ứng dụng khách, chúng ta phải gửi bản cập nhật hàng chục Mb đến 100 máy khách yêu cầu cập nhật lại chương trình. Tất cả những yêu cầu trên đã làm phát sinh mô hình phát triển ứng dụng đa tầng (multi-tier). Các ứng dụng xử lý không còn được cài đặt trên máy khách mà được cài đặt trên một máy chủ. Mục tiêu là làm cho máy khách trở nên gọn nhẹ, dễ cấu hình, dễ thay đổi phía máy chủ, nếu chúng ta cần thay đổi mã nguồn của ứng dụng, chúng ta chỉ cần thay đổi trên máy chủ, tất cả các trình khách khi kết nối vào máy chủ chạy ứng dụng sẽ luôn được phục vụ với phiên bản chương trình mới nhất. Web là một ví dụ điển hình nhất của mô hình ứng dụng đa tầng. Trình chủ Web nằm trên một máy chủ , trình khách chỉ cần dùng trình duyệt (web browser) kết nối vào máy chủ và có thể truy cập được mọi thông tin cũng như dịch vụ. Trình chủ sử dụng Java Servlet, trang JSP hay các ứng dụng CGI (Common Gateway Interface) để kết nối với cơ sở dữ liệu, đối tượng phân tán RMI (Remote Method Invocation-nằm trên một máy chủ khác) xử lý tính toán và trả về kết quả cho trình khách thông qua các trang Web tĩnh. Mô hình đa tầng đã phân rã chức năng một cách cụ thể, cho phép ứng dụng chạy trên nhiều máy chủ khác nhau. Dễ dàng cho người phát triển, nhà cung cấp cũng như người sử dụng trên mạng diện rộng nhất là mạng Internet. Đó là lý do tại sao các nhà phát triển đều mong muốn hướng đến việc thiết kế ứng dụng Web. J2EE Server Máy khách (Client) Trình chủ Web (Web Server) Servlet,JSP, CGI, ASP… Mạng Trình ứng dụng Dịch vụ Web Mạng JNDI, JDBC, JTS, JMS… Object Database Server Object Trình chứa (container) Cơ sở dữ liệu Mạng Môi trường EJB Hình 1.2 Mô hình đa tầng Multi-tier Mô hình ứng dụng đa tầng này dựa trên nền tảng J2EE. Một ứng dụng J2EE có thể bao gồm 3 hoặc 4 tầng nhưng những ứng dụng J2EE thường được xem là 3 tầng vì nó được phân tán trên 3 vị trí : Máy khách (Client Machine), máy chủ J2EE (J2EE Server Machine), và máy chủ cơ sở dữ liệu (Database Server Machine) 1.3 J2EE VÀ EJB 1.3.1 J2EE 1.3.1.1 Khái niệm J2EE Là một trong 3 platform của Java .J2ME ,J2SE.J2EE. Nó đặt các Enterprise API của Java lại với nhau và gói chúng lại thành một platform phát triển hoàn chỉnh cho việc triển khai các lớp enterprise trong Java phía máy chủ. Nhiệm vụ của J2EE là cung cấp một platform độc lập, linh động, đa người dùng, bảo mật.cho việc triển khai phía máy chủ trong ngôn ngữ lập trình Java. J2EE là một đặc tả , không phải là một sản phẩm .Nó chỉ ra các quy tắc ràng buộc mọi người phải nhất trí khi viết phần mềm enterprise. 1.3.1.2 Kiến trúc trình chứa J2EE Hình 1.3 J2EE và các trình chứa Trình chứa là nơi cung cấp môi trường hoạt động và là nơi giao tiếp giữa các thành phần. Trước khi một thành phần Web, Enterprise Bean hay thành phần ứng dụng khách có thể được thực thi nó phải được tập hợp lại trong một Module và được triển khai đến trình chứa của nó. Tiến trình tập hợp bao gồm các thiết lập đặc tính của trình chứa cho mỗi thành phần trong ứng dụng J2EE và cho chính ứng dụng J2EE. Những tùy biến thiết lập trình chứa hổ trợ cơ bản được cung cấp bởi Server J2EE, bao gồm những dịch vụ như : bảo mật, quản lý giao tác, tra cứu thao tác định danh và thư mục Java (Java Naming and Directory Interface), và khả năng kết nối từ xa. Quá trình triển khai và cài đặt những thành phần ứng dụng J2EE trong trình chứa J2EE được mô tả trong hình trên (hình 1.3). Trong đó : J2EE Server : là phần chạy thực của một sản phẩm J2EE. Server J2EE cung cấp trình chứa EJB và Web. Trình chứa EJB : quản lý việc thực thi của Enterprise Bean cho những ứng dụng J2EE. Enterprise Bean và trình chứa của nó chạy trên Server J2EE. Trình chứa Web : Quản lý việc thực thi và những thành phần Servlet cho những ứng dụng J2EE. Những thành phần Web và các ứng dụng của nó chạy trên Server J2EE. Trình chứa ứng dụng J2EE : quản lý việc thực thi những thành phần ứng dụng của Client. Những ứng dụng Client và trình chứa của nó chạy trên máy Client. Trình chứa Applet : quản lý việc thực thi của các Applet. Bao gồm một trình duyệt Web và Java Plug-in chạy trên cùng máy Client. 1.3.1.3 Các API của J2EE Sau đây là một số các API thông dụng của J2EE: Kỹ thuật Enterprise Java Bean: Một thành phần Enterprise Java Bean hay Enterprise Bean, là thân mã lệnh có các field và các phương thức để thực thi các Module của các logic nghiệp vụ. Chúng ta có thể nghĩ Enterprise Bean như một khối xây dựng mà có thể sử dụng riêng lẻ hoặc với các Enterprise Bean khác để thực thi logic nghiệp vụ trên server J2EE. Có hai loại EJB chính đó là : Bean thao tác và Bean thực thể. Ngoài ra còn có Message-Driven Bean là một điểm mới trong chuẩn EJB 2.0. Kỹ thuật Java Servlet: tương tác với Web client thông qua cơ chế request-response. Cơ chế này hoạt động dựa trên giao thức HTTP Kỹ thuật Java Server Page: dùng để xây dựng các ứng dụng có chứa nội dung Web động như HTML, DHTML, XML. Java Message Service: là một chuẩn message cho phép các thành phần ứng dụng J2EE tạo, gởi, nhận và đọc các message. Nó là một API để giao tiếp với Message Oriented Middleware (MOM) cho phép truyền nhận message theo cơ chế point-to-point và publish/subcriber. Java Transaction API (JTA): là một tập API cho phép quản lý các giao tác. Ứng dụng có thể sử dụng JTA để Start, Commit hoặc hủy bỏ giao tác. Java Mail API: các ứng dụng J2EE sử dụng Java Mail API để gởi email thông báo. Java Mail API có 2 phần : một giao tiếp mức ứng dụng được sử dụng bởi các thành phần ứng dụng để gởi thư, và một giao tiếp trình cung cấp dịch vụ. Nền J2EE bao gồm Java mail với một trình cung cấp dịch vụ cho phép các thành phần ứng dụng gởi thư Internet. JavaBeans Activation Framework (JAF): tập các API được sử dụng bởi các package khác như Java mail…, chúng ta có thể dùng JAF để xác định kiểu dữ liệu, đóng gói truy cập đến dữ liệu, mở rộng những tác vụ dựa trên những dữ liệu đó và khỏi tạo một Bean tương ứng để thực hiện các tác vụ đó. Java Database Connectivity (JDBC) API: JDBC cho phép ta gọi các câu lệnh SQL từ các phương thức của ngôn ngữ lập trình java. Chúng ta cũng có thể sử dụng JDBC API từ một Servlet hay một trang JSP để truy xuất CSDL một cách trực tiếp mà không cần thông qua enterprise bean. JDBC API có 2 phần : một giao tiếp mức ứng dụng được sử dụng bởi các thành phần ứng dụng để truy xuất một CSDL, và một giao tiếp trình cung cấp dịch vụ để đính kèm một trình điều khiển JDBC cho nền J2EE. Java Naming and Directory Interface (JNDI): một interface duy nhất dùng để truy cập những kiểu dịch vụ khác nhau về định danh và thư mục 1.3.2 EJB 1.3.2.1 Khái niệm Đó là một thành phần phần mềm server-side được triển khai trong môi trường đa phân tán. 1.3.2.2 Mô hình EJB Hình 1.4 Mô hình Enterprise Java Bean (EJB) Hình 1.4 mô tả mô hình Enterprise Java Bean trong đó: EJB Server: cung cấp dịch vụ hệ thống và quản lý những trình chứa mà Bean chạy. Nó phải làm tồn tại một khả năng truy xuất dịch vụ định danh JNDI và dịch vụ giao tác. Borland Enterprise Server AppServer Edition 6.0 là một ví dụ về Server EJB. Trình chứa EJB: một trình chứa là một hệ thống chạy thực cho một hoặc nhiều Enterprise Bean. Nó cung cấp sự truyền thông giữa Bean và EJB server. Nó cung cấp giao tác, bảo mật và quản lý sự phân phối mạng. Một trình chứa thì gồm có mã và một công cụ sinh mã cho Enterprise Bean. Thông thường, trình chứa cũng cung cấp những công cụ để triển khai Enterprise Bean, có nghĩa là trình chứa có thể giám sát và quản lý ứng dụng. Server EJB và trình chứa EJB kết hợp với nhau cung cấp môi trường cho Bean chạy. Trình chứa cung cấp sự quản lý các dịch vụ đến một hoặc nhiều Bean. Server cung cấp những dịch vụ cho Bean, nhưng trình chứa có sự tương tác giữa Bean đến các dịch vụ này. Mỗi EJB bắt buộc phải có các interface và các class sau: Remote interface: remote interface kế thừa javax.ejb.EJBObject. Remote interface chứa các phương thức nghiệp vụ được gọi từ Client. Nó đóng vai trò như một proxy của EJB. Home interface: home interface kế thừa javax.ejb.EJBHome. Nó đóng vai trò như một mô hình để khởi tạo EJB. Bean class: chứa phần cài đặt của các phương thức khai báo trong remote interface. Bean class kế thừa javax.ejb.SessionBean hoặc javax.ejb.EntityBean hoặc javax.ejb.MessageDrivenBean. 1.3.2.3 Vì sao dùng EJB Mô hình Client đã tồn tại rất lâu và rất phổ biến. ứng dụng Client được cài trên máy cục bộ và truy xuất dữ liệu ở một kho dữ liệu như là hệ thống quản lý cơ sở dữ liệu quan hệ. Mô hình này làm việc tốt cho những mô hình chỉ có vài người dùng. Khi có nhiều người dùng hơn cần truy xuất dữ liệu, những ứng dụng này sẽ không đáp ứng được yêu cầu đó. Bởi vì Client chứa các logic, nó phải được cài đặt trên mỗi máy. Làm cho việc quản lý trở nên rất khó khăn. Dần dần lợi ích của việc chia các ứng dụng thành nhiều hơn hai tầng của mô hình Client/Server càng trở nên rõ ràng. Trong ứng dụng đa tầng, giao tiếp người dùng được đặt trên máy cục bộ, trong khi đó logic của ứng dụng được chạy trong tầng giữa trên một server. Tầng cuối cùng vẫn đóng vai trò lưu trữ dữ liệu. Khi logic của một ứng dụng cần cập nhật, thay đổi làm cho phần mềm của tầng giữa trên server, rất đơn giản cho việc quản lý cập nhật. EJB chứa những logic nghiệp vụ của ứng dụng, nên có thể nói EJB chính là phần lõi của hầu hết các ứng dụng phân tán cho enterprise. EJB có những đặc điểm sau: Chứa nghiệp vụ để thao tác với dữ liệu. Được tạo ra và được quản lý bởi một trình chứa. Xử lý các truy cập của Client. Chứa thuộc tính của giao tác và bảo mật riêng biệt với các Bean. Cung cấp dịch vụ quản lý giao tác, quản lý trạng thái, quay vòng tài nguyên và bảo mật. Các loại EJB Có 2 loại chính đó là Session Bean (Bean thao tác) và Entity Bean (Bean thực thể). Ngoài ra còn có Message – driven bean. Session bean: Nếu đối tượng Bean chỉ thực hiện các hành vi xử lý, tính toán đơn thuần thì chúng được phân lọai thành Bean thao tác (Session Bean). Bean thao tác chỉ có nhiệm vụ phục vụ trình khách, nơi triệu gọi đối tượng. Trong một phiên kết nối, những thao tác nhất thời không đòi hỏi việc thể hiện dữ liệu thường bao gồm : tính toán, phân tích, thống kê… Bean thao tác được chia làm hai lọai đó là : Bean thao tác phi trạng thái (Stateless Bean) và Bean thao tác lưu vết trạng thái (Stateful Bean) Stateless bean: là các thành phần bean không lưu lại trạng thái của giao dịch trước đó để sử dụng cho lần giao dịch sau. Bean thao tác phi trạng thái là đối tượng Bean đơn giản, dễ dùng, dễ thiết kế và quản lý nhất trong tất cả các đối tượng EJB. Stateful bean: Bean thao tác lưu vết trạng thái là các thành phần Bean cần lưu lại vị trí của giao dịch trước đó để sử dụng cho các lần giao dịch sau. Các Bean này thường phục vụ cho các thao tác đòi hỏi phải qua nhiều bước triệu gọi trước khi trả về kết quả cuối cùng Entity bean: Đối tượng thường mô tả một thực thể nào đó trong cuộc sống thực. Bean thực thể cung cấp một đối tượng xem xét dữ liệu trong cơ sở dữ liệu. Thông thường Bean đại diện cho một hàng trong tập hợp các bản của cơ sở dữ liệu quan hệ. Một Bean thực thể thường phục vụ nhiều hơn một Client. Không giống như Bean thao tác, Bean thực thể thì sống lâu hơn. Chúng duy trì một trạng thái tồn tại miễn là dữ liệu còn trong cơ sở dữ liệu, hay nói đúng hơn miễn là còn Client riêng biệt cần đến nó. Việc quản lý dữ liệu của Bean thực thể được chia ra làm hai lọai: Bean thực thể quản lý (Bean - Managed): là các thành phần Bean có khả năng thực thi các câu truy vấn cơ sở dữ liệu ( do lập trình viên xây dựng ) để lấy về dữ liệu mà nó thể hiện. Ví dụ trong phương thức khởi dựng Bean thực thể có thể dùng các câu lệnh SQL như SELECT, INSERT (thông qua JDBC) để tự tìm hoặc thêm mới dữ liệu mà nó thể hiện vào các bản trong cơ sở dữ liệu. Bean thực thể quản lý bởi trình chứa (Container Managed): thành phần Bean có thể không cần phải sử dụng lệnh SQL để tự tìm kiếm hay tạo mới dữ liệu mà nó thể hiện. Thay vào đó đối tượng Bean sẽ tự khai báo trong trường (fields) hay cột (column) dữ liệu tương ứng với các bản (table) trong hệ quản trị cơ sở dữ liệu. Trình chứa sẽ tự động thực hiện công việc truy vấn dữ liệu giúp thành phần Bean. Đối tượng Bean thể hiện dữ liệu theo kiểu này được gọi là Bean thực thể được quản lý bởi trình chứa. Message – Driven Bean: là một chuẩn mới trong EJB 2.0 (EJB 1.1 chỉ định nghĩa 2 lọai đó là Session Bean và Entity Bean). Mục đích của Message-Driven Bean là phục vụ cho nhu cầu về các dịch vụ không đồng bộ của các thành phần. Bởi vì Session Bean và Entity Bean chỉ phục vụ cho các dịch vụ đồng bộ. CHƯƠNG 2 TRIỂN KHAI ĐỐI TƯỢNG BEAN EJB THIẾT KẾ THÀNH PHẦN EJB Chúng ta bắt đầu bằng việc thiết kế thành phần EJB đơn giản nhất. Thành phần Bean phi trạng thái (stateless Bean) mang tên HelloWorld. Bean Hello thực hiện chức năng xuất ra một chuổi “Hello World”. Đối tượng Bean Hello thuộc loại Bean thao tác, bản thân Bean không thể hiện dữ liệu, nó chỉ cung cấp phương thức hello() để xuất ra chuổi “Hello World”. Tất cả các Bean thao tác đều yêu cầu chúng ta cài đặt giao tiếp javax.ejb.SessionBean. 2.1.1 Phát triển Remote Interface Remote interface là lớp giao tiếp để client giao tiếp với Bean và các phương thức được xây dựng bên trong Bean thông qua trình chứa. Sau đây là đặc tả của lớp giao tiếp Hello : package helloworld; public interface Hello extends javax.ejb.EJBObject { public String hello() throws java.rmi.RemoteException; } Theo đặc tả và qui định của kiến trúc Enterprise Java Bean lớp giao tiếp trung gian mà trình chứa sử dụng triệu gọi phương thức của thành phần Bean phải kế thừa từ lớp javax.ejb.EJBObject. 2.1.2 Phát triển Home Interface Tuy nhiên, chúng ta vẫn chưa thể triệu gọi được đối tượng Bean trong trình chứa. Muốn tham chiếu được thành phần Bean từ máy khách, EJB đòi hỏi chúng ta phải tạo lớp “mồi”. Lớp này được gọi là lớp chủ (Home). Từ trình khách, chúng ta gọi lớp chủ để tạo ra và lấy về tham chiếu của giao tiếp Hello. Chúng ta không cần cài đặt lớp chủ , chúng ta chỉ cần đặc tả lớp chủ home là một giao tiếp interface kế thừa lớp javax.ejb.EJBHome. Trong lớp chủ này chúng ta khai báo duy nhất phương thức create() có kiểu trả về là lớp giao tiếp Hello như sau: package helloworld; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome; public interface HelloHome extends EJBHome { Hello create() throws RemoteException, CreateException; } 2.1.3 Phát triển lớp thực thi Bean (Bean Implement Class) Thành phần Bean Hello đặc tả phương thức hello() và kế thừa lớp javax.ejb.SessionBean. Nó có mã nguồn được cài đặt như sau : package helloworld; import javax.ejb.SessionContext; public class HelloBean implements javax.ejb.SessionBean { // Đặc tả phương thức hello() public String hello() { System.out.println("hello()"); return "Hello, World!"; } public void ejbCreate() { System.out.println("ejbCreate()"); } public void ejbRemove() { System.out.println("ejbRemove()"); } public void ejbActivate() { System.out.println("ejbActivate()"); } public void ejbPassivate() { System.out.println("ejbPassivate()"); } public void setSessionContext(SessionContext ctx) { System.out.println("setSessionContext()"); } } Như chúng ta thấy, đối tượng HelloBean của ta cung cấp phương thức hello() để xuất ra chuổi “Hello, World !”. Đây chính là phương thức thể hiện rõ mục đích phục vụ của thành phần Bean. Chúng còn được gọi là các phương thức thể hiện logic nghiệp vụ (business logic) mà Bean cần thực hiện. 2.1.4 Phát triển lớp Client triệu gọi Bean Chúng ta sẽ xây dựng lớp HelloClient để triệu gọi đối tượng HelloBean mà ta đã xây dựng ở trên. Đặc tả cho lớp HelloClient như sau : package helloworld; import javax.naming.Context; import javax.naming.InitialContext; import java.util.Properties; public class HelloClient { public static void main(String[] args) throws Exception { Properties props = System.getProperties(); Context ctx = new InitialContext(props); Object obj = ctx.lookup("HelloBean"); HelloHome home = (HelloHome) javax.rmi.PortableRemoteObject.narrow(obj, HelloHome.class); // Tạo đối tượng hello thuộc Remote Interface // từ đối tượng Home Interface Hello hello = home.create(); // Xuất ra chuỗi “Hello, World !” System.out.println(hello.hello()); hello.remove(); } } Trên đây chúng ta vừa xây dựng các lớp giao tiếp để các client triệu gọi từ xa. Để các client trên cùng máy ảo Java triệu gọi đươc thành phần Bean Hello thì chúng ta cần xây dựng hai lớp : HelloLocal và HelloLocalHome. Cài đặt như sau : Lớp HelloLocal : package helloworld; public interface HelloLocal extends javax.ejb.EJBLocalObject { public String hello(); } Lớp HelloLocalHome : package helloworld; public interface HelloLocalHome extends javax.ejb.EJBLocalHome { HelloLocal create() throws javax.ejb.CreateException; } 2.1.5 Viết file XML mô tả triển khai (Deployment Descriptor) HelloWorld Hello HelloHome HelloBean Stateless Container HelloWorld * Required 2.2 BIÊN DỊCH ĐỐI TƯỢNG EJB Bây giờ chúng ta sẽ biên dịch các lớp của HelloWorld, các bước như sau : · Trong cửa sổ Command ta di chuyển đến thư mục C:\HelloWorld · Đánh vào dòng lệnh sau : javac helloworld\HelloClient.java. Câu lệnh này sẽ biên dịch các file nguồn của enterprise bean. Sau đó ta sẽ thu được các file sau : Hello.class, HelloHome.class và HelloBean.class 2.3 KHỞI TẠO MÔI TRƯỜNG J2EE Để khởi tạo môi trường J2EE chúng ta cần làm các bước sau : · Từ cửa sổ Command Prompt ta chuyển đến thư mục “C:\Sun\AppServer\bin” (thư mục cài đặt của Sun Application Server)bằng câu lệnh : “ CD C:\Sun\AppServer\bin “. · Sau khi chuyển đến thư mục “C:\Sun\AppServer\bin “, ta gõ vào lệnh: “asadmin”. · Khi dấu nhắc chuyển về “asadmin>”, ta có thể dùng lệnh “Help” để hiển thị tất cả các lệnh của asadmin. Để khởi tạo môi trường J2EE ta gõ vào lệnh : “start-appserv”. Để kiểm tra chúng ta có thể dùng trình duyệt Internet Explorer và đánh vào địa chỉ : . Nếu môi trường J2EE đã được khởi tạo thì sẽ xuất hiện một trang như sau : Hình 2.1 Khởi tạo môi trường J2EE · Để stop môi trường J2EE ta dùng lệnh “stop-appsrv”. 2.4 ĐÓNG GÓI THÀNH PHẦN BEAN VỚI TRÌNH ĐÓNG GÓI Để đóng gói thành phần Bean Hello chúng ta chạy tiện ích Wizard Edit Enterprise Bean của tiện ích Deploy Tool. Trong suốt quá trình này wizard sẽ thực thi các tác vụ sau : Tạo mô tả đóng gói của Bean. Đóng gói mô tả đóng gói và các class của Bean trong file EJB_JAR. Chèn file EJB_JAR vào file HelloWorld.ear. Để bắt đầu tiện ích Wizard Edit Enterprise Bean, chọn File -> New -> Edit Enterprise Bean. Tiện ích wizard sẽ thể hiện những hộp thọai sau : Hộp thọai giới thiệu. Nhấn Next. Hộp thọai EJB_JAR : - Nhấn nút có nhãn Create New JAR Module . - Trong Combo box chọn HelloWorldApp. - Trong ô JAR Display Name, gõ vào HelloWorldJAR. - Nhấn vào nút Edit Contends. - Trong nhánh Available Files, chọn build/HelloWorld. - Trong nhánh Available Files chọn các Class. - Nhấn nút Add. - Nhấn OK. - Nhấn Next. Hộp thọai Generate : - Trong Bean Type chọn Stateless Session. - Trong Combo Enterprise Bean Class, chọn helloworld.HelloBean. - Trong ô Enterprise Bean Name, gõ vào HelloBean. - Trong Combo Remote Interface, chọn helloworld.Hello. - Nhấn Next. - Trong hộp thọai Expose as Web Service chọn No và nhấn Next. - Nhấn Finish. 2.5 XÂY DỰNG THÀNH PHẦN WEB (WEB COMPONENT) 2.5.1 Viết một trang JSP triệu gọi thành phần Bean Chúng ta sẽ viết một trang JSP triệu gọi thành phần Bean Hello mà ta đã xây dựng ở trên . Mã chương trình như sau : <% System.setProperty("java.naming.factory.inital","org.jnp.interfaces.NamingContextFactory"); System.setProperty("java.naming.provider.url","127.0.0.1:1099"); try { InitialContext jndiContext=new InitialContext(); HelloHome home=(HelloHome)jndiContext.lookup("Hello"); Hello obj= home.create(); out.println(obj.echo("Hello")); }catch (Exception e){e.printStackTrace();} %> JSP Called Bean Hello 2.5.2 Tạo thành phần Web Để xây dựng thành phần Web cho thành phần Bean Hello, chúng ta dùng tiện ích Deploy tool của Sun Application Server 8.0. Các bước làm như sau : Sau khi khởi động tiện ích Deploy tool ta chọn File-> New -> Web Component. Nhấn Next. Trong WAR Location chọn “Create New Stand-Alone WAR Module”, trong ô WAR Display Name gõ vào : “helloweb”. Nhấn Vào Edit Contents, ta tiến hành đưa tất cả các class và trang JSP vào trong thư mục WEB-INF, nhấn OK. Nhấn Next. Tiến trình sẽ yêu cầu ta chọn loại thành phần (Component Type), chọn JSP Page, nhấn Next để đến bước kế tiếp. Ở bước này, trong JSP File name ta chon : “/Hello.jsp”, Nhấn Next. Nhấn Finish. 2.5.3 Kiểm chứng và đóng gói ứng dụng J2EE Để chứng ứng dụng J2EE, ta dùng tiện ích Verify J2EE của Deploy tool. Chọn tools-> Verify J2EE… Một hộp thoại xuất hiện, trong items to be verified, nhấn nút Add để đưa file “helloweb.war” mà ta vừa tạo vào, nhấn OK. Tiện ích sẽ tiến hành kiểm tra và thông báo kết quả cho ta biết… 2.5.4 Chạy ứng dụng J2EE Sau khi khi tạo thành phần Web, ta khởi động trang Admin Console, chọn Web Aplication, nhấn vào “Launch” của helloweb để chạy ứng dụng. 2.6 PHÁT TRIỂN BEAN THAO TÁC (SESSION BEAN) 2.6.1 Giao tiếp Session Bean Giao tiếp Session Bean định nghĩa các phương thức mà tất cả các Session Bean phải thực thi. Nó thừa kế giao tiếp Enterprise Bean. package javax.ejb; public interface SessionBean extends EnterpriseBean { void setSessionContext(SessionContext sessionContext) throws EJBException, RemoteException; void ejbRemove() throws EJBException, RemoteException; void ejbActivate() throws EJBException, RemoteException; void ejbPassivate() throws EJBException, RemoteException; } 2.6.2 Phát triển Bean thao tác phi trạng thái (Stateless Session Bean) 2.6.2.1 Xây dựng Bean thao tác phi trạng thái Thành phần Bean Hello mà ta xây dựng trên đây là thành phần Bean phi trang thái. Do đó ở đây chúng ta sẽ không nói lại cách xây dựng thành phần Bean Hello mà chúng ta sẽ tìm hiểu về cách giao tiếp giữa trình khách và đối tượng EJB trong trình chứa. J2EE HelloHome JNDI, JDBC, JTS… 1 2 HelloBean Trình Khách 3 4 Hello Trình chứa (container) Hình 2.2 Giao tiếp giữa trình khách và đối tượng EJB Trình khách sử dụng dịch vụ JNDI yêu cầu lấy về tham chiếu đến lớp chủ HelloHome. Trình khách gọi phương thức create() của lớp giao tiếp chủ HelloHome yêu cầu tạo ra tham chiếu đến lớp Hello. Sau khi có tham chiếu đến lớp Hello, trình khách sẽ sử dụng lớp Hello triệu gọi phương thức của đối tượng Bean trong trình chứa container. Trình chứa đón nhận lời triệu gọi từ Hello, thay mặt trình khách gọi đến thành phần Bean thực tế bên trong do trình chứa quản lý. 2.6.2.2 Chu trình hoạt động (Lyfe Cycle) của Bean thao tác phi trạng thái Bởi vì Bean thao tác phi trạng thái không bao giờ thụ động (passivate), nên chu trình họat động của nó chỉ có 2 giai đọan : chưa tồn tại và sẵn sàng để gọi các phương thức của business. Sau đây là chu trình họat động của Bean thao tác phi trạng thái: Chưa tồn tại 1.setSessionContex 3.ejbRemove 2.ejbCreate Sẵn Sàng Hình 2.3 Chu trình hoạt đông của Stateless Bean 2.6.2.3 Sơ đồ trạng thái (State Diagram) Hình 2.4 Sơ đồ trạng thái của Stateless Bean 2.6.2.4 Sơ đồ trình tự cho Bean thao tác phi trạng thái Hình 2.5 Sơ đồ trình tự của Stateless Bean 2.6.3 Phát triển Bean thao tác lưu vết trạng thái (Stateful Session Bean) 2.6.3.1 Xây dựng Bean thao tác lưu vết trạng thái Thành phần Hello Bean mà ta xây dựng trên đây là thành phần Bean EJB thao tác phi trang thái (stateless bean). Có những thành phần Bean đòi hỏi phải lưu giữ thông tin trong suốt quá trình giao dịch, nó được gọi là thành phần Bean lưu vết trạng thái.Sau đây chúng ta sẽ thiết kế thành phần Bean phục vụ thao tác mua bán sách có tên là CartBean. Việc thiết kế thành phần Bean thao tác lưu vết trạng thái, cũng giống như việc thiết kế thành phần Bean thao tác phi trang thái, chúng ta cũng xây dựng các lớp Remote, lớp Home và thành phần Bean. Sau đây là đặc tả các lớp: Lớp Cart: tương tự như lớp Hello nó cũng kế thừa lớp javax.ejb.EJBObject.: import java.util.* import javax.ejb.EJBObject; import java.rmi.RemoteException; public interface Cart extends EJBObject { public void addBook(String title) throws RemoteException; public void removeBook(String title) throws BookException,RemoteException; public Vector getContents() throws RemoteException; } Lớp CartHome: tương tự như lớp HelloHome, lớp CartHome cũng kế thừa lớp EJBHome. import java.io.Serializable; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome; public interface CartHome extends EJBHome { Cart create(String person) throws RemoteException,CreateException; Cart create(String person, String id) throws RemoteException,CreateException; } Lớp CartBean: cũng giống như lớp HelloBean, CartBean là nơi đặc tả các phương thức để client triệu gọi thông qua lớp Cart trong trình chứa. Import java. util.* import javax.ejb.* public class CartBean implements SessionBean { String customerName; String customerId; Vector contents; // Tạo đối tượng EJB dựa vào tên khách hàng public void ejbCreate(String person) throws CreateException { if(person= =null) { throw new CreateException(“Null person not allowned”); } else { customerName=person; } // Tạo đối tượng kiểm tra định danh của khách hàng sử dụng Bean IdVerifier idChecker = new IdVerifier(); If(idChecker.validate(id)) { CustomerId = id; }else { throw new CreateException(“Invalid id:” +id); } contents = new Vector(); } // Thêm tựa sách bào danh mục public void addBook(String title) { contents.addElement(title); } // Loại tựa sách ra khỏi danh mục public void removeBook(String title) throws BookException { boolean result = contents.removeElement(title); if(result = = false) { throw new BookException(title + “not in cart.”); } } // Trả về danh mục sách đã chọn public Vector getContents() { return contents; } public CartBean() { } // Các phương thức triệu gọi bởi trình chứa public void ejbRemove() { System.out.println(“Bean Remove”); } public void ejbActivate() { System.out.println(“Bean Active”); } public void ejbRemove() { System.out.println(“Bean Remove”); } public void ejbPassivate() { System.out.println(“Bean Passivate”); } public void setSessionContext(SessionContext sc) { } } CartBean xây dựng lớp IdVerifier để kiểm tra định danh của khách hàng mua sách như sau: Public class IdVerifier { Public IdVerifier() { } public boolean validate (String id ) { boolean result = = true; for(int i = 0; i < id.length(); i++) { if(Character.isDigit(id.charAt(i)) = = false) result = false; } return result; } } Chúng ta xây dựng lớp ngoại lệ BookException phục vụ cho CartBean phát sinh lỗi khi xóa hết sách trong danh mục như sau: public class BookException extends Exception { public BookException() { } public BookException( String msg) { super(msg); } } Để đưa CartBean vào trình chứa của J2EE, chúng ta biên dịch mã nguồn của Cart.java, CartHome.java, CartBean.java. Chúng ta dùng trình đóng gói deploytool để tạo ra gói .jar chứa thành phần Bean đồng thời chuyển giao Bean cho trình chứa J2EE tương tự như các bước chúng ta đã làm với Session Stateless Bean. Chỉ khác ở chổ ta chọn Bean Type là Stateful. Tiếp theo, chúng ta sẽ viết trình khách triệu gọi đối tượng CartBean, nó được viết như sau: import java.util.* import javax.naming.Context; import javax.naming.InitialContext; import javax.rmi.PortableRemoteObject; public class CartClient { public static void main(String [] args) { try { // Khởi tạo môi trường Context initial = new initialContext(); // Lấy về tham chiếu của lớp chủ CartHome Object objref = initial.lookup(“java:comp/env/ejb/CartBean”); // Chuyển kiểu tham chiếu CartHome home=(CartHome)PortableRemoteObject.narrow (objref,CartHome.class); Cart shoppingCart = home.create(“Mr.Duke”,”123”); // Triệu gọi phương thức Bean để thêm vào tựa sách shoppingCart.addBook(“Java Book”); shoppingCart.addBook(“Programing Visual Basic”); shoppingCart.addBook(“Network programing”); // Lấy về danh mục các tựa sách đã chọn Vector bookList = new Vector(); bookList = shoppingCart.getContents(); Enumeration enumer = bookList.elements(); // In các tựa sách trong danh mục while(enumer.hasMoreElements()) { String title = (String)enumer.nextElement(); System.out.println(title); // Gọi phương thức loại bỏ sách ra khỏi danh mục shoppingCart.removeBook(“Programing Visual Basic”); shoppingCart.remove(); }catch (BookException ex) { System.err.println(“Caught a Book Exception: ” + ex.getMessage()); } } } 2.6.3.2 Chu trình hoạt động của Bean thao tác lưu vết trạng thái Sau đây là hình minh họa chu trình họat động của Bean thao tác lưu vết trạng thái: Chưa tồn tại 1.create 2.ejbRemove 2.setSessionContext 1.remove 3.ejbCreate ejbActivate ejbPassivate Thụ động (Passive) Sẵn Sàng Hình 2.6 Chu trình hoạt động của Stateful Bean Client khởi tạo chu trình họat động bằng cách gọi phương thức create(). Trình chứa EJB thuyết minh Bean và gọi các phương thức setSessionContext và ejbCreate() trong Bean thao tác. Bây giờ thì Bean đã sẵn sàng để được gọi các phương thức business của nó. Do các thành phần Bean lưu giữ trạng thái thường không được huỷ đi trong quá trình giao dịch. Nếu trình chứa không đủ bộ nhớ (hoặc đối với những thành phần Bean chưa cần dùng đến), trình chứa sẽ tạm thời lưu Bean xuống bộ nhớ ngoài (đĩa cứng) bằng cách gọi phương thức ejbPassivate() để thông báo cho Bean biết rằng nó sắp được lưu xuống bộ nhớ ngoài (thông thường trình chứa EJB sử dụng thuật toán lần sử dụng gần đây ít nhất (last-recently-used)). Các Bean lưu vết trạng thái có thể dựa vào tình huống này để tạm cất những dữ liệu quan trọng vào nơi nào đó, sau đó Bean sẽ chuyển sang trạng thái ngủ (ngừng hoạt động). Khi có một lời triệu gọi Bean phát sinh mới từ trình khách, nếu trình chứa không tìm thấy Bean đang hoạt động nó sẽ khôi phục lại Bean từ vùng nhớ tạm. Lúc này trình chứa sẽ gọi phương thức ejbActivate() để thông báo cho Bean biết trạng thái kích hoạt trở lại. Bean có thể dựa vào tình huống này để khôi phục lại trạng thái đã lưu trữ trước đó. Ở cuối chu trình họat động, Client gọi phương thức remove() và trình chứa gọi phương thức ejbRemove() của Bean. 2.6.3.3 Sơ đồ trạng thái của Bean thao tác lưu vết trạng thái Hình 2.7 Sơ đồ trạng thái của Stateful Bean 2.6.3.4 Sơ đồ trình tự của Bean thao tác lưu vết trạng thái Hình 2.8 Sơ đồ trình tự của Stateful Bean 2.7 GIỚI THIỆU TỔNG QUAN VỀ ENTITY BEAN Lợi ích chính của EJB là nó cung cấp cho chúng ta khả năng tạo ra Bean thực thể. Bean thực thể là đối tượng Bean ánh xạ dữ liệu từ môi trường ngoài như các dòng dữ liệu trong bảng (table) dữ liệu chẳng hạn. Nếu Bean thao tác (session bean) chủ yếu thiên về xử lý tính toán và hoàn thành một tác vụ nào đó thì Bean thực thể thiên về thể hiện dữ liệu. Trong bean thực thể, chúng ta có thể có các phương thức tính toán kèm theo, chúng được gọi là các phương thức nghiệp vụ (business method) xử lý dữ liệu của Bean. Tuy nhiên, chúng ta cũng có thể chỉ dùng Bean thực thể để trình bày dữ liệu. Điểm khác biệt lớn nhất giữa Bean thực thể và Bean thao tác đó là Bean thực thể có khả năng lưu trữ và tái tạo lại bản thân Bean từ cơ sở dữ liệu. Đặc tính này thường gọi là khả năng tồn tại và lưu trữ được (persistence). Có hai loại Bean thực thể: Bean thực thể quản lý (Bean-Managed Persistence) và Bean thực thể quản lý bởi trình chứa (Container-Managed Persistence). Sau đây là những ưu và khuyết điểm của hai loại Bean thực thể: Container - Managed Persistence (Bean thực thể được quản lý bởi trình chứa): Ngoài những lợi ích đã nói ở trên thì nó cũng có một số các khó khăn sau : Cần phải thành thạo EJB Query Language (Ngôn ngữ truy vấn EJB). Mỗi trình chứa EJB đều có cách riêng trong việc ánh xạ thực thể và table trong cơ sở dữ liệu. Thành thạo với việc ánh xạ của trình chứa không phải là chuyện đơn giản. Tốc độ chạy sẽ chậm hơn so với việc sử dụng trực tiếp câu lệnh SQL. - Điểm cuối cùng nhưng cũng rất quan trọng đó là debug cũng gặp nhiều khó khăn, nhất là khi persistence layer không cho phép in ra những câu lệnh SQL do nó tạo ra. Sử dụng trực tiếp SQL hay Bean-Managed Persistence (Bean thực thể quản lý) : đòi hỏi sự thành thạo với SQL và rất khó khăn trong việc thay đổi cơ sở dữ liệu. Bên cạnh những khó khăn này nó cũng có những thuận lợi sau: - Sử dụng SQL tránh được việc phải thành thạo ngôn ngữ truy vấn EJB và cách ánh xạ cho một persistence layer. - Chạy nhanh hơn và dễ debug hơn. Một khó khăn thường gặp khi sử dụng trực tiếp SQL là việc cập nhật cơ sở dữ liệu. Làm thế nào chỉ để cập nhật những cột có giá trị thay đổi chứ không phải toàn bộ các cột của một row trong table. May mắn là cũng có giải pháp cho vấn đề này. Cũng giống như việc ngắt kết nối Recorset trong microsoft, JDBC 2.0 cũng có RowSet (cung cấp bởi Sun và có tên là CachedRowSet). CatchedRowSet tự động cập nhật những column thay đổi và người sử dụng không cần phải viết một dòng lệnh SQL nào. ENTERPRISE JAVA BEAN VÀ SỰ HỖ TRỢ CỦA CÁC TRÌNH CHỦ KHÁC Các trình chủ hổ trợ kiến trúc Enterprise Java Bean hiện có : Weblogic, Inprise Application Server (IAS), Oracle Application Server (OAS), JRun, IPlanet, WebSphere, Jboss… J2EE chỉ là một phần cài đặt của đặc tả EJB. Mỗi trình chủ đều kèm theo trình đóng gói deploytool thích hợp để chúng ta biên dịch, đóng gói và đưa các lớp cần thiết của Bean vào trình chứa. Các công cụ của những trình chủ khác nhau có thể cung cấp cách xây dựng và đóng gói Bean (tập tin .jar) vào những thư mục qui định khác nhau trong trình chủ (chúng ta nên tìm hiểu tài liệu của chúng). Một ứng dụng thương mại thật sự thường chúng ta không nên dùng J2EE (có sẵn trong bộ Java JDK Enterprise) mà nên tận dụng các tính năng cao cấp cũng như sự hổ trợ từ phía các trình chủ như IAS hay OAS. Chúng là các trình chủ thương mại nên đáp ứng được cụ thể mục đích sử dụng và cách thiết kế chương trình cho khách hàng hơn. Ví dụ IAS (của Inprise) cung cấp cho chúng ta dịch vụ Web kết hợp với xây dựng các ứng dụng phân tầng Java, đóng gói các thành phần Bean, thiết kế Bean thực thể dựa vào cơ sở dữ liệu InterBase, cài đặt đối tượng Corba dựa trên trình môi giới Visio-Broker. Hoặc OAS hoàn toàn dựa trên nền và phong cách xây dựng đối tượng của hệ cơ sở dữ liệu Oracle… CHƯƠNG 3 TỔNG KẾT Phần này đã giới thiệu với chúng ta về kiến trúc của Enterprise Java Bean (EJB) mà Sun đưa ra từ phiên bản Java 1.2. Đây là mô hình phân tầng và lập trình đối tượng rất hiệu quả cho các ứng dụng mạng Java. Chúng ta xây dựng đối tượng (được gọi là các thành phần Bean) hoạt động bên trong trình chứa (container). Trình chứa đóng vai trò điều khiển và làm trung gian trong giao tiếp giữa Bean và trình khách. Tóm tắt có hai loại Bean : Bean thao tác (Session Bean) và Bean thực thể (Entity Bean). Bean thao tác có thể phi trạng thái (Stateless) hoặc lưu vết trạng thái (Stateful). Bean thực thể cũng được phân ra làm hai loại đó là Bean thực thể quản lý kết nối dữ liệu (Bean-managed) và Bean thực thể quản lý dữ liệu bởi trình chứa (container-managed Bean). Các bước xây dựng Bean cơ bản gồm có : Xây dựng lớp giao tiếp xa (remote interface) để trình triệu gọi đến Bean, xây dựng lớp giao tiếp chủ (home interface) để trình chứa có thể tham chiếu đến Bean và cuối cùng là xây dựng đối tượng Bean. Ngày nay công nghệ lập trình đã chuyển hướng rất nhanh sang mô hình lập trình mạng đa tầng (multi-tier). Hiểu về Enterprise Java Bean sẽ giúp chúng ta dễ dàng tiến sâu hơn vào thế giới lập trình Java cũng như lập trình mạng sau này. Cũng như lĩnh vực lập trình phân tán triệu gọi đối tượng từ xa, lập trình trong mô hình phân tầng EJB hiện rất mới mẻ và khá phức tạp đối với hầu hết các lập trình viên (kể cả lập trình chuyên nghiệp). PHẦN 2 XÂY DỰNG HỆ THỐNG BÁN SÁCH TRỰC TUYẾN ỨNG DỤNG CÔNG NGHỆ EJB CHƯƠNG 4 ĐẶT VẤN ĐỀ Áp dụng những công nghệ đã nghiên cứu vào xây dựng ứng dụng Web: ứng dụng thương mại điện tử Book Store. Đây là website cung cấp thông tin để khách hàng có thể liên lạc và biết rõ về sản phẩm và những dịch vụ mà công ty đưa ra. Khách hàng có thể đặt mua, thanh toán và hẹn ngày giao hàng hay nhận sự hỗ trợ về dịch vụ từ nhà cung cấp. Ứng dụng Book Store hỗ trợ việc mua bán sách qua mạng theo hình thức B2B. CHƯƠNG 5 ĐẶC TẢ YÊU CẦU HỆ THỐNG NGƯỜI SỬ DỤNG HỆ THỐNG 5.1.1 Đối với khách hàng chưa đăng ký Tìm kiếm sách thông thường: tìm kiếm theo tên sách và thể loại sách Tìm kiếm nâng cao là kết hợp các thông tin chi tiết về sách Tên sách Tên tác giả Thể loại sách Giá sách Xem thông tin về sách Đăng ký tài khoản mới Đánh giá sách 5.1.2 Đối với thành viên Tìm kiếm sách thông thường: tìm kiếm theo tên sách và thể loại sách Tìm kiếm nâng cao là kết hợp các thông tin chi tiết về sách Tên sách Tên tác giả Thể loại sách Giá sách Xem thông tin về sách Đánh giá sách Đăng nhập vào hệ thống Đăng xuất khỏi hệ thống Đặt mua sách 5.1.3 Đối với người quản trị hệ thống Người quản trị hệ thống cũng là thành viên của Website nên cũng có các chức năng giống như thành viên. Ngoài ra còn có thêm các chức năng sau: Quản trị thêm bới số lượng sách trong kho Quản trị đơn hàng Quản trị thành viên CÁC CHỨC NĂNG CỦA HỆ THỐNG Các chức năng dành cho thành viên và khách hàng chưa đăng ký Tìm kiếm sách Miêu tả: Độc giả có thể tìm kiếm sách theo tiêu chí: Tên sách, thể loại sách. Thông tin đầu vào: Khách hàng nhập tên sách hay một phần của tên sách. Thông tin đầu ra: Hiển thị chi tiết tất cả các sách có tên chứa thông tin đã nhập mà admin cho phép hiện thị. Cách thức xử lý: Truy vấn cơ sơ dữ liệu và tìm ra các sách có tên tương ứng với thông tin đầu vào Tìm kiếm sách nâng cao Miêu tả: Khách hàng có thể tìm kiếm sách theo các tiêu chí như: Tên sách, Tên tác giả, Thể loại sách, Giá cả. Thông tin đầu vảo: Khách hàng nhập các thông tin về sách: Tên sách, Tên tác giả, Thể loại, Giá cả. Thông tin đầu ra: Khách hàng nhập các thông tin về sách: Tên sách, Tên tác giả, Thể loại, Giá cả. Cách thức xử lý: Truy vấn cơ sơ dữ liệu và tìm ra các sách có tên tương ứng với thông tin đầu vào Đăng ký Miêu tả: Độc giả có thể đăng ký làm thành viên của website. Thông tin đầu vào: Nhập các thông tin về cá nhân: Tên truy cập, Mật khẩu, Xác nhận mật khẩu, Họ,Tên, Email, Địa chỉ, Số điện thoại, Kiểu thẻ thanh toán, Số thẻ Thông tin đầu ra: Đăng ký thành công hay không thành công Cách thức xử lý: Kiểm tra các thông tin có hợp lệ không và cập nhật cơ sở dữ liệu. Dữ liệu cần lưu trữ: Các thông tin cá nhân về khách hàng. Đăng nhập Miêu tả: Bạn mua sách thì phải đăng nhập vào hệ thống. Thông tin đầu vào: Các thông tin về độc giả: Tên truy cập, Mật khẩu. Thông tin đầu ra: Đăng nhập thành công hay không thành công. Cách thức xử lý: Truy vấn cơ sở dữ liệu xem độc giả nhập thông tin có hợp lệ hay không. Đánh giá sách Miêu tả: Khách hàng đánh giá chất lượng sách. Thông tin đầu vào: Khách hàng ghi ý kiến nhận xét, và bình chọn chất lượng sách theo sao. Thông tin đầu ra: Việc đóng góp ý kiến thành công hay không thành công. Cách thức xử lý: Cập nhật vào cơ sở dữ liệu Dữ liệu cần lưu trữ: Các thông tin đóng góp của khách hàng Đặt hàng qua mạng Miêu tả: Khách hàng sau khi đăng nhập vào hệ thống có thể đặt mua hàng qua mạng. Thông tin đầu vào: Khách hàng chọn sách đưa vào giỏ hàng và yêu cầu đặt mua hàng. Thông tin đầu ra: Hiển thị đơn hàng bao gồm tên sách, số lượng cùng với số tiền phải thanh toán. Cách thức xử lý: Tạo đơn hàng và lưu vào trong cơ sở dữ liệu. Các chức năng quản lý Quản trị sách Miêu tả: Nhà quản trị đưa vào kho các danh mục sách mới, cập nhật lại các thông tin cũ. Thông tin đầu vào: Các thông tin về sách mà admin muốn thay đổi và nhập mới. Thông tin đầu ra: Các thao tác thành công hay không thành công. Cách thức xử lý: Kiểm tra sự hợp lệ của các thông tin và thực hiện các câu truy vấn dữ liệu. Quản trị thành viên Miêu tả: Người quản trị quản lý các thành viên đăng ký với Website. Thông tin đầu vào Thông tin đầu ra: Thông tin về thành viên của website. Cách thức xử lý: Tìm kiếm trong cơ sở dữ liệu. Quản trị đơn hàng Miêu tả: Giúp người dùng xem thông tin về các đơn hàng mà khách hàng đã đặt trực tuyến qua mạng. Thông tin đầu vào Thông tin đầu ra: Thông tin về các đơn hàng. Cách thức xử lý: Tìm kiếm trong cơ sở dữ liệu và thực hiện các câu truy vấn bảng dữ liệu. CHƯƠNG 6 PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG MÔ HÌNH USE CASE Mô hình Use Case tổng quát của hệ thống Hình 6.1 Mô hình Use Case tổng quát của hệ thống Phân rã Use Case Tim kiem Hình 6.2 Phân rã Use Case Tim kiem Phân rã Use Case Quan tri sach Hình 6.3 Phân rã Use Case Quan tri sách Phân rã Use Case Quan tri don hang Hình 6.4 Phân rã Use Case Quan tri don hang Phân rã Use Case Quan tri thanh vien Hình 6.5 Phân rã Use Case Quan tri thanh vien BIỂU ĐỒ TRÌNH TỰ Dưới đây là một số biểu đồ trình tự cho Use Case của hệ thống: Biểu đồ trình tự cho Use Case đăng nhập Hình 6.6 Biều đồ trình tự cho Use Case Dang nhap Biểu đồ trình tự cho Use Case đặt hàng Hình 6.7 Biểu đồ trình tự cho Use Case Dat hang Biểu đồ trình tự cho Use Case Tìm kiếm Hình 6.8 Biểu đồ trình tự cho Use Case Tim kiếm Biểu đồ trình tự cho Use Case Đánh giá sách Hình 6.9 Biểu đồ trình tự cho Use Case Danh gia sach Biểu đồ trình tự cho Use Case Thêm sách mới Hinh 6.10 Biểu đồ trình tự cho Use Case Them sach moi Biểu đồ trình tự cho Use Case Xem đơn hàng Hình 6.11 Biểu đồ trình tự cho Use Case Xem don hang Biểu đồ trình tự cho Use Case Xóa đơn hàng Hình 6.12 Biểu đồ trình tự cho Use Case Xoa don hang Biểu đồ trình tự cho Use Case Xem thành viên Hình 6.13 Biểu đồ trình tự cho Use Case Xem thanh vien Biểu đồ trình tự cho Use Case Xóa thành viên Hình 6.14 Biểu đồ trình tự cho Use Case Xoa thanh vien THIẾT KẾ BIỂU ĐỒ LỚP – ĐỐI TƯỢNG CHI TIẾT Hình 6.15 Biểu đồ lớp - đối tượng chi tiết THIẾT KẾ CƠ SỞ DỮ LIỆU Thiết kế các bảng Bảng chứa các để mục cho trang chủ: editorial_categories Hình 6.16 Bảng chúa các đề mục cho trang chủ Bảng chứa các chi tiết đề mục cho trang chủ: editorials Hình 6.17 Bảng chúa các chi tiết đề mục cho trang chủ Bảng danh mục các thể loại sách: categories Hình 6.18 Bảng danh mục các thể loại sách Bảng danh mục chi tiết nội dung các tựa sách: items Hình 6.19 Bảng danh mục chi tiết nội dung các tựa sách Bảng danh mục chứa thông tin thành viên: members Hình 6.20 Bảng danh mục chứa thông tin thành viên Bảng chứa đơn đặt hàng: orders Hình 6.21 Bảng chứa đơn đặt hàng Bảng chứa chi tiết đơn hàng: orderDetails Hình 6.22 Bảng chứa chi tiết đơn hàng Bảng chứa thông tin đánh giá sách của khách hàng: rating Hình 6.23 Bảng chứa thông tin đánh giá của khách hàng Bảng chứa các thể loại credit card Hình 6.24 Bảng chứa các thể loại credit card Bảng chứa các thông tin về giỏ hàng: shoppingCart Hình 6.25 Bảng chứa các thông tin về giỏ hàng Mô hình quan hệ của hệ thống Hình 6.26 Mô hình quan hệ của hệ thống MÔ HÌNH HOẠT ĐỘNG CỦA WEBSITE Trang chủ Tìm kiếm Chọn xem nội dung sách Đánh giá sách Chọn sách cần mua thêm vào danh mục giỏ hàng Xác nhận việc mua hàng Đặt hàng Đăng ký Đăng nhập Lưu đơn hàng và hẹn ngày giao hàng Thành viên? No Yes Hình 6.27 Mô hình hoạt động của Web site CHƯƠNG 7 THỰC HIỆN BÀI TOÁN CÁC TRANG DÀNH CHO KHÁCH HÀNG Trang chủ Trang chủ là nơi khách hàng sẽ ghé thăm đầu tiên khi đến với Website. Từ đây khách hàng có thể tìm kiếm sản phẩm, chọn xem sản phẩm, đặt hàng, đăng ký làm thành viên… Hình 7.1 Trang chủ Trang đăng nhập Trang đăng nhập dành cho Khách Hàng đăng nhập vào hệ thống Web Site. Yêu cầu nhập vào tên đăng nhập và mật khẩu. Nếu chưa là thành viên của Web Site thì tiến hành đăng ký thành viên Hình 7.2 Trang đăng nhập Trang đăng ký thành viên Trang này dành cho Khách hàng đăng ký làm Thanh viên của Website. Hình 7.3 Trang đăng ký thành viên Trang xem chi tiết sách Hình 7.4 Trang xem chi tiết sách Trang giỏ hàng Trang này sẽ liệt kê tất cả các sản phẩm và số lượng của các sản phẩm mà khách hàng đã chọn. Hình 7.5 Trang giỏ hàng Trang thanh toán Hình 7.6 Trang thanh toán Trang tạo hóa đơn Hình 7.7 Trang tạo hóa đơn CÁC TRANG DÀNH CHO NHÀ QUẢN TRỊ Trang quản trị sách Từ trang này người quản trị có thể thêm mới sách, xóa sách và sửa thông tin của sách. Hình 7.8 Trang quản trị sách Trang quản trị đơn hàng Từ trang này người quản trị có thể xem tất cả các hóa đơn hàng, và xóa các hóa đơn. Hình 7.9 Trang quản trị đơn hàng Trang quản trị thành viên Từ trang này người dùng có thể xem danh sách các thành viên, và xóa các thành viên. Hình 7.10 Trang quản trị thành viên ĐÁNH GIÁ Đề tài “Khảo sát Session Bean và thiết kế mô hình Web” là một đề tài nguyên cứu về công nghệ mới Enterprise Java Bean mà Sun đưa ra. Đề tài đã trình bày mô hình lập trình mạng khá mới mẻ, lập trình ứng dụng đa tầng Enterprise Java Bean (EJB). Chúng ta đã tìm hiểu một số khái niệm cũng như kỹ thuật lập trình mới về kiến trúc phân tầng đang được đưa vào sử dụng rất rộng rãi trong nghành công nghiệp phần mềm hiện nay. Các vấn đề chính mà đề tài đã đề cập đến : Mô hình khách/chủ và mô hình đa tầng trong Enterprise Java Bean. Tìm hiểu mô hình hoạt đông của Bean bên trong trình chứa (container). Xây dựng và triệu gọi thành phần Session Bean của EJB. Sử dụng trình đóng gói deploytool. Trong quá trình khảo sát, tìm hiểu và phân tích đề tài này dưới sự chỉ dẫn của cô Phan Thị Hà, em đã hiểu được phần nào về mô hình lập trình đa tầng, kiến trúc Enterprise Java Bean, cách xây dựng và triệu gọi thành phần Bean mà cụ thể là Session Bean. Trong quá trình khảo sát phân tích và thiết kế mô hình Web, em gặp rất nhiều khó khăn nhưng cũng đã cố gắng rất nhiều để hoàn thành ứng dụng Web với những chức năng sau : Đối với ứng dụng Web dành cho Khách Hàng : Khách hàng có thể tìm kiếm, chọn xem sản phẩm được bán của Website. Khách hàng có thể tiến hành đặt hàng những sản phẩm mình chọn qua mạng. Khách hàng có thể đăng ký làm thành viên của Website. · Đối với ứng dụng Web dành cho Nhà quản trị : Quản trị sách: đưa vào kho các danh mục sách mới, cập nhật lại các thông tin cũ, xóa đi các mục sách cũ Quản trị đơn hàng: giúp khách hàng xem thông tin về các đơn hàng mà khách hàng đã đặt trực tuyến qua mạng. Quản trị thành viên. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Ứng dụng Web mà em xây dựng đã đạt được một số chức năng chính để phục vụ cho việc quản lý bán hàng qua mạng. Nhưng đó chỉ là một phần nhỏ trong các yêu cầu của thương mại điện tử ngày này. Em mong nhận được sự đóng góp ý kiến của quý thầy cô và các bạn để phát triển hoàn thiện hơn trong thời gian tới nhằm đáp ứng đầy đủ các yêu cầu thực tế ngày nay. Nhìn chung đề tài đã đáp ứng được công việc chính là bán hàng và đặt hàng qua mạng. Mặc dù em đã cố gắng rất nhiều, nhưng vì thời gian nghiên cứu có hạn và khả năng còn hạn chế nên kết quả thu được còn nhiều thiếu xót. Vì vậy em rất mong quý thầy cô cũng như các bạn và những ai quan tâm đến đề tài này cho ý kiến để em hoàn thiện chương trình một cách đầy đủ hơn Mong muốn của em là phát triển đề tài này thành một đề tài lớn trong đó có các chức năng sau : Thanh toán qua mạng. Bảo mật hệ thống để tránh sự xâm nhập không hợp pháp của người dùng : nếu một hệ thống được bảo mật ở cả hai mức người dùng và cơ sở dữ liệu thì hệ thống đó sẽ an toàn hơn, ngăn chăn được các hành vi phá hoại… Thay cho lời kết, một lần nữa em xin chân thành cảm ơn sự hướng dẫn và giúp đỡ tận tình của cô Phan Thị Hà cũng như sự đóng góp ý kiến của quý thầy cô và các bạn đã giúp em hoàn thành đồ án tốt nghiệp này. TÀI LIỆU THAM KHẢO [1] Phương Lan (Chủ biên) (2004),Java tập 2, NXB Thống kê, Nhà sách Minh Khai [2] Greq Barish (2001),Building Scalable And Hight-Performance JavaTM Web Application Using J2EE Technology, Addison Wesley. [3] Budi Kurniawan (2002),Java For The Web With Servlet, JSP, And EJB, New Rider Publishing. [4] Ed Roman, Scott Ambler, Tyler Jewell(2002),Mastering Enterprise Java Bean – Second Edition, Wiley & Son, Inc. [5] Ed Roman (1999), Mastering Enterprise JavaBeans and the Java 2 Platform, Enterprise Edition, Wiley & Son, Inc. [6] EricArmstrong, Jennifer Ball, Stephanie Bodoff, Debbie Bode Carson, Ian Evans, Kenneth Ganfield, Dale Green, Kim Haase, Eric Jendrock, John Jullion – Ceccarelli, Greertjan Wielenga (2005), The J2EE 1.4 Tutorial for NetBeans IDE 4.1, Sun Microsystems, Inc. [7] Jenitfer Ball, Debbie Bode Carson, Ian Evans, Kim Haase, Eric Jendrock (2006), The Java EE 5 Tutorial For Sun Java System Application Server Platform Edition 9,

Các file đính kèm theo tài liệu này:

  • dochoanchinh.doc