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

CMP – Container Managed Persistent Bean trong EJB 2.1

CMP – Container Managed Persistent Bean trong EJB 2.1

Mục đích của chủ đề này mô tả khái niệm cơ bản về Entity Bean trong mô hình EJB 2.1 và một số nguyên tắc nền tảng – cơ chế hoạt động của Entity Bean khi deploy trên server

Định nghĩa về Persistence

  • Khả năng đảm bảo dữ liệu được lưu trữ trong DB để thông tin chứa đựng trong object có thể tồn tại lâu dài trên bộ nhớ kể cả khi server bị crash
  • Đảm bảo tính toàn vẹn cho dữ liệu – thông tin
  • Có 3 cách để tạo ra persistent object

    • Java Object Serialization
      • Phương thức giúp Java Object lưu giữ trạng thái hiện hành.

      • Cơ chế thực hiện
        • Chụp hay lấy toàn bộ trạng thái hiện hành của các đối tượng
        • Nén toàn bộ các trạng thái lấy được lại
        • Marshal – convert đối tượng nén trở thành dạng byte stream
        • Byte Stream này sẽ được truyền qua mạng và gửi đến bộ lưu trữ để lưu trữ.
      • Khuyến điểm
        • Phức tạp và tiêu tốn thời gian cùng tài nguyền: cần phải quá nhiều xử lý như
          • Load dữ liệu lên, chuyển đổi về dạng object và thực hiện truy vấn hay thực hiện các chức năng lấy kết quả trả về
          • Rất khó truy vấn dữ liệu tại bộ lưu trữ vì không thể truy vấn trực tiếp trên byte stream
    • Object database Persistence
      • Thiết kế để lưu trữ các đối tượng Java hay Java Serializable Object mà không cần lập trình tác động trên CSDL quan hệ.
      • Cung cấp ngôn ngữ truy vấn OQL – Object Query Language – Ngôn ngữ truy vấn dữ liệu dựa trên các object để hỗ trợ truy vấn các persistent object và tạo các relationship giữa các objects.
      • Hỗ trợ việc đảm bảo tính toàn vẹn dữ liệu và tính bảo mật cao.
      • Hỗ trợ cơ chế ánh xạ và đồng bộ giữa CSDL trên bộ nhớ và CSDL quan hệ thực sự được lưu trữ dưới DB.
      • Khuyết điểm: vì đối tượng này là các object trên bộ nhớ nên cơ chế này không có report, công cụ quản lý, cho nên không được ưa chuộng.
    • Object relation Mapping
      • Sử dụng trong CSDL quan hệ để lưu trữ và đồng bộ với các object của Java.
      • Sử dụng các đối tượng như JDBC để ánh xạ giữa đối tượng dữ liệu và CSDL quan hệ.

      • Cơ chế thực hiện
        • Các class được load trên bộ nhớ để tạo ra instance – object
        • Thực hiện kết nối CSDL sử dụng JDBC
        • Load dữ liệu từ DB thông qua JSBC và nạp giá trị vào các thuộc tính của instance.
      • Ưu điểm:
        • Người sử dụng có thể truy vấn trên CSDL dùng SQL hay sử dụng OQL để  truy vấn trên các object
        • Cơ chế cho phép đồng bộ dữ liệu theo 02 chiều, đảm bảo sự thuận lợi trong thao tác dữ liệu.
      • Có 02 cách thực hiện
        • Manual Mapping: dùng các provider như JDBC để truy xuất dữ liệu
        • Dùng công cụ hỗ trợ việc ánh xạ của giữa đối tượng và CSDL.

