Thứ Tư, 28 tháng 12, 2016

EJB - 2. Sử dụng Session Bean

I. Để tạo ra một ứng dụng EJB mới, thực hiện các bước sau đây trong NetBeans IDE:

1. Chọn File => New Project. Sau đó chọn danh mục Java EE và kiểu project là Enterprise Application. Nhấn Next.

2. Đặt tên project là EJBDemo. Nhấn Next.

3. GlassFish Server 4.1 được chọn làm máy chủ. Sau đó chọn phiên bản Java EE 7. Nhấn Finish.

4. Thành công trong việc tạo một ứng dụng này.

II. Để tạo một Session Bean mà được truy cập bằng cách sử dụng chế độ Local, thực hiện các bước sau đây trong NetBeans IDE:

1. Nhấp chuột phải vào EJBDemo-ejb và chọn New => Other. Chọn danh mục Enterprise JavaBeans và loại tập tin là Session Bean. Nhấn Next.

2. Chỉ định thông tin Session Bean như sau và sau đó nhấn Finish:

3. Thêm dòng code vào giao diện SayHelloSessionBeanLocal để khai báo phương thức sayHello.
SayHelloSessionBeanLocal.java là giao diện Local của Session Bean mà NetBeans tự động tạo ra.

4. Thực hiện phương pháp sayHello trong lớp SayHelloSessionBean.
Nhận thấy rằng lớp SayHelloSessionBean thực hiện giao diện Local là SayHelloSessionBeanLocal.

5. Nhấp chuột phải vào EJBDemo và chọn Deploy.

6. Deploy thành công.

III. Để tạo một Servlet, thực hiện các bước dưới đây trong NetBeans IDE.

1. Nhấp chuột phải vào EJBDemo-war và chọn New => Other. Sau đó chọn danh mục Web và loại tập tin là Servlet. Nhấn Next.

2. Chỉ định thông tin Servlet như sau và sau đó nhấn Finish:





3. Thực hiện thay đổi cho lớp SayHelloServlet.
Nhấn Alt + Insert rồi chọn Call Enterpise Bean. Sau đó nhấn OK.
Thành công trong việc tạo.

4. Thay đổi phương thức ProcessRequest của SayHelloServlet.

IV. Để tạo một JSP, thực hiện các bước dưới đây trong NetBeans IDE.

1.Trong index.html, sửa đổi trong thẻ title của trang và thêm một thẻ form trong thẻ body.

2. Nhấn chuột phải thư mục Web Pages trong EJBDemo-war. Chọn New => JSP rồi đặt tên file là sayhello. Sau đó nhấn Finish.

3. Trong sayhello.jsp, chúng ta sẽ thực hiện sửa đổi như sau.

V. Output:

1. Nhấp chuột phải vào EJBDemo và chọn Run.

2. Chạy thành công. Nhập tên trong textbox rồi nhấn Send.
 index.html

sayhello.jsp


Chủ Nhật, 25 tháng 12, 2016

EJB - 1. Miêu tả lại về công nghệ của Java EE và EJB

A. Java EE:
"Java EE" tên đầy đủ là "Java Enterprise Edition" dịch sang tiếng việt có nghĩa là là "Java Phiên Bản Doanh Nghiệp", nó là một nền tảng dành cho việc xây dựng các ứng dụng cấp doanh nghiệp.
Java EE tập hợp nhiều công nghệ kỹ thuật và phối hợp chúng với nhau, việc này sẽ làm giảm đáng kể chi phí và độ phức tạp cho việc xây dựng, phát triển, triển khai, quản lý các tầng làm việc (managing multi-tier), cho các ứng dụng máy chủ trung tâm.

Java EE được xây dựng dưa trên nền tảng Java SE và có thêm các tập APIs (application programming interfaces) để phát triển các ứng dựng phái máy chủ một cách nhanh chóng, linh động, mạnh mẽ, khả năng mở rộng cao, đáng tinh cậy và bảo mật.

