Thứ Bảy, 6 tháng 8, 2016

CMR one: one – Quan hệ 1:1 giữa 02 object trong EJB 2.1

CMR – Container Managed Relationships trong EJB 2

CMR one: one – Quan hệ 1:1 giữa 02 object trong EJB 2.1

Mục đích của chủ đề này hướng dẫn cách thức cài đặt mô hình CMR trên quan hệ 1:1 giữa 2 Entity Bean trong EJB 2.1

Yêu cầu

  • Nắm vững các khái niệm về CMP và cách thức vận dụng CMP
  • Nắm vững khái niệm về CMR
  • Nắm vững cú pháp và kiến thức về OOP, đặc biệt EJB QL
  • Tools sử dụng ở đây là Netbeans 6.9.1
  • JDK 6 update 22
  • Server: JBoss 4.2.3 GA
  • DBMS: SQL Server 2005

Trong phần nội dung này chúng tôi sẽ làm ví dụ trên mối quan hệ một client chỉ có địa chỉ address và một address chỉ có thuộc duy nhất một client. Dữ liệu mô tả như sau

Ở bài này, chúng tôi sẽ thực hiện hai chức năng chính đó là tạo mới thông tin 1 client và thực hiện tìm kiếm thông tin liên quan đến Client khi biết một ký tự bất kỳ trong phần tên của clientName

Lưu ý:

  • Kéo khóa chinh từ bảng tblClient sang bảng tblAddress để DBMS xem như tblClient là bảng cha, còn tblAddress là bảng con. Nếu thực hiện kéo dữ liệu từ bảng tblAddress sang tblClient thì code và cách vận dụng sẽ phát sinh khác
  • Bạn sẽ làm được tất cả nội dung nêu trên khi bạn nắm chắc bản chất vấn đề của nội dung này
  • Chi tiết của các bảng trên được mô tả cụ thể như sau

 

Trong phần tutorial này chúng tôi sẽ chưa một nhóm cách động thành các bước riêng biệt để tạo thuận lợi cho các bài tutorial tiếp theo

Bước 1: Đăng ký Datasource với Netbeans để Netbeans hỗ trợ chúng ta trong việc phát sinh datasource (bước này có thể bỏ qua nếu bạn đã có datasource rồi)

  • Bạn cần xác định vị trí của tập tin driver của DB mà bạn dùng kết nối (Ở đây, chúng tôi sử dụng driver loại 4 – tập tin sqljdbc.jar hay sqljdbc4.jar, sqljdbc4.jar thường dùng cho các SQL Server 2005 đã cài đặt service pack hay SQL Server 2008)
  • Chọn tab Services (Window → Services)
    • Click phải chuột trên Drivers trong Databases, chọn New Driver …

    • Nhấn nút Add để xác định tập tin driver (sqljdbc.jar). Tự động tên class driver xuất hiện trong text box Driver Class. Chúng ta có thể đổi tên trong Name (ở đây tôi sẽ đổi là SQL2005). Chúng ta click nút OK

    • Driver của chúng ta sẽ được đăng ký vào Netbeans như sau

    • Đăng ký datasource để chúng ta có thể sử dụng sau này bằng cách click phải chuột trên Driver chúng ta mới đưa vào (ở đây là SQL2005), chọn Connect Using …

    • Chúng ta điền thông số vào các ô màu đỏ như bên dưới

    • Chúng ta click Ok, màn hình trên giữ nguyên và tab Advanced xuất hiện – sang lên (ban đầu – như ở hình trên thì tab Advance sẽ bị mờ), chúng ta chọn dbo trong combo box Select Schema để thể hiện rằng chúng ta thao tác trên dữ liệu của DB chúng ta kết nối tới (Tại bước này nếu báo lỗi nghĩa là chúng ta đã gõ sai thông số hay DB chúng ta chưa được start)

    • Chúng ta click nút OK, kết quả sẽ giống như hình bên dưới

    • Lưu ý:
      • Hình mạch điện nối liền thể hiện là connect đang được kết nối
      • Để ngắt kết nối chúng ta nhấn phải chuột trên mạch điện và chọn disconnect, vấn đề này được áp dụng để làm mới các thông tin cập nhật từ DB