Định nghĩa Entity Bean

  • Dùng để thể hiện cách thức mapping dữ liệu và lưu trữ dữ liệu và các thiết bị lưu trữ hay CSDL
  • Hỗ trợ cơ chế cho phép đa người dùng truy cập
  • Làm môi trường trung gian giữa client và DB, đảm bảo tính toàn vẹn dữ liệu tương tự như việc chúng ta vận dụng các stored procedure trên DBMS, tạo sự linh hoạt trong việc kết nối dữ liệu và đồng bộ dữ liệu
  • Đây là mô hình dữ liệu – Data modeling – tập trung cho các thao tác trên CSDL như thêm, truy vấn, xóa, sửa (CRUD) độc lập với các DBMS – không quá lệ thuộc vào DBMS cụ thể nào
  • Hỗ trợ việc tái sử dụng – reusable trong quá trình vận dụng và triển khai, đảm bảo toàn vẹn dữ liệu trên DB (để làm được việc đảm bảo này entity bean phải được vận dụng trong một transaction cụ thể)
  • Một Entity cụ thể tương ứng với một bảng – table trong DB (1:1)
  • Mỗi instance của entity bean (hay object trên bộ nhớ) tương ứng với một hàng trong table dưới DB
  • Tại 1 thời điểm container chỉ load một số bean instance nhất định – không phải load toàn bộ trên bộ nhớ như khái niệm – cơ chế của Data Object (JDBC, ADO.NET, RECORDSET …) bởi vì vùng không gian chứa đựng (pool) qui định sẵn kích thước nhất định. Đây là khả năng tiết kiệm bộ nhớ và chỉ load khi nào cần
  • EJB container chịu trách nhiệm tạo instances của entity bean, load và cập nhật dữ liệu của instance bean và DB.
  • Cơ chế này áp dụng kết hợp của các trạng thái persistence đã nêu ra ở trên, do vậy thời gian tồn tại của entity bean rất lâu so với session bean bởi vì dữ liệu cụ thể được lưu trữ dưới DB, do vậy, cho dù server bị crash thì dữ liệu vẫn có khả năng được nạp từ DB lên bộ nhớ
  • Mỗi entity bean có một định danh duy nhất (PK – Primary Key) cho phép người sử dụng xác định được chính xác bean đang thao tác (khái niệm này tương tự như khóa chính của mỗi bảng trong DB)
  • Các entity bean cũng có mối quan hệ lẫn nhau tương tự như các table dưới DB, gọi là CMR – Container Managed Relationship
  • Entity bean có 2 dạng bean:
    • Container Managed Persistence (CMP)
    • Bean Managed Persistence (BMP)
  • Các thành phần của entity bean

    • Remote Interface:
      • Định nghĩa các dạng của các phương thức xử lý dạng prototypes như tên hàm, tham số truyền và kiểu dữ liệu trả về để người dùng từ xa – ngoài server thông qua interface này để yêu cầu các dịch vụ trên bean.
      • Remote interface chính là định dạng EJB Object của entity bean trên bộ nhớ
      • Tất cả các hàm phải bắt buộc ném throws RemoteException
    • Home Interface:
      • Client dùng interface này để tạo – create , tìm – find  và hủy - remove entity bean hay EJB Object.
      • Home Interface chính là định dạng của EJB Home Object trên bộ nhớ, tên này có được khi entity bean được deploy thành công trên server và được Administrator Object quản lý và cung cấp instance cho người dùng tìm kiếm
      • Client tương tác với EJB Object phải thông qua việc tìm kiếm – lookup home object
      • Kiểu dữ liệu trả về của các hàm trong Home thông thường phải là kiểu Remote Interface, kiểu Collection (không tính một số trường hợp ngoại loại của phương thức Home)
      • Tất cả các hàm phải bắt buộc ném throws RemoteException
    • Local Interface:
      • Tương tự như Remote Interface nhưng interface này chỉ cho giao tiếp giữa các bean thuộc cùng container (trong khi remote interface cho phép giao tiếp từ bên ngoài container)
      • Đây là hình dạng của EJB Local Object trên bộ nhớ
      • Các đối tượng trong cùng container có thể sử dụng cả Remote Interface – EJB Object lẫn Local Interface – Local Object. Tuy nhiên, đối tượng nằm ngoài container chỉ sử dụng được EJB Object mà thôi
      • Tất cả các hàm không được ném throws RemoteException
    • Local home Interface:
      • Tương tự như Home Interface
      • Đây là hình dạng của EJB Local Object trên bộ nhớ
      • Kiểu dữ liệu trả về của các hàm trong Home thông thường phải là kiểu Local Interface, kiểu Collection (không tính một số trường hợp ngoại loại của phương thức Home)
      • Tất cả các hàm không được ném throws RemoteException
    • Primary Key Class:
      • Định danh duy nhất trên bộ nhớ giúp người sử dụng xác định entity bean là duy nhất
      • Là một Java Object thông thường nhưng phải được serializable và tuân theo qui luật của Java Object serialization.
      • Kiểu dữ liệu của Primary Key phải là kiều Wrapper Class. Do vậy,
        • Đối với bảng chỉ có một khóa chính có 1 thuộc tính thì chúng ta nên chọn kiểu dữ liệu Wrapper của Java
        • Khi bảng có khóa chính có nhiều thuộc tính trờ lên thi chúng ta mới xây dựng kiểu dự liễu tương ứng với các thuộc tính làm khóa chính
      • Luật cài đặt cho PK
        • Class phải được khai báo là public và implements  từ java.io.Serializable
        • Constructor của Class Primary Key phải được khai báo là public
        • Các field trong class Primary key
          • Bắt buộc phải khai báo là public (Trái ngược với khái niệm của Java Beans) để container có thể lấy giá trị trực tiếp từ trong Primary từng field một để đồng bộ xuống DB
          • Các field này bắt buộc phải tồn tại trong ejb-jar.xml, là một phần thuộc tính của field làm cmp
          • Bắt buộc phải implement phương thức hashcode() và phương thức equals(Object) để container dùng phương thức này tạo ra định danh phân biệt giữa các instance bean và so sánh sự giống và khác nhau của 02 hay nhiều bean
    • Entity bean class:
      • Một Java áp dụng cơ chế persistence thông qua việc ánh xạ entity bean trên schema của CSDL vật lý.
      • Class ánh xạ một hàng dữ liệu trong table.
      • Class đưa ra các phương thức truy cập, xử lý dữ liệu
      • Class implements các phương thức callback để container quản lý entity bean và container sẽ dùng phương thức này đồng bộ dữ liệu giữa DB và instance bean
        • ejbCreate
          • Tạo mới một hàng dữ liệu dưới DB (Insert)
          • Đồng bộ dữ liệu tạo mới dưới DB với các attribute trong class – thiết lập giá trị cho các thuộc tính trong instance Bean
          • Trả về khóa chính cho Container
          • Kiểu dữ liệu trả về của hàm bắt buộc phải là kiểu Primary Key Class
          • Hàm này được kích hoạt khi người dùng gọi hàm create
          • Cơ chế hoạt động

            • Khi người dùng gọi lên create thông qua home object, container kích hoạt ejbCreate
            • ejbCreate thực hiện insert dự liệu xuống DB
            • Giả sử việc thực hiện thành công, Bean được cập nhật dữ liệu
            • Khóa chính được trả về cho container (home object được thông báo)
            • Contaier tạo ra EJB object và thực hiện kích hoạt hàm ejbPostCrete để tạo giá trị lưu trữ cho tất cả các fiedd insert
            • Trả ejbObject về cho client
            • Trong quá trình phát sinh xử lý, nếu không thành công container sẽ đưa lỗi CreateException hay DuplicateException nếu khóa chính bị trùng và 1 số lỗi khác tùy theo từng trường hợp
        • ejbPostCreate
          • Được kích hoạt sau khi hàm ejbCreate thực hiện thành công
          • Lưu trữ tính hiệu để hỗ trợ container trong việc đồng bộ dữ liệu
        • ejbRemove
          • Hủy instance bean(cụ thể là EJB Object và trả bean về pool cho container quản lý) và 01 record tương ứng trên CSDL
          • Hàm này được kích hoạt khi người dùng phát lệnh ejbRemove tương ứng
          • Cơ chế hoạt động

            • Người dùng dùng hàm remove trên EJB Object hay HomeObject đều đươc
            • Container kích hoạt ejbRemove thực hiện delete dưới DB
            • Giả sử việc thực thi thành công, container thực hiện remove bean instance ra khỏi bộ nhớ
        • ejbPassivate
          • Khi cần tài nguyên và bean sử dụng, container kích hoạt phương thức ejbStore() để đồng bộ dữ liệu xuống CSDL
          • Container kích hoạt phương thức ejbPassivate để release resources cho hệ thống hay container. Cụ thể ở đây ejbPassivate sẽ gán thuộc tính của khóa chính trở thành NULL
        • ejbActivate
          • Khi có yêu cầu sử dụng lại bean đã passivate, container kích hoạt phương thức ejbActive để tái tạo bean với các cấu trúc chứa đựng dữ liệu. Cụ thể ở đây, ejbActive sẽ thiết lập lại giá trị khóa chính cho instance bean thông qua key khóa chính được tìm từ container
          • Container kích hoạt phương thức ejbLoad() để đọc dữ liệu từ bộ nhớ và entity instance bean sẽ đón nhận giá trị.
        • ejbLoad
          • Đọc dữ liệu từ bộ lưu trữ lên bộ nhớ entity bean
          • Cụ thể ở đây container phải tìm kiếm hàng dữ liệu thõa mãn giá trị đang được nắm bởi bean, nếu có dữ liệu sẽ load tất cả giá trị vào trong thuộc tính của class ngoại trừ khóa chính
        • ejbStore
          • Lưu trữ giá trí của các field – attribute hiện hành trong instance bean đến bộ lưu trữ dữ liệu (CSDL vật lý tự động đồng bộ dữ liệu khi có sự thay đổi dữ liệu trên bộ nhớ của entity bean)
          • Cụ thể ở đây là container phải sử dụng lệnh Update để cập nhật tất cả dữ liệu trên bộ nhớ của DB, ngoại trừ khóa chính
        • Cơ chế hoạt động của ejbActive, ejbPassivate, ejbLoad, ejbStore

          • Passivate
            • Khi có yêu cầu cung cấp, tìm kiếm bean, nhưng hệ thống đang bận hay đầy
            • Container tìm kiếm bean ít sử dụng nhất LRU
            • Thực hiện gọi ejbStore để lưu trữ xuống DB
            • Sau khi ejbStore thành công gọi hàm Passivate để nhả resource là bean cho container
          • Activate
            • Khi có yêu cầu 1 bean mà bean đó nằm dưới bộ lưu trữ
            • Container thực hiện tìm kiếm beans
            • Giả sử tìm thấy, container phải lựa chọn bean đưa ra khỏi bộ nhớ bằng cơ chế Passive
            • Sau đó gọi hàm ejbActive để lấy bean từ pool cấu hình theo đúng yêu cầu
            • Sau đó gọi hàm ejbLoad để load dữ liệu vào instance Bean
        • setEntityContext(EntityContext ctx)
          • Lấy thông tin của context hiện hành để đưa ra các ứng xử phù hợp trên các bean tùy theo thông tin cấu hình của ứng dụng
          • Hàm này được kích hoạt trước khi hàm create kích hoạt nhằm tạo môi trường để kích hoạt bean và thực hiện load bean lên
          • Đây là gate way để container truy cập vào trong bean để thực hiện các tác vụ và thông qua gate way này bean có thể yêu cầu dịch vụ mà container hỗ trợ để phục vụ trong việc xử lý
        • unsetEntityContext
          • Giải phóng tất cả resource được cấp phát tại thời điểm hàm setEntityContext thiết lập
          • Hàm được kích hoạt tự động khi load entity bean mới, server bị crash, ứng dụng bị undeploy
        • ejbFindByXxx
          • Hỗ trợ tìm kiếm các bean hay tập các bean tương ứng thỏa điều kiện do người sử dụng nhập vào
          • Kiều dữ liệu trả về là một instance Bean hay một Collection
          • Hàm này được cung cấp tương ứng và được kích hoạt thông qua Remote Interface và Local Interface: findByXxx
          • Cơ chế thực hiện

            • Người dùng gọi hàm findByXxx bât kỳ thông qua Home Object
            • Container kích họat ejbFindByXxx tương ứng để tìm kiếm instance bean
            • Nếu tìm thấy, bước 5 được kích hoạt, return khóa chính cho Home Object
            • Nếu không tìm thấy, Container kich hoạt tìm dưới DB
            • Nếu có, Container thực hiện cơ chế Passivate để chọn bean nếu cần, Kích hoạt Activate để construct bean và gọi hàm ejbLoad để đem dữ liệu vào instance bean
            • Return  khóa chính cho Home Object để home Object tạo ra EJB Object
            • Tại thời điểm này, container có thể kích hoạt ejbPostCreate. Hàm ejbPostCreate được kích hoạt khi instance bean đó chưa có trên bộ nhớ, nếu instance đã tìm thấy tại bước thứ 2 thì ejbPostCreate đã có sẵn rồi
            • ejbObject được return về cho client
            • Trong các bước trước trên nếu không tìm thấy bất cứ đâu, container sẽ trả về lỗi ObjectNotFoundException hay NoSuchEntity
        • ejbSelect (tùy chọn – không bắt buộc)
          • Là một dạng phương thức truy vấn đặc biệt mà không được đưa đến client mà chỉ sử dụng trong chính bean được container kích hoạt trong quá trình yêu cầu xử lý
          • Thay vì hàm truy vấn trả ra Object như ejbFindByXxx thì ejbSelect giúp bean truy vấn dữ liệu trực tiếp trên các attributes cụ thể không phải trên từng instance bean object
          • Phương thức này cung cấp các utilities hỗ trợ bean trong quá trình xử lý và được kích hoạt khi người dùng sử dụng ejbHome để gọi
          • Cách cài đặt:
            • Hàm này có prefix bắt đầu là ejbSelect.
            • Hàm khai báo là public abstract và ném throws FinderException
            • Phải trả về a field CMP, hay một EJBObject/EJBLocalObject, hay ngay cả a java.util.Collection object
        • ejbHome (tùy chọn)
          • Hỗ trợ hàm hỗ trợ xử lý cho người dùng trong Home Object mà không cần kết hợp với bất kỳ instance bean nào
          • Hỗ trợ xử lý trên toàn bộ instance bean mà không cần kết nội với một bean cụ thể
          • Phương thức Home lấy dữ liệu thông qua việc kích hoạt phương thức ejbSelect để đưa trực tiếp thông tin cho người dùng
          • Được cài đặt trong bean class với tiếp đầu ngữ là ejbHomeXxx và trong Remote và Local Interface hàm Xxx tương ứng sẽ xuất hiện cho phép người dùng truy cập yêu cầu container kích hoạt mà không tìm trên instance bean cụ thể nào
      • Class này sẽ implementation tất cả các nội dung định nghĩa trong các interface (Remote, Home, Local, Local Home) giống về cách thức khai báo, ngoại trừ Remote Exception vì phần này được dùng chung cho cả Remote và Local interface
      • Class phải được implement javax.ejb.EntityBean
    • Deployment descriptor:
      • Danh sách thuộc tính container sử dụng cho việc deploy
      • Thông báo cho container xác định bean, class và các dịch vụ cần hỗ trợ của container như sercurity, transaction …
  • Mô tả chu kỳ sống của bean thông qua hình vẽ bên dưới

    • Tổng quát hóa vấn đề đó là khi deploy ứng dụng vào trong server, bean được khởi tạo một số instance cụ thể mà chưa chứa đựng dư liệu gì cả, bean ở trong pool
    • Khi có yêu cầu về xử lý, bean sẽ được chọn lựa từ trong pool và nạp dữ liệu để trở thành sẵn sàng
    • Khi đã xử dụng xong, các ejbObject bị hủy và instance bean được giải phóng thông tin và trả về pool