Java EE đã ra rất nhiều phiên bản và có rất nhiều thành phần mới hoặc hỗ trợ mới khác nhau theo từng phiên bản tuy nhiên bài viết này chỉ nhắm vào mục đích là khái miện cơ bản về Java EE, nên mình chỉ nói tới hai phần chủ chốt nhất trong nền tảng Java EE là:

  • Enterprise Java Beans (EJB): một thành phần kiến trúc của các ứng dụng server được quản lý, sử dụng để đóng gói các business logic của các ứng dụng. Kỹ thuật EJB cho phép nhanh chóng tạo ra các ứng dụng có các tính chất như là đơn giản hóa việc phân phối, dễ dàng tương tác, an toàn và linh hoạt dựa trên công nghệ Java.
  • Java Persistence API (JPA): một framework cho pháp nhà phát triển quản lý dữ liệu bằng cách sử dụng ánh xạ đối tượng quan hệ (Object Relational Mapping - ORM) trong các dứng dụng được xây dựng trên nền tảng Java

Nói tóm lại bạn có thể hiểu đơn giản Java EE là một nền tảng cung cấp nhiều công nghệ, kỹ thuật, dịch vụ giúp ta có thể nhanh chóng tạo ra các ứng dụng ở cấp doanh nghiệp, còn bạn muốn biết nó hỗ trợ như thế nào thì phải đi chi tiết vào thực tế mới có thể hiểu rõ được.

Một điều nữa khi nói tới ứng dụng doanh nghiệp thì sẽ liên quan tới services và client chính vì thế Java EE thiên về hướng Server-Client.


B. EJB:
EJB (Enterprise Java Bean) là các thành phần công nghệ phía máy chủ dùng để đóng gói lớp business logic và hỗ trợ mạnh việc thực hiện các giao tác và bảo mật.


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 loại thành Bean thao tác. Nó chỉ có nhiệm vụ phục vụ hà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 2 loại:
  • Stateless: 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 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 đời thực. Nó 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ảng 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ì tồn tại 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 chia ra làm 2 loại:
  • Bean Managed: Có khả năng thực thi các câu truy vấn cơ sở dữ liệu để 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ảng trong cơ sở dữ liệu.
  • Container Managed: Có thể không cần phải sử dụng lệnh SQL để tự tìm kiếm hạy 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 hay cột dữ liệu tương ứng với các bảng 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.
Message-Driven Bean: Là một chuẩn mới. Mục đích 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 và Entity chỉ phục vụ cho các dịch vụ đồng bộ. Do đó cách sử dụng Message Driven Bean có phần giống với Session Stateless Bean, chỉ khác ở cách gọi Bean.

Tóm lại đây là mô hình phân tầng và lập trình đối ợ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. 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. 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. Hiểu vEJB sẽ giúp chúng ta dễ dàng sâu hơn. Cũng như lĩnh vực lập trình phân tán triệu gọi đối ợng từ xa, lập trình trong mô hình phân tầng EJB rất mới mvà khá phức tạp đối với hầu hết các lập trình viên.

Thứ Hai, 19 tháng 12, 2016

