Thứ Tư, 24 tháng 8, 2016

Xây dựng ứng dụng 3 tiers sử dụng EJB3 với JavaEE trên server Jboss 7 và WildFly 8, 9, 10

Xây dựng ứng dụng 3 tiers sử dụng EJB3 với JavaEE trên server Jboss 7 và WildFly 8, 9, 10

Mục đích: Chủ đề của bài này đề cập đến việc ứng dụng JavaEE với EJB3 để xây dựng ứng dụng distributed application. Bên cạnh đó, chúng tôi trình bày cách thức deploy ứng dụng EJB3 trên JBoss 7 và WildFly 8. 9.  10 cùng với cách phát triển ứng dụng này. Qua nội dung bài này, chúng ta sẽ thấy sự khác biệt giữa một số nội dung cấu hình trên JBoss 5, Jboss 6 so với Jboss 7 và WildFly 8, 9, 10

Xây dựng ứng dụng 3 tiers sử dụng EJB3 với JavaEE trên server Jboss 7 và WildFly 8, 9, 10

Mục đích: Chủ đề của bài này đề cập đến việc ứng dụng JavaEE với EJB3 để xây dựng ứng dụng distributed application. Bên cạnh đó, chúng tôi trình bày cách thức deploy ứng dụng EJB3 trên JBoss 7 và WildFly 8. 9.  10 cùng với cách phát triển ứng dụng này. Qua nội dung bài này, chúng ta sẽ thấy sự khác biệt giữa một số nội dung cấu hình trên JBoss 5, Jboss 6 so với Jboss 7 và WildFly 8, 9, 10

Yêu cầu

Toàn bộ nội dung của bài này là nâng cấp toàn bộ bài http://www.kieutrongkhanh.net/2016/08/xay-dung-ung-dung-web-su-dung-mvc2-ket.html với nội dung chủ yếu là thay thế toàn bộ mô hình 2 tiers thành mô hình 3 tiers theo định hướng đưa toàn bộ chức năng trong BLO và Entity từ Web Server trở thành Session Bean và Entity trong Application để hỗ trợ gọi từ xa – remote và có thể biến thành Web Services để cung cấp cho các hệ thống khác

Một số vấn đề về JBoss 7

  • Cách tổ chức và hỗ trợ ứng dụng khi deploy trên server của Jboss 5.x và Jboss 6.x là tương tự nhau
  • Tuy nhiên, Jboss 7.x có cấu trúc tổ chức và hỗ trợ ứng dụng hoàn toàn khác Jboss trước đó
  • Bên cạnh đó, Jboss được deprecate sau đó được chuyển thành dòng phát triển mới có tên gọi là Wildfly bắt đầu từ phiên bản 8 kế tục cho JBoss 7 và hỗ trợ chính thống cho JavaEE 6 trở lên – trong khi Jboss 7 là Java EE5.
  • Hơn thế nữa, Jboss 7 chỉ cài đặt được tối đa và chỉ JDK 7 mà thôi
  • Hiện nay, Wildfly đã phát triển đến phiên bản 10 và một số đặc tính sẽ tương tự như Jboss 7
  • Do vậy, trong bài viết này, chúng tôi phát triển ứng dụng với việc lựa chọn cho JBoss 7. Tuy nhiên, khi phát triển xong thì nó có thể deploy cho từ Jboss 7 đến WildFly 8, 9, 10
  • Một số đặc điểm mới của Jboss 7 so với các Jboss trước đó
    • Tên JNDI được cung cấp cho client để tìm kiếm EJB: có sự đổi khác hoàn toàn và cách thức được thể hiện trong Jboss 5 và 6 được loại bỏ. Cú pháp được thể hiện
      • ejb:myapp/myejbjar/distinctname/beanName!interfaceName
      • ejb: từ khóa
      • myapp: tên gói ear được đóng gói – bỏ đi phần .ear. Nếu deploy gói ejb – gói jar thì tên này để trống
      • myejbjar: tên gói jar được đóng gói cho ejb – bỏ đi phần .jar
      • distinctname: cho phép đặt tên không trùng, có hay không có điều được. Nếu không có để chuỗi rỗng
      • beanName: tên của bean class
      • interfaceName:tên của remote hay local interface

Mô hình tổng quát

  • Mô hình tiếp cận thay thế 02 tiers thành 03 tiers và BLO trở thành Session Bean ở application ở server