Định nghĩa và cách thức thực hiện của Bean Managed Persistence – BMP

  • BMP chứa code thực hiện các hành động xử lý việc mapping DB và instance bean
  • Người lập trình bắt buộc phải cung cấp toàn bộ cài đặt thao tác trên DB nhưng việc thực thi các hành động xử lý là do container kích họat
  • Người lập trình bắt buộc phải sử dụng kết nối thông qua JDBC, thiết lập kết nối đến DB để có thể thao tác trên DB
  • Lưu ý:  do việc vận dụng là của người lập trình do vậy phải thực hiện đóng kết nối DB một cách cẩn thận nếu không container sẽ phát sinh lỗi khi hoàn tất tác vụ mà chưa hoàn tất việc đóng kết nối
  • Các bước thực hiện
    • Step 1: tạo Remote Interface
      • Phương thức truy cập hay thiết lập các field cần cập nhật trong quá trình thao tác
      • Bẫy lỗi RemoteException cho từng phương thức.
    • Step 2: tạo Home Interface
      • Các phương thức create thực hiện các cách insert dữ liệu khác nhau (thể hiện qua tham số), bẫy lỗi CreateException
      • Các phương thức find thực hiện các cách tìm kiếm khác nhau trên CSDL nhưng bắt buộc phải có findByPrimaryKey, bẫy lỗi FinderException
      • Các phương thức bẫy lỗi RemoteException
    • Step 3: tạo Local Interface tương tự Remote Interface nhưng loại bỏ các bẫy lỗi RemoteException
    • Step 4: tạo Local Home Interface tương tư Home Interface nhưng loại bỏ các bẫy lỗi RemoteException
    • Step 5: tạo EntityBean class
      • Implements javax.ejb.EntityBean
      • Lập trình các phương thức kết nối CSDL, insert dữ liệu, xóa dữ liệu, tìm kiếm dữ liệu …
      • Implements các phương thức callback (9 phương thức bắt buộc) sử dụng các phương thức thao tác trên CSDL đã tạo phù hợp với từng tác vụ
      • Khai báo các thuộc tính tương ứng với các field trong table
      • Implements các phương thức get và set cho các thuộc tính
    • Step 6: thiết lập các tập tin ejb-jar.xml, jboss.xml
      • ejb-jar.xml