INTXML - DOM2

 - DOM Level 2 (DOM 2) được phát triển từ DOM Level 1 (DOM 1). Nó được xây dựng dựa trên các giao diện DOM 1
 - DOM 2 mô hình có 6 chi tiết kỹ thuật khác nhau:


 + Core: Mở rộng các chức năng của DOM1 Core. Nó cũng chứa các giao diện chuyên dụng dành riêng cho XML. Phương thức này bao gồm getElementById, nhiều phương thức liên quan đến namespace.
 + Views: Cho phép các chương trình và các kịch bản để truy cập tự động cập nhật nội dung của một tài liệu. Các giao diện được giới thiệu AbstractView DocumentView.
 + Events: Đưa ra một hệ thống sự kiện chung cho các chương trình và kịch bản. Phương pháp đặc biệt ở đây bao gồm addEventListener handleEvent. Một số giao diện khiến dễ dàng hơn khi giải quyết với các sự kiện như: EventTarget, EventListener, DocumentEvent, MouseEvent, MutationEvent, vv Tuy nhiên, nó không bao gồm một giao diện cho các sự kiện bàn phím, mà sẽ được xử lý trong các phiên bản sau này của DOM.
 + Style: Cho phép các chương trình và các kịch bản để truy cập tự động cập nhật nội dung của style sheets. có giao diện cho Style Sheets, Cascading Style Sheets, CSSRule, CSSStyleDeclaration, getComputedStyle (hỗ trợ trong Mozilla), CSS2Properties, và tất cả các quy tắc phương tiện truyền thông.
 + Traversal/Range: Cho phép các chương trình và các kịch bản để tự động đi qua và xác định một loạt các nội dung trong tài liệu. Các DOM2 Traversal cung cấp các giao diện như NodeIterator và TreeWalker để dễ dàng đi qua các nội dung của một tài liệu. Các DOM2 Range cho phép việc tạo ra, chèn, sửa đổi, và xóa một loạt các nội dung trong Document, DocumentFragment, hoặc Attr. Nó có thể được mô tả như là lựa chọn tất cả các nội dung giữa một cặp điểm ranh giới.
 + HTML: Cho phép các chương trình và các kịch bản để truy cập tự độngcập nhật nội dung, cấu trúc của tài liệu HTML. Nó mở rộng các giao diện được định nghĩa trong DOM1 HTML, sử dụng các khả năng DOM2 Core. Nó cũng giới thiệu về contentDocument property, một cách hữu ích để truy cập tài liệu chứa trong một khung.

=> Tóm lại DOM 2 trang bị các công cụ thực sự mạnh mẽ trong việc truy xuất, đọc và làm việc với tài liệu XML.

Thứ Bảy, 10 tháng 12, 2016

INTXML - DOM vs. SAX

I. XML là gì? Viết tắt của từ eXtensible Markup Language, hay còn gọi là ngôn ngữ đánh dấu mở rộng do W3C đề nghị với mục đích tạo ra các ngôn ngữ đánh dấu khác. Đây là một tập hợp con đơn giản có thể mô tả nhiều loại dữ liệu khác nhau nên rất hữu ích trong việc chia sẻ dữ liệu giữa các hệ thống.

II. Parser:
1. Khái niệm: Là 1 gói phần mềm, 1 thư viện hay 1 công cụ dùng để trước hết phân tích dữ liệu trong file XML và sau đó chuyển đổi dữ liệu này thành dạng dữ liệu mà các phần mềm khác có thể sử dụng được.
2. Các kỹ thuật phân tích:
- Phân tích dựa trên sự kiện (Event-based): Theo kỹ thuật này dữ liệu trong XML sẽ được đọc tuần tự từ trên xuống. Mỗi lần đọc 1 phần của dữ liệu sẽ được đưa vào phân tích ví dụ như 1 element. Simple API for XML (SAX) được xây dựng trên kỹ thuật này.
- Phân tích dựa trên đối tượng (Object-based): Theo kỹ thuật này dữ liệu trong XML sẽ được đọc và phân tích trên bộ nhớ. Document Object Model (DOM) được xây dựng theo kỹ thuật này.