Bước 2: Tạo Enterprise Application Project

  • Tạo Project Enterprise Application
    • Chúng ta chọn menu File, chọn New Project
    • Tại cửa sổ Categories, click chọn JavaEE
    • Bên cửa số Projects, chọn Enterprise Application
    • Nhấn Nút Next

    • Điền thông tin liên quan đến Project bao gồm Project Name (ở đây chúng tôi đặt là Day5CMR1_1), chọn vị trí lưu project thông qua nút Browse… Click nút Next

    • Chúng ta chọn Server là JBoss4.2.3 GA
      • Lưu ý :
        • Chúng ta phải tại server JBoss tại địa chỉ, giải nén và thực hiện Add Server vào trong Netbeans sử dụng cửa sổ Service
        • Trong lúc add Server vào trong Netbeans chúng ta luôn chọn mặt định domain là default và port web mặc định của JBoss default là 8080
    • Chúng ta version của Java EE là J2EE 1.4 bởi vì chúng ta đang tạo trên nền EJB 2.1
    • Trong cửa sổ này cũng thể hiện tương ứng là NetBeans sẽ phát sinh luôn EJB Module và gói giao diện là web để chúng ta tạo ra project enterprise
    • Click nút Finish để hoàn tất

    • Chúng ta sẽ có project trên NetBeans như sau

  • Kết thúc bước này, chúng ta có project enterprise application

Bước 3: Tạo Entity Bean bao gồm CMP và CMR

  • Tạo CMP và CMR
    • Chọn module EJB (ở đây sẽ là Day5CMR1_1-ejb), click phải chuột trên module này chọn New, chọn CMP Entity Beans from Database …
      • Lưu ý: nếu không có phân này, chúng ta chọn New, chọn Others, trong phần Categories chúng ta chọn Java EE, và cửa sổ File Types chúng ta chọn CMP Entity Beans from Database

    • Trong cửa sổ này chúng ta cần tạo Data Source vì JBoss mặc định kết nối với DataSource của Hypersonic SQL với tên là java:/DefaultDS, nhưng chúng ta lại muốn kết nối với Datasource của chúng ta (ở đây là MS SQL Server 2005 hay cao hơn).
      • Do vậy, chúng ta chọn New Data Source – đây là một wizard mà NetBeans hỗ trợ chúng ta phát sinh ra tập tin data source để kết nối động với DB mà không code cứng trực tiếp vào code (CMP tất cả đều là abstraction và code sẽ do container phát sinh – việc việc code trực tiếp là không thể vì container quản lý CMP)

 

      • Chúng ta gõ tên bất kỳ vào JNDI Name (ở đây tôi đặt CMR11DS) và tên này chúng ta sẽ dùng để truy cập đến Datasource trong quá trình thao tác kết nối DB
      • Chọn tên connect mà chúng ta đã tạo ra ở bước 1 trong combo box Database Connection. Lưu ý: để đảm bảo các bước đúng chính xác, ở các lần sau chúng ta nên connect (làm cho mạch điện ráp lại) đường dẫn DB trước khi thực hiện bước 3 này

      • Click Ok để hoàn tất, Netbeans sẽ cập nhật thông tin của tập tin jboss-ds.xml tại Server Resource và lấy thông bảng từ DB chúng ta kết nối như hình bên dưới

 

  

    • Tạo CMP và CMR
      • Sau khi các bảng được lấy về, chúng ta chọn bảng con (ở đây là bản tblAddress vì chúng ta kéo liên kết từ tblClient sang tblAddress) và nhấn nút Add >
      • Tự động bảng tblAddress và bảng tblClient được add qua, bảng cha sẽ bị mờ đi (ở đây là tblClient)
      • Chúng ta click nút Next

      • Đặt tên package cho code của chúng ta trong ô Package (ở đây tôi nhập sample.cmr11)
      • Chúng ta nhấn nút Finish để hoàn tất quá trình tạo bean

 

      • Netbeans phát sinh và cập nhật project chúng ta với 02 bean được tạo ra như sau
        • Lưu ý: code phát sinh luôn luôn là abstract và container sẽ phát sinh code tương ứng khi chạy và deploy

 

      • Netbeans cũng phát sinh tương ứng việc mapping thông qua tập tin ejb-jar.xml như sau

  • Kết thúc bước này chúng ta đã tạo được bean và mapping được cmr nhưng chúng ta vẫn chưa sử dụng được chúng