<entity>

             <ejb-name>tên</ejb-name>

             <home>home interface</home>

             <remote>remote interface</remote>

             <local-home>local home interface</local-home>

             <local>local interface</local>

             <ejb-class>bean class</ejb-class>

             <persistence-type>Bean</persistence-type>

             <prim-key-class>primarykey class</prim-key-class>

             <primkey-field>field khóa chính</primkey-field>

</entity>

      • jboss.xml

<jboss>

<enterprise-beans>

             <entity>

                         <ejb-name>tên ejb</ejb-name>

                         <jndi-name>tên lookup</jndi-name>

                         <local-jndi-name>tên lookup</local-jndi-name>

             </entity>

</enterprise-beans>

</jboss>

Định nghĩa và cách thức thực hiện của Container Managed Persistence – CMP

  • CMP cho phép container vận hành tất cả logic data access nghĩa là người dùng không cần lập trình các quá trình thao tác trên CSDL mà Container thực hiện tất cả các nhiệm vụ đó nhưng không hiển thị khi thực thi ứng dụng.
  • Field CMP
    • Field CMP tuân theo qui luật của serialization cho đối tượng Java.
    • Container thực hiện cơ chế persistence cho từng field dựa trên các miêu tả trong deployment descriptor.
    • Đặc điểm
      • EJB container làm nhiệm vụ persistence.
      • Container cung cấp các công cụ để phát sinh mã trong EJB Class giúp ánh xạ các phương thức trong bean đến result set.
      • Khả năng thực hiện pooling dễ dàng
      • Reuse: khả năng tái sử dụng cao
      • Giảm bớt code trong quá trình lập trình vì người dùng chỉ khai báo các đối tượng để container quản lý và thực hiện
      • Khó điều khiển vì mọi hoạt động đều không hiển thị khi thực thi và không thể lập trình tác động trực tiếp
  • CMR: Container Managed Relationship
    • Hỗ trợ relation giữa 02 enterprise bean trong cùng container tương tự như relationship trong DBMS.
    • Các quan hệ gồm có 1:1, 1:n và n:n. Các đối tượng n là một tập hợp tương ứng với khóa ngoại trong CSDL quan hệ
    • Mỗi relation có thể thực hiện theo 01 (uni-direct) chiều hay 02 (bi-direct) chiều (có các phương thức CMR getter để truy cập bean kết nối).
    • Ví dụ: dạng cài đặt kết nối 1:n trên DBMS là dạng uni – direct  vì đối tượng 1 truy cập được đối tượng nhiều thông qua khóa ngoại. Dạng cài đặt thực tế luôn luôn bi – direct vì container check liên tục liên kết
    • Đặc điểm
      • Abstract field (tương tự một field của table trong DBMS được cài đặt trong bean) của bean class
      • Các quan hệ sẽ được khai báo trong deployment descriptor để container có thể quản lý và vận hành.
  • Bean class
    • Thể hiện các đối tượng và thành phần để container thực hiện việc ánh xạ và đồng bộ với CSDL.
    • Implement các phương thức callback (để trống vì mọi hoạt động do Container thực hiện)
    • Implements javax.ejb.EntityBean
    • Khai báo abstract và public với bean class
    • Implement các phương thức get – set các field
    • Khai báo abstract đối với phương thức get – set.
    • Không cần vận dụng các phương thức ejbFindByXxx trong bean class và khai báo câu lệnh truy vấn có điều kiện trong Deployment Descriptor.
  • Các thành phần Remote, Home, Local, LocalHome tương tự như BMP
  • Deployment Descriptor
    • ejb-jar.xml