III. Phân biệt: 
1. DOM:
- Document Object Model là một phương pháp tiếp cận dữ liệu từ XML, trong đó tất cả các thành phần của XML như thẻ, thuộc tính, text… đều được xem như là các đối tượng. Dựa vào các đối tượng này mà chúng ta có thể trích xuất thông tin, thay đổi thông tin hay truy vấn thông tin dựa vào các hàm mà đối tượng cung cấp. 
- W3C DOM là tiêu chuẩn mà W3School giới thiệu. Tiêu chuẩn này không phụ thuộc vào hệ điều hành hay ngôn ngữ lập trình. W3C DOM được chia làm 3 phần: Core DOM, XML DOM, HTML DOM.
- Tất cả các thành phần trong XML đều được xem như là 1 “node”. Trong đó root là document node, các thẻ là element node, thuộc tính là attribute node, text là text node, ghi chú là comment node… 
- Khi parser đọc XML thành đối tượng DOM trên bộ nhớ chúng ta sẽ có 1 cấu trúc cây với các đối tượng là các node và trên cấu trúc này chúng ta sẽ thấy mối quan hệ phân tầng giữa các node. Trên cùng là thẻ root (document node) từ node này chúng ta có thẻ rẻ nhánh đến các tầng thấp hơn của cấu trúc cây cho đến khi chúng ta chạm tới text node là tầng thấp nhất của cấu trúc này. - Mối quan hệ giữa các node được mô tả bằng thuật ngữ “parent” và “child” (cha và con). Thuật ngữ “leaf node” dùng để chỉ các node không có child node.
- Do DOM là tiêu chuẩn của W3School không phụ thuộc vào ngôn ngữ lập trình do đó tất cả các ngôn ngữ lập trình đều có thể dùng tiêu chuẩn này để đọc dữ liệu từ XML. 
- Ưu điểm:
+ Dễ dàng sử dụng.
+ Dễ dàng quét các phần tử trong XML.
+ Có thể truy xuất ngẫu nhiên.
- Nhược điểm:
+ Việc phân tích chỉ làm 1 lần.
+ Tốn nhiều bộ nhớ hơn.

2. SAX:
- Simple API for XML (SAX) là một phương pháp phân tích dữ liệu XML dựa vào sự kiện trong quá trình đọc file XML từ trên xuống dưới. Như vậy để dùng phương pháp này các ngôn ngữ lập trình cần định nghĩa ra các sự kiện và các hàm tương ứng với từng sự kiện. Khi đó người lập trình sẽ viết class dựa trên các hàm mà ngôn ngữ lập trình cung cấp và dùng class này để phân tích dữ liệu XML. Trong quá trình phân tích, khi gặp sự kiện nào parser sẽ gọi các đoạn code trong hàm tương ứng sự kiện để thực thi. Ví dụ như trong Java, khi parser gặp sự kiện mở thẻ, parser sẽ gọi lại các đoạn code trong hàm “startElement” để thi hành.
- Một điểm cần lưu ý rằng SAX không ghi nhớ XML như một cấu trúc cây trên bộ nhớ. SAX chỉ xây dựng cấu trúc của nhiệm vụ đang thi hành trên bộ nhớ do đó SAX sẽ thực hiện nhanh hơn và tốn ít tài nguyên hơn.
- Ưu điểm: Tốn ít bộ nhớ hơn.
- Nhược điểm:
+ Không có công cụ để quét các phần tử trong XML.
+ Không thể truy xuất ngẫu nhiên.
+ Không hỗ trợ namespace, không thể thêm sửa xóa XML.

=> Tóm lại SAX Parser bao giờ cũng nhanh hơn DOM Parser vì nó chỉ tải một phần nhỏ của tập tin XML và không đòi hỏi nhiều bộ nh.

Thứ Năm, 3 tháng 11, 2016

SERVJSP - Buổi 7: JSP Life Cycle