Bước 4: Cấu hình thông tin để sử dụng và mapping bean

  • Mapping bean để khi deploy server có thể quản lý và đưa ra tên để chúng ta kết nối tới khi sử dụng
    • Ở đây, chúng ta sẽ phải bổ sung nội dung vào tập tin jboss.xml tại thư mục Configuration Files, nếu tập tin này không có, chúng ta thực hiện các bước như sau
    • Chọn tab File (menu Windows, chọn Files),
      • Di chuyển đến vị trí lần lượt là Day5CMR1_1-ejb, chọn thư mục src, chọn thư mục conf
      • Click phải chuột chọn New File, chọn Others

      • Chọn XML trong Categories, chọn XML document trong File Types
      • Click nút Next

      • Nhập tên jboss vào phần File Name, nhấn nút Next

      • Sau đó nhấn Finish để hoàn tất việc tạo ra tập tin mapping beans – jboss.xml

    • Để Netbeans hỗ trợ việc phát sinh xml tự động bên ngoài Netbeans, cụ thể ở đâ chúng tôi tạo cho tập tin jboss.xml (Bước này tạo điều kiện để chúng ta học tập cách tạo mapping cho tools cho các tập tin xml khác sau nay)
      • Tìm và mở tập tin jboss_4_0.xml tại thư mục JBOSS_HOME\docs\dtd (tôi cài đặt JBOSS tại thự mục Programming\jboss-4.2.3.GA) bằng wordpad hay trình mở XML nào mà có khả năng cho chúng ta copy

      • Copy dòng chọn trong khung đỏ

      • Vào Netbeans chọn menu Tools, chọn DTDs and XML Schemas

 

      • Chọn User Catalog, click nút Add Local DTD or Schema …
      • Nhập các thông số Public ID và chọn vị trí tập tin như hình bên dưới

      • Click nút OK để hoàn tất.

      • Lưu ý bước này chỉ làm 1 lân duy nhất, các lần còn lại chọn vào trong đây để sử dụng trực tiếp. Đây là bước hỗ trợ chúng ta giúp netbeans checking và phát sinh code xml
    • Chọn DTD và schema chúng ta muốn reference nhấn Open in Editor

    • Chọn và copy chuỗi DTD trong khung màu đỏ

      • Mở tập tin jboss.xml và dán chuỗi DTD sau dòng khai báo xml, sau đó gõ code xml như bên dưới, khi gõ nhấn tổ hợp phím Ctrl + Space Bar để bung trong khi gõ

      • Lưu ý
        • Tên tag ejb-name phải được mapping và copy từ tập tin ejb-jar.xml
        • Tên jndi là do chúng ta đặt, tên này chúng ta sẽ dùng truy cập bean
        • Ở đây chúng ta dùng tag local-jndi-name vì các cmp và cmr chỉ dùng cục bộ và code chúng ta phát sinh chỉ có Local và Local Home Interface
    • Chúng ta hoàn tất xong việc mapping bean
  • Chúng ta thực hiện mapping DB và đồng bộ giữa instance object và DB thông qua tập tin jbosscmp-jdbc.xml
    • Tương tự như jboss.xml, chúng ta thực hiện các bước để tạo ra tập tin jbosscmp-jdbc.xml nằm tại thư mục Configuration File
    • Mapping tập tin dtd chuẩn để Netbeans hỗ trợ phát sinh code xml như các bước nêu trên, tập tin nằm tại JBOSS_HOME\docs\dtd\jbosscmp-jdbc_4_0.dtd

 

    • Nội dung tập tin jbosscmp-jdbc.xml cụ thể như sau

    • Kết thúc bước này chúng ta hoàn tất được jbosscmp-jdbc.xml. Lưu ý:nếu không có tập tin này thì không tồn tai, chương trình vẫn chạy bình thường nhưng sẽ không đồng bộ dữ liệu xuống DB, DB sẽ không có tác động gì trong quá trình thao tác
  • Kết thúc bước này chúng ta hoàn tất việc cấu hình cho bean