<entity>

...

<persistence-type>Container</persistence-type>

...

<abstract-schema-name>tên schema</abstract-schema-name>

<cmp-field><field-name>tên field</field-name></cmp-field>

<cmp-field><field-name>...</field-name></cmp-field>

<primkey-field>tên field</primkey-field>(có thể bỏ với Object class)

<query>

             <query-method>

                 <method-name>findByXxx</method-name>

                     <method-params>

                         <method-param>loại dữ liệu</method-param>: không cần dạng dữ liệu primitive

                     </method-params>

             </query-method>

             <ejb-ql>

<![CDATA[SELECT OBJECT(a) FROM tênschema AS a WHERE a.tên field=?1]]>

             </ejb-ql>

</query>

</entity>

    • jbosscmp-jdbc.xml

<jbosscmp-jdbc>

<defaults>

            <datasource>tên tham chiếu</datasource>

            <datasource-mapping>DBMS tham chiếu</datasource-mapping>

            <create-table>False/True</create-table>

            Các element khác có thể áp dụng như phần điều khiên thuộc tính khởi tạo có liên quan đến DBMS như BMP

</defaults>

<enterprise-beans>

            <entity>

                        <ejb-name>tên ejb</ejb-name>

                        <table-name>tên table</table-name>

                        <cmp-field>

                                    <field-name>tên field trong class</field-name>

                                    <column-name>tên field table</column-name>

                        </cmp-field>

                        ...

            </entity>

</enterprise-beans>

</jbosscmp-jdbc>

    • jboss.xml: áp dụng tương tự như BMP

Trên đây là một số nội dung khái niệm cơ bản về Entity Bean bao gồm cả BMP và CMP

Đôi lúc lý thuyết dùng để nêu rõ khái niêm và vẫn còn chút chưa rõ ràng, đặc biệt trong nội dung liên quan đến công nghệ. Do vậy, để hiểu rõ và có thể tiếp cận được Entity Bean, chúng ta sẽ thực hiện cài đặt BMP và CMP trên dữ liệu cụ thể trong các chủ đề tutorial tiếp theo

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

Đăng nhận xét