I. Khái niệm JSP:
 - Là một công nghệ để phát triển các Webpage mà hỗ trợ nội dung động, giúp các lập trình viên chèn java code vào trong các HTML page bằng việc sử dụng các JSP tag đặc biệt, hầu hết bắt đầu với <% và kết thúc với %>.
 - Một thành phần JavaServer Pages (JSP) là một loại Java Servlet, được thiết kế để thực hiện vai trò của một giao diện người dùng (User Interface) cho một ứng dụng Java Web. Lập trình viên Web viết JSPs như là các text file mà kết nối HTML code hoặc XHTML code, phần tử XHTML, và các JSP actions và câu lệnh JSP được nhúng.
 - Sử dụng JSP, bạn có thể thu thập input từ người dùng thông qua các Webpage Form, trình bày các record từ một Database hoặc đăng ký quyền ưu tiên của người dùng, truy cập các thành phần JavaBeans, truyền điều khiển giữa các page và chia sẻ thông tin giữa các request, page,…

II. Tại sao sử dụng JSP?
 - JavaServer Pages (JSP) thường hoạt động với cùng mục đích như các chương trình độc lập bởi sử dụng Common Gateway Interface (CGI). Nhưng JSP thường có một số lợi thế trong khi so sánh với CGI:
 + Hiệu năng tốt hơn đáng kể bởi vì JSP cho phép nhúng các phần tử động trong chính các HTML page thay vì phải có một CGI file riêng biệt.
 + JSP luôn luôn được biên dịch trước khi nó được xử lý bởi Server, không giống như CGI/Perl mà yêu cầu Server tải một trình thông dịch (Interpreter) và Target Script mỗi khi trang được yêu cầu.
 + JavaServer Pages (JSP) được xây dựng ở trên cùng của Java Servlet API, vì thế, giống Servlet, JSP cũng có quyền truy cập tới tất cả Enterprise Java APIs mạnh mẽ, bao gồm JDBC, EJB, JAXP,…
 + Các JSP page có thể được sử dụng để kết nối với Servlet mà xử lý Business logic, mô hình được hỗ trợ bởi Java Servlet.
 - Cuối cùng, JSP là một phần toàn bộ của Java EE, một Platform đầy đủ cho các ứng dụng lớp Enterprise. Nghĩa là, JSP có thể hoạt động như là một phần trong các ứng dụng đơn giản nhất cũng như các ứng dụng phức tạp.

III. Lợi thế của JSP:
 - So với Active Server Pages (ASP): Lợi thế của JSP có thể coi là gấp đôi. Đầu tiên, các phần động được viết bằng Java, không phải bằng Visual Basic hoặc ngôn ngữ MS khác, vì thế nó mạnh mẽ hơn và dễ dàng để sử dụng hơn. Thứ hai, nó thích hợp cho các Hệ điều hành khác, không chỉ là Microsoft Web Server.
 - So với Pure Servlets: Nó tiện lợi hơn khi viết (và sửa đổi) HTML, vì có nhiều lệnh println hơn.
 - So với Server-Side Includes (SSI): SSI chỉ dành cho các thể đơn giản, không dành cho các chương trình “thực” mà sử dụng Form Data, tạo kết nối Database.
 - So với JavaScript: JavaScript có thể tạo HTML động trên Client nhưng lại tương tác khó khăn với Web Server để thực hiện các tác vụ phức tạp như truy cập Database và xử lý hình ảnh,…
 - So với Static HTML: Tất nhiên, HTML thông thường không thể chứa thông tin động.