Vận dụng các khái niệm trên kết hợp nội dung bài thực hiện MVC + JavaEE 6 (http://www.kieutrongkhanh.net/2016/08/xay-dung-ung-dung-web-su-dung-mvc2-ket.html ), và EJB3 đến Entity Bean (http://www.kieutrongkhanh.net/2016/08/entity-bean-trong-ejb-30.html ) chúng ta thực hiện nâng cấp ứng dụng

  • Yêu cầu
    • Nắm vững các kiến thức đã nêu trên cùng với các nội dung về JavaEE 6, MVC2, JPA, 2 tiers và 3 tiers, EJB 2.x và EJB 3
    • Tools sử dụng ở đây là Netbeans 8.1, 7.4
    • JDK 8 update 66 hay JDK 7 update 51 – khuyến cáo sử dụng JDK 7 là ổn định nhất
    • Server: JBoss AS 7.1.1 Final, WildFly 8.2.0 Final, WildFly 9.0.2 Final, WildFly 10.0.0 Final
    • DBMS: SQL Server 2005, 2008, 2012, 2014
    • Thư viện hỗ trợ: JSTL 1.1, 1.2.1, 1.2.2; Driver kết nối database SQLServer (sqljdbc4.jar)
    • Cấu hình server JBoss 7 chạy thành công trên netbeans (http://www.kieutrongkhanh.net/2016/08/su-dung-netbeans-721-jboss-711-final.html )
  • Các bước thực hiện
    • Tạo project Enterprise Application, nhấn Next

 

    • Tạo project tên JavaEE6JBoss7, nhấn Next

    • Chọn JBoss 7, JavaEE 6. Nhấn Finish để tạo project

    • Project được tạo ra với cấu trúc

    • Thực hiện cấu hình dataSource trên Jboss 7 và Wildfy
      • Việc cấu hình datasource của các server Jboss từ 7 trở về trước hoàn toàn dựa vào tập tin jboss-ds.xml nằm trong project và được deploy vào trong server trước khi deploy ứng dụng
      • Tuy nhiên, từ Jboss 7 trở lên việc này đòi hỏi phải cấu hình trực tiếp trong server để có datasource và tập tin jboss-ds.xml không còn dùng nữa
      • Đi tới thư mục cài đặt
        • JBoss 7: truy cập thư mục modules\com\
        • Wildfly 8, 9, 10: truy cập thư mục modules\system\layers\base\com\
      • Tạo thư mục sqlserver
      • Vào trong thư mục sqlserver, tạo thư mục main. Copy tập tin driver kết nối DB sqljdbc4.jar vào trong đó
      • Tạo tập tin module.xml với nội dung định nghĩa về thư viện. trong đó name là lấy tên chính xác từ thư mục được tạo theo thứ tự các bước trên và không tính đến thư mục main

      • Trong hình bên dưới là ví dụ của thư mục chúng tôi đã cài đặt và khi thực thi kết nối trên server thì server sẽ phát sinh ra tâp tin sqljdbc4.jar.index

      • Di chuyển ra ngoài gốc cài đặt JBoss hay WildFly, đi đến thư mục đường dẫn standalone\configuration\, mở tập tin standalone.xml bổ sung cấu hình
      • Tìm thẻ datasources, tìm đến drivers bổ sung khai báo driver tham chiếu đến module vừa khai báo ở trên

      • Tiếp tục bổ sung khai báo datasource ngay trên thẻ drivers

      • Nếu server đang chạy, stop server và start lại. Chúng ta sẽ thấy tên datasource vừa khai báo trong khi server đang start
      • Start Server – Chúng ta sẽ thấy datasource cấu hình khởi tạo

….

    • Tập tin persistence.xml được phát sinh

    • Chúng ta thực hiện tạo Stateless Session Bean với tên Registration Session Bean (Tên_TableSessionBean). Trong quá trình tạo, chúng ta chỉ lựa chọn Local vì Remote đòi hỏi chúng ta phải Add thêm một project

    • Sau đó, chúng ta bổ sung một Java Interface vào gói sample.registration để làm Remote cho Session Bean. Bổ sung @Remote vào đầu khai báo class

    • Mở RegistrationSessionBean và bổ sung tên interface này vào phần implement của class

 

    • Cấu trúc Project hiện nay như sau

    • Bổ sung các business method cho cả Remote và Local với các thành phần code cho các hàm login, search, thêm, xóa, update như sau

    • Chúng ta vừa hoàn tất phần bean mà không cần phải cấu hình tập tin jboss.xml vì như đã đề cập trong phần lý thuyết là cách áp dụng cung cấp jndi đã được đưa ra theo cơ chế mới
    • Chúng ta sẽ tiếp tục với phần ứng dụng web. Các giao diện chúng ta sẽ thực hiện tương tự như bài MVC2 kết hợp JavaEE6 và JPA tại  http://www.kieutrongkhanh.net/2016/08/ung-dung-jpa-vao-mvc2-ket-hop-javaee6.html

      • Các thành phần mapping tương ứng trong web.xml

      • Thực hiện gọi chức năng Login cho LoginServlet

        • Trong code trên chỉ có một điểm cần lưu ý, đó là cách thức lookup JNDI của bean của JavaEE6 và trên Jboss7 và Wildfly sẽ khác hoàn toàn so với trước đây.
        • Nội dung của tên JNDI tại dòng code 55 được hình thành tương tự như khái niệm đã nêu trong đầu bài này
        • Nội dung khởi tạo context hiện hành tại dòng 63 có một chút khác biệt là phải sử dụng ejb client. Đôi lúc vấn đề này cũng không thực sự cần thiết khi chạy trên server có support như Jboss 7 và Wildfly. Chúng ta có thể vẫn dùng như các phiên bản trước là context = new InitialContext()
    • Chúng ta bắt đầu Clean and build project, deploy gói ear vào jboss 7 tại thư mục standalone\deployments\

      • Chép gói ear vào thư mục này

      • Server được deploy

    • Thư mục deploy tự động phát sinh như sau

    • Chúng ta thấy ứng dụng trong server và không thể open in browser

 

    • Thực hiện login và chúng ta sẽ có kết quả đúng và sai

    • Để undeploy ứng dụng, chúng ta chỉ cần xóa gói ear ra khỏi server

      • Chúng ta đã hoàn thành chức năng Login
    • Phần tiếp theo chúng tôi sẽ hoàn tất các chức năng còn lại và thể hiện màn hình demo ở cuối cùng vì đây là bài mở rộng từ các bài đã trình bày trong chủ đề trước.
    • Tuy nhiên, chúng tôi vẫn khuyến cáo quí vị hoàn thành một chức năng hãy thực hiện các bước deploy ứng dụng ở trên khi nào ra kết quả đúng thì hãy thực hiện các bước tiếp theo
      • Chúng ta thực hiện gọi chức năng Search trên Search Servlet

      • Chúng ta trình bày giao diện trên search.jsp

      • Chúng ta tiếp tục với chức năng Delete trên Delete Servlet

      • Chúng ta tiếp tục với chức năng Update cho UpdateServlet

      • Cuối cùng, chúng ta kết thúc với chức năng đăng ký account hay insert record xuống DB. Chúng ta bắt đầu với class hỗ trợ báo lỗi

      • Gọi chức năng insertAccount trên InsertAccountServlet

      • Chúng ta cập nhật giao diện cho createNewAccount.jsp

    • Cấu trúc project của toàn bộ ứng dụng web

 cra

    • Clean and Build Project, deploy và thực thi từ chức năng search

    • Nhập giá trị và nhấn Search

    • Chọn một dòng nhấn Delete

    • Kết quả Delete

    • Cập nhật password và role, nhấn Update

    • Thực hiện chức năng Sign Up – đăng ký mới thông qua việc click đường link SignUp

    • Giao diện xuất hiện

    • Không điền gì cả nhấn Create New Account

    • Nhập giá trị username và nhấn nút Create New Account

    • Nhập giá trị thêm password và nhấn nút Create New Account

    • Nhập giá trị password, confirm và nhấn nút Create New Account

    • Nhập giá trị password, confirm và Fullname và nhấn nút Create New Account

    • Màn hình login xuất hiện, nhập giá trị vừa mới tạo xong, nhấn nút Login

    • Màn hình search xuất hiện

    • Quay lại màn hình sign up và nhập đầy đủ thông tin đã tạo trước đó

    • Kết quả khi username đã tồn tại

Quí vị có thể deploy ứng dụng này vào các server wildfly-8.2.0.Final, wildfly-9.0.2.Final, wildfly-10.0.0.Final và thực thi kết quả ra tương tự

Chúc mừng các quí vị đã việc cài đặt ứng dụng 3 tiers sử dụng EJB, JPA với mô hình MVC2 sử dụng JBoss 7.1.1 Final, wildfly-8.2.0.Final, wildfly-9.0.2.Final, wildfly-10.0.0.Final

Rất mong sự góp ý chân thành và chia sẻ của quí vị về vấn đề này. Hẹn gặp lại quý vị ở chủ đề khác

Không có nhận xét nào:

Đăng nhận xét