Bước 5: Tạo phương thức insert dữ liệu mới xuống DB và bean

  • Vào trong tập tin TblClient.java,
    • Click phải chuột, chọn Insert Code
    • Chọn Add Create Method …

 

    • Phát sinh hàm Create tương ứng với các cột bên dưới bảng tblClient
    • Click nút OK

  • Hàm phát sinh ra bao gồm 02 hàm ejbCreate và ejbPostCreate, và viết code như hình bên dưới

  • Tương tự, phát sinh hàm insert, ejbCreate trong TblAddress như hình bên dưới

  • Kết thúc bước này chúng ta đã hoàn tất xong chức năng insert cho bean

Bước 6: Tạo giao diện web để sử dụng chức năng insert

  • Chúng ta chuyển sang gói Day5CMR1_1-war, chỉnh sửa giao diện tập tin index.jsp như sau

  • Phát sinh Controller để sử dụng như sau

  • Thực hiện Build Project, Start Server, Deploy để testing thư
    • Deploy đến Server: deploy tập tin jboss-ds.xml tại thư mục
      <Thư mục lưu trữ project>\Day5CMR1_1\Day5CMR1_1-ejb\setup\đến JBOSS_HOME\server\default\deploy. Chúng ta thấy server có kết quả y như tên chúng ta điền vào datasource jbosscmp-jdbc.xml

    • Deploy tập tin ear vào trong thư mục deploy như trên, ta thấy trên server

    • Thực hiện testing, chọn tab Services, chọn Servers, chọn Enterprise Application, chọn tên Project, chọn tên project gói war
    • Click chuột phải, chọn, Open in Browser

 

    • Kết quả testing demo như sau
      • DB trước khi Insert

 

      • Kết quả nhập liệu testing

  • Chúng ta đã hoàn tất được chức năng insert

Bước 7: Bổ sung chức năng Search để tìm kiếm tất cả Client khi chỉ biết một ký tự trong tên của Client

  • Chúng ta quay lại tập tin TblClient.java để bổ sung hàm Search như sau
    • Click phải chuột trên code, chọn Insert Code
    • Click chọn Add Finder Method ….

    • Nhập thông tin và EJB QL như hình vẽ

      • Lưu ý: việc chọn many là do chúng ta phán đoán câu lênh đó ra 1 hay nhiều records và phải áp dụng câu lệnh EJB QL
    • Code không phát sinh trong ben nhưng phát sinh trong ejb-jar.xml như sau

    • Đến đây chúng ta hoàn tất chức năng search
  • Chúng ta tạo giao diện để xử lý như sau
    • Tạo tập tin jsp có dạng như sau

    • Cập nhật Controller như sau

    • Tạo trang show.jsp để trình bày dữ liệu như sau
      • Lưu ý: import thư viện JSTL 1.1 vào Library của project

      • Lưu ý: giá trị điền trong EL language ${rows.<tên cmp field>} (ví dụ ${rows.username}) đây là field chúng ta lấy từ các khai báo tag "cmp field" khai báo trong tập tin ejb-jar.xml và nó được tạo ra các get/set method trong tập tin Local Interface của các bean
    • Clean and Build, Deploy lại và Testting

    • Chúng ta đã hoàn tất xong chức năng Search

Chúc mừng các bạn, chúng ta đã hoàn tất xong mối quan hệ giữa object trên mối quan hệ 1:1. Rất mong bài viết sẽ giúp ích cho bạn trong việc sử dụng và làm quen đến các khái niệm của EJB 2.1, đặc biệt ở đây là CMR

Rất mong sự góp ý chân thành của các bạn và hẹn các bạn trong bài tiếp theo đó là mối quan hệ 1:n, mối quan hệ chúng ta gặp rất nhiếu trong thực tế và trong lúc triển khai viết chương trình

 

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

Đăng nhận xét