IV. Vòng đời:
Sơ đồ dưới đây cho thấy các giai đoạn khác nhau của vòng đời jsp. Nói rộng ra, các giai đoạn này có thể được phân loại thành ba:
1. Initializing:
 - Khi một trình chứa web nhận được một jsp request (có thể là lần đầu tiên hoặc sau này), nó sẽ kiểm tra servlet của jsp instance. Nếu không có servlet instance có sẵn hoặc nếu nó là cũ hơn các jsp, sau đó, những trang web chứa tạo ra servlet instance sử dụng các giai đoạn sau: Translation, Compilation, Loading, Instantiation, Initialization.
 - Translation: Chuyển trình chứa web (chuyển đổi) mã jsp thành một mã servlet. Điều này có nghĩa rằng jsp thực sự là một servlet. Sau giai đoạn này, không có jsp, tất cả mọi thứ là một servlet. Nhiệm vụ này sẽ tạo ra một trang jsp hoàn chỉnh, bằng cách xem xét tất cả các thành phần bao gồm. Trên đây, nội dung tĩnh và nội dung động được xử lý khác nhau. Các kết quả là một lớp java thay vì một trang html (mà chúng tôi đã viết). Đây là cách cấu trúc của một jsp biên soạn thành một lớp java sẽ được.
  - Complication: Servlet tạo được biên dịch để xác nhận các cú pháp. Vì nó là một lớp java, biên dịch được thực hiện bằng lệnh java. Điều này sẽ tạo ra các byte code để được chạy trên JVM.
 - Loading: Các byte code được tải bởi bộ tải lớp được sử dụng bằng trình chứa web. Đây là một quy trình chuẩn của việc sử dụng bất kỳ lớp java.
 - Instantiation: Trong bước này, instance của lớp servlet được tạo ra để nó có thể phục vụ theo yêu cầu.
 - Initialization: Khởi tạo được thực hiện bằng cách gọi phương thức jspInit(). Đây là một hoạt động thời gian khi bắt đầu quá trình khởi tạo. Khởi tạo sẽ làm cho các đối tượng ServletContext và ServletConfig có sẵn. Người ta có thể truy cập vào nhiều thuộc tính liên quan đến trình chứa web và các servlet chính nó. Sau khi khởi tạo servlet đã sẵn sàng để xử lý yêu cầu.
2. Request Processing: Toàn bộ quá trình khởi tạo được thực hiện làm cho các servlet có sẵn để xử lý các yêu cầu gửi đến. jspService() là phương pháp mà thực sự xử lý yêu cầu. Nó in các response trong html (bất kỳ khác) định dạng, sử dụng đối tượng 'out'.
3. Destruction:
 - Bất cứ khi nào các máy chủ được tắt hoặc khi máy chủ cần bộ nhớ, máy chủ loại bỏ sự thể hiện của các servlet. Phương thức jspDestroy() có thể được gọi bởi các máy chủ sau khi khởi tạo và trước hoặc sau khi xử lý yêu cầu. Một khi đã phá hủy jsp cần phải được khởi tạo một lần nữa.
 - Chỉ cần để tổng hợp, trình chứa web xử lý các yêu cầu đến một jsp bằng cách chuyển đổi nó thành một servlet và sau đó bằng cách sử dụng servlet này để tạo ra các phản ứng. Ngoài ra khi các máy chủ tắt, trình chứa này cần phải rõ ràng các instance.

Thứ Bảy, 29 tháng 10, 2016

SERVJSP - Buổi 5: Java Persistance API

I. Khái quát:
1. Khái niệm:  
 - Java Persistence API hay JPA là một đăc tả Java cho việc ánh xạ giữa các đối tượng Java tới cơ sở dữ liệu quan hệ sử dụng cộng nghệ phổ biến là ORM (Object Relational Mapping). JPA API cung cấp đầy đủ các công cụ cho phép người lập trình có thể tạo cơ sở dữ liệu một cách đơn giản và nhanh chóng. JPA API có thể dùng để persist một đối tượng business (POJO) vào trong cơ sở dữ liệu hoặc lấy dữ liệu từ cơ sở dữ liệu và ánh xạ ra các đối tượng business một cách đơn giản.
 - Ngày nay đa số các nhà cung cấp đều hỗ trợ cài đặt JPA cho framework persistence của họ. Vì vây, người lập trình có thể lựa chọn nhà cung cấp tốt nhất tùy thuộc yêu cầu ứng dụng của mình.
2. Tại sao nên dùng JPA:
 - JPA là một đặc tả đã được chuẩn hóa và là một thành phần trong đặc tả EJB 3.
 - Có nhiều framework ORM miễn phí hỗ trợ có thể dùng để phát triển nhiều loại ứng dụng khác nhau.
 - Ứng dụng xây dựng trên JPA mang tính di động cao.
 - Có thể sử dụng cho cả ứng dụng J2EE và J2SE.
 - Hỗ trợ cầu hình triển khai bằng annotation và xml.

