CMR one: many – Quan hệ 1:n 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:n 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ách thức cài đặt CMR 1:1 (#EJB #EJB2 #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 người làm công – employee có nhiều địa chỉ – address và một address chỉ có thuộc duy nhất một employee. 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 employee và thực hiện tìm kiếm thông tin liên quan đến employee khi biết một ký tự bất kỳ trong phần tên của employee – Name
Lưu ý:
- Kéo khóa chinh từ bảng tblEmp sang bảng tblEmpAddr
- 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ẽ thực hiện nhóm cách động tương tự các bước trong bài tutorial CMR 1:1 để các bạn tiện theo dõi và nắm vững cách thức triển đồng nhất trên một công nghệ
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) (Vui lòng xem chi tiết Bước 1 trong tutorial CMR 1:1)
- Nếu Datasource với DB mà có chứa các bảng mà chúng ta thao tác đã được đăng ký rồi,
- Vào trong tab Services, mở rộng phần Database
- Click phải chuột trên connection mà chúng ta cần làm việc, chọn Connect …
- Chúng ta nhập username và password để kết nối DB, click OK
- Lưu ý: Một Database Connection chỉ dùng cho một DB cụ thể, không thể áp dụng cho tất cả các Database vì mỗi Database Connect có 1 chuỗi kết nối đến một DB cụ thể
Bước 2: Tạo Enterprise Application Project tương tự như bước 2 của tutorial trong CMR 1:1
- Tạo Project Enterprise Application có tên Day5CMR1_n
- Chúng ta chọn Server là JBoss4.2.3 GA và 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
- Chúng ta sẽ có project trên NetBeans như sau
Bước 3: Tạo Entity Bean bao gồm CMP và CMR tương tự như bước 3 của tutorial trong CMR 1:n
- Tạo CMP và CMR
- Tạo Datasource có tên là CMR1_nDS, tập tin jboss-ds.xml tại Server Resource sẽ được cập nhật 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ảng tblEmpAddr) và nhấn nút Add >
- Tự động bảng tblEmpAddr và bảng tblEmp được add qua, bảng cha sẽ bị mờ đi (ở đây là tblEmp)
- 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.cmr1n)
- 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
- Ở TblEmp, Netbeans phát sinh 1 cặp methods là get/set Collection để chứa tập collection các phần tử của bản quan hệ
- Trong khi TblEmpAddr được Netbeans phát sinh 1 cặp methods get/set chứa instance của bảng chính (ở đây là TblEmp) tương tự như khái niệm cài đặt quan hệ giữa bảng cha và con trong DBMS (Khóa ngoại là key khóa chính của bảng cha được đặt trong bảng con)
- 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, áp dụng tương tự như tutorial CMR 1:1
- 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 trong tập tin jboss.xml như hình vẽ bên dưới
- 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. Nội dung tập tin jbosscmp-jdbc.xml cụ thể như sau
- Lưu ý: tên field-name trong key field là tên thuộc tính của instance bean TblEmp, tên column-name chính là tên cột làm khóa ngoại dưới DB (ở đây là tblEmpAddr), điều này có nghĩa là khi thực hiện insert chúng ta không cần insert khóa ngoại mà khóa ngoại sẽ được container đồng bộ giữa 02 bean quan hệ hay giữa 02 bảng quan hệ. CMR được kích hoạt khi người sử dụng gọi hàm set collection tương ứng của bean
- 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 – áp dụng tương tự các phương thức phát sinh code do tools Netbeans hỗ trợ như bước 5 trong tutorial CMR 1:1
- Vào trong tập tin TblEmp.java, chúng ta cần tạo hàm insert, nghĩa là phương thức Create Method
- 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ự cho TblEmpAddr, chúng ta có hàm ejbCreate và ejbPostCreate như sau
- 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_n-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_n\Day5CMR1_n-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 TblEmp.java để bổ sung hàm Search có tên findByLikeName như sau
- 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 ý:
- Report Search đang được thực hiện theo dạng Master – Child
- Giá trị điền trong EL language ${rows.<tên cmr field>} (ví dụ ${rows.tblEmpAddrCollection}) đây là cmr field giúp chúng ta lấy một tập hợp bean chứa phần tử của các bean quan hệ, để từ đó chúng ta có thể khai thác nó trong phần bảng tiếp theo
- Giá trị điền trong EL language ${rows.<tên cmp field>} (ví dụ ${rows1.addrName}) đâ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:n. 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ệ n:m – mối quan hệ nhiều – nhiều, 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