3. Có 3 thành phần chính:
* Entity:
 - Là một Persistence Object – một POJO được có khả năng Persist đến Database.
 - Mô hình Entity là 1 – 1 theo nghĩa 1 Entity Class là một Table dưới Database và 1 Entity Instance là một hàng dữ liệu dưới Database.
 - Các Instance được tạo bằng từ khóa new từ các Entity Class. Tuy nhiên, nó chỉ được đồng bộ xuống Database khi các Instance này được các EntityManager quản lý.
 - Các thuộc tính trong Entity phải được truy cập thông qua các hàm get và set – bắt buộc được xây dựng trong Entity Class.
 - Một số yêu cầu khi cài đặt Entity Class:
 + Phải implements serializable.
 + Phải sử dụng @Entity.
 + Phải có một Constructor không tham số.
 + Class và các phương thức không được khai báo là final.
 + Các thuộc tính phải được khai báo khác như public và phải có đầy đủ get và set để truy cập.
 + Phải có một thuộc tính làm khóa chính với annotation @Id.

* EntityManager:
 - Làm nhiệm vụ để quản lý việc đồng bộ dữ liệu từ Entity Instance xuống Database và lấy dữ liệu từ Database đưa vào các Instance thông qua các Query.
 - Mô hình tổng quát của EntityManager:

 - Một EntityManager Instance cho phép kết nối từ bên ngoài vào Databse ở Client hay kết nối đến Database cục bộ khi ở ngay trong Server.
 - Một số phương thức của EntityManager hỗ trợ trong quá trình xây dựng ứng dụng:
 + public void persist (Object entity): Lưu trữ Entity vào Database (Insert) và đưa Entity Instance vào Persistence Context.
 + public <T> T merge (T entity): Đưa một Entity đã được quản lý từ bên ngoài Persistence Context vào lại bên trong.
 + public void remove (Object entity): Xóa một dòng dữ liệu dưới Database và đưa Entity ra khỏi Persistence Context và yêu cầu Container hủy nó đi.
 + find (Entity class, Primary Key): Tìm kiếm một Entity Instance từ bộ nhớ hay Database (đem từ Database đổ vào Instance) và đưa Entity Instance này vào Persistence Context.

* EntityManager Factory: Là đối tượng dùng để tạo ra Instance của EntityManager.
4. Tính năng:
- JPA hỗ trợ Pluggable, tức là có thể sử dụng nhiều nhà hãng cung cấp thứ ba như Hibernate hay Toplink.
- Hỗ trợ Annotation.
- Giảm bớt số lớp yêu cầu cho việc phát triển Persistence.
- Không cần phải viết các mô tả triển khai trong xml. Annotation dựa trên Metadata đã hỗ trợ trong các ứng dụng JPA.
- Đã chuẩn hóa ORM và dễ dàng phát triển hơn.
- JPA hỗ trợ truy vấn động và tĩnh.
- Nhiều IDE hỗ trợ phát triển ứng dụng JPA và có thể tự động sinh code ánh xạ từ cơ sở dữ liệu thành các Entity và ngược lại.

 
II. Serializable:
 - Serialize có nghĩa là sắp theo thứ tự. Khi ta muốn lưu một đối tượng xuống tập tin trên đĩa để lưu trữ, ta phải định ra trình tự lưu trữ của dữ liệu trong đối tượng. Khi cần tái tạo lại đối tượng từ thông tin trên tập tin đã lưu trữ, ta sẽ nạp đúng theo trình tự đã định trước đó. Đây được gọi là quá trình Serialize.
 - Nói chính xác hơn, Serialize là tiến trình biến đổi trạng thái của đối tượng theo một định dạng có thể được lưu trữ hay dịch chuyển.
 - Lớp Serializable giúp Java quản lí và ràng buộc được các đối tượng cả khi đọc và khi ghi xuống tập tin. Việc đọc và ghi các đối tượng ko phải lúc nào cũng đơn giản, có rất nhiều đối tượng bên trong bao gồm nhiều đối tượng khác. Nhưng một khi đã cài đặt giao diện Serializable. Java sẽ chịu trách nhiệm dò tìm bất cứ đối tượng nào liên quan để “túm lấy” và đẩy xuống tập tin cùng với đối tượng. Đồng thời, quá trình đọc lên cũng sẽ đảm bảo khôi phục đầy đủ các đối tượng liên quan.

  - Làm thế nào để Serialize một object? Ta cần đảm bảo rằng lớp Class của Object đó cài đặt giao diện java.io.Serializable. Đây là một giao diện trống, không có method nào cần cài đặt cả. Thông thường thuật toán Serialization sẽ thực hiện các công việc sau:
  • Ghi xuống các siêu dữ liệu (metadata) về lớp Class của đối tượng đó.
  • Ghi đệ quy các thông tin chi tiết của các lớp cha cho tới khi nó gặp class Object.
  • Sau khi hoàn tất việc ghi các siêu dữ liệu, tiến trình sẽ bắt đầu ghi các dữ liệu thật sự của các đối tượng.
 - Giả sử chúng ta đã có lớp Person.java. Bây giờ chúng ta cần chỉnh sửa một vài vần đề nữa, cụ thể đó là:
 + Đối với các lớp cần Serialize, chúng ta phải cho lớp đó implements interface java.io.Serializable.
 + Tạo 1 lớp chuyên dùng cho việc serialize đối tượng với 2 phương thức SerializeObject và DeserializeObject.












Như vậy, với lớp này chúng ta có thể dùng nó cho các lần Serialize bất kỳ đối tượng nào xuống file.

III. JPA Configuration:
 - Persistence Unit:
 + Là một tập hợp các lớp ánh xạ tới một cơ sở dữ liệu cụ thể.
 + Được định nghĩa trong một tập tin mô tả đặc biệt có tên persistence.xml.
 + Có nhóm hợp lý của các lớp thực thể, ánh xạ metadata của chúng, và các cấu hình liên quan đến một cơ sở dữ liệu.
 + Các chi tiết cấu hình trong persistence.xml được sử dụng trong khi thu thập EntityManager Instance trong chương trình trên Client.
 + Các EntityManager Instance phù hợp tiếp diễn các Entity Instance trong Database.
 - Đoạn code hiển thị các mã cho một tập tin persistence.xml phát triển như là một phần của ứng dụng doanh nghiệp.
 - Một số thuộc tính xác định trong yếu tố <persistence-unit> như sau:
 + <description>: Mô tả các đơn vị bền vững và được tùy chọn.
 + <provider>: Phải hiển thị trong môi trường J2SE hoặc khi các ứng dụng đòi hỏi một hành vi cung cấp cụ thể.
 + <transaction-type>: Thường có giá trị là JTA, RESOURCE_LOCAL.

 + <jta-data-source>/<non-jta-data-source>: Dùng để chỉ định đặt tên Java và tên thư mục Interface (JNDI) của nguồn dữ liệu. JNDI được sử dụng bởi các cung cấp bền bỉ.
 + <mapping-file>: Chứa một danh sách của một hay nhiều tập tin XML được sử dụng để ánh xạ O/R. Các tập tin ánh xạ được sử dụng để liệt kê các lớp Entity mà có sẵn trong đơn vị bền vững.
 + <properties>: Chỉ ra các thuộc tính cấu hình mà là cung cấp cụ thể cho các đơn vị bền vững. Bất kỳ thuộc tính nào không được công nhận bởi các cung cấp bền vững đã được loại bỏ.