Thứ Hai, 26 tháng 12, 2016

Integrating Session Beans, Entities, Message-Driven Beans, and Web Services

Technologies EJB Có 3 Loại


1. Entity beans 


- Tương tự với các đối tượng thực thể (entity object) trong đặc tả UML [Jacobson/UML]. 


- Entity bean chứa các thông tin tác vụ và các phương thức hoạt động của nó. 


- Một entity beans có thể được lưu trữ và khôi phục lại một các tự động bởi trình quản lý ejb, với việc sử dụng cơ sở dữ liệu quan hệ hay một hệ thống lưu trữ nào đó do bạn chọn. 


- Entity Bean được thiết kế nhằm mô hình hoá dữ liệu trong CSDL thành các đối tượng phân tán, có thể triệu gọi từ xa theo cơ chế RMI-IIOP. Nó ánh xạ 1-1 với dữ liệu trong database. 


- Entity có thể tự quản lý việc truy xuất dữ liệu hay giao cho trình chứa quản lý.


2. Message-driven beans


- Chịu trách nhiệm điều khiển các message giữa client và server. 


- Message này sẽ được truyền theo hình thức P2P hay broadcast (quảng bá)…. 


- Khi triển khai code Bean không giống 4 loại Bean trên. Tuy nhiên nó rất quan trọng. Các hệ thống ngân hàng giao tiếp thanh toàn tài khoản với nhau chỉ dùng message cho nên nên dùng Message driven Bean.


- Có 2 loại Bean trong Message driven Bean và các loại Bean này nằm trong MOM (Message Oriented Middleware). Hai loại đó là Queue và Topic. Ứng với mỗi loại Bean này MOM có 2 loại hàng đợi phù hợp cho nó. 

    • Quese thì chỉ cho 1 client gửi 1 message tới 1 người ( ví dụ chat)
    • Topic thì chỉ cho 1 client gửi 1 message tới nhiều người ( ví dụ chat room) miễn là người nhận có đăng ký với hàng đợi message.


3. Session beans


- Quản lý các nhiệm vụ tác nghiệp của các client của ejb. 

- Client gửi một message tới session beans thông qua môi trường mạng. Session bean có thể triệu gọi tới một entity bean hay một session bean khác để hoàn thành nhiệm vụ mà client yêu cầu. Session bean lại được chia làm hai loại:
    • Stateless: trạng thái các giao dịch của client sẽ không được lưu lại cho những lần giao dịch sau. Những lần giao dịch khác nhau sẽ hoàn toàn động lập với nhau.
    • Statefull: trạng thái các giao tác của client sẽ được lưu trữ lại phục vụ cho những lần giao dịch sau.



- Các Bean này không thể hiện dữ liệu, mặc dầu có thể truy xuất dữ liệu. Theo đề nghị của Sun, các ứng dụng có dùng EJB nên truy xuất Entity Bean thông qua Session Bean



Có 4 cách lưu data của client khi xây dựng Web Application.

- Sử dụng URL Rewriter: HTML là ngôn ngữ định dạng tài liệu, nó không phải là ngôn ngữ lập trình nên không thể sử dụng các biến để lưu dữ liệu. Tuy nhiên, dữ liệu có thể được viết vào các link (liên kết) và như thế khi người dùng click vào link thì dữ liệu sẽ được gửi lên server. Phần lớn dữ liệu được viết vào phần query dưới các cặp parameters gồm key=value (cặp khóa/giá trị), một vài cài đặt có thể đưa dữ liệu vào phần path hay trong các biến của javascript,…

- Hidden Form: Thay vì lưu dữ liệu vào đường link, ta sẽ lưu dữ liệu vào các thành phần của form và type (kiểu) của các element này là hidden - ẩn. Như vậy, mọi action (hành xử) của người dùng sẽ gọi đến hành động post (gửi) form đó lên server và như thế dữ liệu cần lưu ở lần trước đó sẽ được gửi lại. HTTP method được dùng ở đây là Post chứ không phải Get trong URL Rewriter. Get là một dạng truy vấn cho phép đọc (read) trong khi Post là một truy vấn cho phép ghi (write). Khi đó dữ liệu của client gửi lên server sẽ nằm trong phần body của một HTTP Message chứ không phải trong phần Header như việc dùng link (liên kết) ở trên. 

- Sử dụng Cookie: Trình duyệt cho phép mỗi Web Application lưu khoảng 4kb dữ liệu dưới dạng key/value. Như vậy, nếu ta lưu data của lần truy vấn trước đó vào cookie thì giá trị này sẽ được gửi lên server trong mỗi request. Cookie là 1 phần trong header của HTTP Message.

- Sử dụng HTTP Session: Ngược với cookie, các Web Server có thể cho phép mỗi client lưu một dung lượng nhỏ data trên đó. Dữ liệu được lưu dưới dạng key/value và sẽ bị expire nếu bị timeout (sau khoảng thời gian tính từ lúc client gửi truy vấn cuối cùng đến server nếu vượt quá giới hạn thì sẽ bị hủy).

Web Application là một ví dụ minh họa cho stateless design với vài kỹ thuật nhỏ khắc phục yếu điểm của nó trong xây dựng phần mềm. Ở tầng bussiness, ta cũng có thể thiết kế tương tác dạng client-server. Hệ thống phần mềm khi đó có architecture (kiến trúc) là distributed (phân tán). EJB là một ví dụ với việc session bean được thiết kế hỗ trợ cả stateless và stateful.

4. Web Service


- Dịch vụ Web là cách tiêu chuẩn hóa giao tiếp ứng dụng dựa trên web khác nhau thông qua mạng. 

- Bằng cách sử dụng các dịch vụ Web, ứng dụng của bạn có thể xuất bản chức năng hoặc thông điệp của mình với phần còn lại của thế giới. 
- Dịch vụ Web có thể giao tiếp với nhau bằng cách sử dụng định dạng file XML khác mà không biết làm thế nào mỗi khác được thực hiện.

- Các ứng dụng web dựa trên giao tiếp bằng cách sử dụng các khái niệm như XML, SOAP, REST, WSDL và UDDI.

Ưu điểm:


Dịch vụ Web cung cấp khả năng hoạt động rộng lớn với các ứng dụng phần mềm khác nhau chạy trên những nền tảng khác nhau.

- Sử dụng các giao thức và chuẩn mở. Giao thức và định dạng dữ liệu dựa trên văn bản (text), giúp các lập trình viên dễ dàng hiểu được.
Nâng cao khả năng tái sử dụng. 
Thúc đẩy đầu tư các hệ thống phần mềm đã tồn tại bằng cách cho phép các tiến trình/chức năng nghiệp vụ đóng gói trong giao diện dịch vụ Web.
Tạo mối quan hệ tương tác lẫn nhau và mềm dẻo giữa các thành phần trong hệ thống, dễ dàng cho việc phát triển các ứng dụng phân tán.
Thúc đẩy hệ thống tích hợp, giảm sự phức tạp của hệ thống, hạ giá thành hoạt động, phát triển hệ thống nhanh và tương tác hiệu quả với hệ thống của các doanh nghiệp khác.

Nhược điểm: 

- Những thiệt hại lớn sẽ xảy ra vào khoảng thời gian chết của Dịch vụ Web, giao diện không thay đổi, có thể lỗi nếu một máy khách không được nâng cấp, thiếu các giao thức cho việc vận hành. 
Có quá nhiều chuẩn cho dịch vụ Web khiến người dùng khó nắm bắt.
Phải quan tâm nhiều hơn đến vấn đề an toàn và bảo mật.

Dịch vụ Web gồm có 3 chuẩn chính: 
    • SOAP (Simple Object Access Protocol) 
    • WSDL (Web Service Description Language)
    • UDDI (Universal Description, Discovery, and Integration)


UDDI được sử dụng để đăng ký và khám phá dịch vụ Web đã được miêu tả cụ thể trong WSDL. Giao tác UDDI sử dụng SOAP để nói chuyện với UDDI server, sau đó các ứng dụng SOAP yêu cầu một dịch vụ Web. Các thông điệp SOAP được gửi đi chính xác bởi HTTP và TCP/IP.


 4 thành phần chính:

Service Transport: có nhiệm vụ truyền thông điệp giữa các ứng dụng mạng, bao gồm những giao thức như HTTP, SMTP, FTP, JSM và gần đây nhất là giao thức thay đổi khổi mở rộng (Blocks Extensible Exchange Protocol- BEEP).\

Thông điệp XML: có nhiệm vụ giải mã các thông điệp theo định dạng XML để có thể hiểu được ở mức ứng dụng tương tác với người dùng. Hiện tại, những giao thức thực hiện nhiệm vụ này là XML-RPC, SOAP và REST.

Service Description: được sử dụng để miêu tả các giao diện chung cho một dịch vụ Web cụ thể. WSDL thường được sử dụng cho mục đích này, nó là một ngôn ngữ mô tả giao tiếp và thực thi dựa trên XML. Dịch vụ Web sẽ sử dụng ngôn ngữ này để truyền tham số và các loại dữ liệu cho các thao tác và chức năng mà dịch vụ Web cung cấp.

Khám phá dịch vụ: tập trung dịch vụ vào trong một nơi được đăng ký, từ đó giúp một dịch vụ Web có thể dễ dàng khám phá ra những dịch vụ nào đã có trên mạng, tốt hơn trong việc tìm kiếm những dịch vụ khác để tương tác. Một dịch vụ Web cũng phải tiến hành đăng ký để các dịch vụ khác có thể truy cập và giao tiếp. Hiện tại, UDDI API thường được sử dụng để thực hiện công việc này.

Create and Use Session Bean

B1: TẠO PROJECT ENTERPRISE APPLICATION


4



B2:TẠO DB




B3:TẠO ENTITY

B4:TẠO SESSION BEAN

1










B5:TẠO CÁC VIEW LÀ JSP tRONG WEB PAGES CỦA EMPEJB-WAR, TẠO các TRANG JSP

1


4

B6: TẠO CONTROLLER. TRONG SOURCE PACKAGES CỦA EMPEJB-WAR TẠO 2 TRANG SERVLET EMPSERVLET VÀ EDITSERVLET TRONG PACKAGE CONTROLLER. CLICK CHỌN ADD INFORMATION TO DEPLOYMENT DESCRIPTOR(WEB.XML) TRƯỚC KHI FINISH TẠO TRANG

1

2

3

4


CLICK CHUỘT PHẢI VÀO EMPEJB, CHỌN RUN ĐỂ CHẠY CHƯƠNG TRÌNH

Describe overview of technologies of Java EE & EJB

I.Java EE

1. Java EE

Java ee (Enterprise) là một platfrom rất phổ biến, được sử dụng rộng rãi. Bao gồm nhiều công nghệ được kết hợp với nhau. Việc phân chia các tầng làm giảm chi phí và độ phức tạp của việc phát triển, triển khai công việc. Java EE được xây dựng trên nền tảng java se và cũng cung cấp thêm các API để phát triển và hoạt động các ứng dụng máy chủ  (server-side-application) một cách mạnh mẽ.có khả năng mở rộng, dáng tin, portable, and secure.


2. Các technologies của Java EE


- JDBC (Java Database Connectivity) API : là một tập hợp các giao diện cho phép sử dụng Java để truy cập vào cơ sở dữ liệu bất kì.

- RMI (Remote method invocation): là một API cho phép các đối tượng java để giao tiếp từ xa với các đối tượng khác.

- Java IDL (Interface Definition Language): là ngôn ngữ nền tảng tiêu chuẩn khai báo độc lập, sử dụng để xác định các giao diện đối tượng service và đối tượng client. Cho phép bất kì các đối tượng java để giao tiếp với các đối tượng khác trong ngôn ngữ bất kì.

- EJB (Enterprise Java Bean): đóng gói các business logic và hỗ trợ thực hiện các thao tác giao tiếp và bảo mật.

- JSP & Servlet: Công nghệ dùng trong xây dựng web.

- JMS (Java Message Service): API này cho phép application tạo, gửi, nhận, và đọc các message.

- JTA (Java Transaction API): cho phép các application của Java EE  thực hiện các thao tác phân tán (distributed transaction).

- JAXP (Java API for XML Processing) : cho phép phân tích và chuyển đổi tài liệu XML.
 JNDI (Java Naming Directory Interface): là một giao thức cung cấp một tập API chuẩn cho phép truy cập tới những dịch vụ.

- JPA (Java Persistence API): cho phép mapping giữa 1 lớp java với các cột trong bảng trong cơ sở dũ liệu.


3.Các thành phần của J2EE


J2EE được xây dụng trên một mô hình container component. Bốn container component cốt lõi liên quan đến bốn kiểu container được hỗ trợ trong J2EE bao gồm, Application Client, Applet, Web và EJB:


- Java Application là 1 chương trình chạy bên trong Application Client container. Application Client container cung cấp những APIs hỗ trợ cho messaging, remote invocation, database connectivity và lookup service.

- Applet là java applet chạy bên trong Applet container, chính là web browser có hỗ trợ công nghệ Java.

- Servlet và JSP là Web-based component chạy ở bên trong Web container. Web container là một môi trường run-time cho servlet và jsp để cung cấp một cơ chế cho việc chuẩn bị, xử lý, định dạng nội dung động

- Enterprise JavaBean (EJB) là business component chạy bên trong EJB container. EJB component là phần nhân, cốt lõi của ứng dụng J2EE. EJB container cung cấp các dịch vự quản lý transaction, bảo mật, quản lý trạng thái, quay vòng tài nguyên (resource pooling)

5. Vai trò của J2EE


- J2EE cung cấp các dịch vụ, các hàm giao tiếp(API) và các giao thức để triển khai các ứng dụng đa tầng.
- J2EE Framework cho phép phát triển những ứng dụng distributed bằng cách cung cấp 1 tập các dịch vụ cơ bản như quản lý transaction, kiểm tra security, quản lý trạng thái, quản lý tài nguyên

Nhận xét:

- Java EE là cho phép chúng ta xây dựng ứng dụng tốn rất ít công sức.

- Java EE có rất nhiều các công cụ mã nguồn mở hữu ích cho phép mở rộng nền tảng hay đơn giản hóa quá trình phát triển ứng dụng

-Tuy nhiên, người ta không dùng Java EE để lập trình ứng dụng game

II. EJB

1. Giới thiệu


- Enterprise Java Beans (EJB) là các component bên phía server trong, mà triển khai các business logic của 1 application client.

- Được thực thi trong 1 "Container".

2. Kiến trúc chung của ứng dụng nhiều tầng trong java enterprise


a


3.The EJB Container

a-1



4.Vai trò của ejb container




Bean được chia thành các loại như sau :


a (4).PNG

Thứ Ba, 20 tháng 12, 2016

DOM 2

DOM level 2 làm mới DOM1 Interface.Sự thay đổi lớn đó là hỗ trợ tên miền ở Element và Attr interfaces.DOM2 hỗ trợ thêm một số interfaces cho các event,traversal,ranges,views và stylesheets
DOM Level 2 Architecture

AsyncTask, Volley, Retrofit.

1. Async Task 

  • AsyncTask là một lớp trừu tượng được cung cấp bởi Android, giúp chúng ta sử dụng các thread UI đúng. Lớp này cho phép chúng tôi thực hiện các hoạt động dài / nền và hiển thị kết quả của nó trên thread UI mà không cần phải thao tác đề.
  • AsyncTask có bốn bước:
    • doInBackground: Mã thực hiện hoạt động dài chạy đi trong phương pháp này. Khi phương thức onClick được thực thi trên nhấp nút, nó gọi phương thức mà chấp nhận các thông số thực hiện và tự động gọi phương thức doInBackground với các thông số thông qua.
    • onPostExecute: Phương thức này được gọi là phương thức sau doInBackground hoàn thành xử lý. Kết quả từ doInBackground được truyền cho phương thức này.
    • onPreExecute: Phương thức này được gọi là trước khi phương thức doInBackground được gọi.
    • onProgressUpdate: Phương thức này được gọi bằng cách gọi publishProgress bất cứ lúc nào từ doInBackground gọi phương thức này.
    Các nhiệm vụ có thể được hủy bỏ bằng cách gọi hủy bỏ (boolean) phương thức. Điều này sẽ gây ra các cuộc gọi tiếp theo để isCancelled () để trở về đúng.
    Sau khi gọi phương pháp này, onCancelled (Object) phương thức được gọi là thay vì onPostExecute () sau khi doInBackground () trả về.

 2. Volley

Volley là một thư viện mạng( library network) được Google giới thiệu năm 2013 để quản lý các request Network và lưu trữ những response trên các ứng dụng Android mà không cần các Developer viết nhiều code như trước. Các tools bên trong Volley cho phép cùng một lúc thục hiện nhiều request trên các thread (luồng xử lý dữ liệu) khác nhau với các mức độ ưu tiên (priority) khác nhau. Tất cả request được thực hiện và lưu trữ trong bộ nhớ cache giúp cho việc reload lại dữ liệu nhanh hơn. Nó đặc biện hữu dụng với những dữ liệu như JSON, Image, String,… Nhưng lại không phải là ý tưởng tốt cho việc sử dụng với các dữ liệu lớn như music hay movies.

           Những class request có trong thư viện Volley này bao gồm : jsonObjectRequest, jsonArrayRequest,                  StringRequest, ImageLoader kết với các constructor đi kèm như : POST, GET, DELETE, PUT, COPY,              …

      3. Retrofit

  • Retrofit là một Rest Client (Tìm hiểu thêm về chuẩn RESTFul dưới link tham khảo) cho Android và Java và được tạo ra bởi Square. Họ làm cho việc nhận và tải lên JSON (hoặc dữ liệu khác) một cách khá dễ dàng tới một WebService dựa trên mô hình REST.
  • Các gói trang bị thêm cho phép sử dụng các bộ chuyển đổi sau đây:
    • Gson: com.squareup.retrofit:converter-gson
    • Jackson: com.squareup.retrofit:converter-jackson
    • Moshi: com.squareup.retrofit:converter-moshi
    • Protobuf: com.squareup.retrofit:converter-protobuf
    • Wire: com.squareup.retrofit:converter-wire
    • Simple XML: com.squareup.retrofit:converter-simplexml
  • Để làm việc với Retrofit bạn cần triển khai cơ bản 3 lớp:
    • Model class to map JSON Data
    • Interfaces để định nghĩa các API cho Webservice
    • Retrofit.Builder Lớp để định nghĩa URL Endpoint cho các hoạt động liên quan tới Http
  • Một số lý do nên Retrofit cho Networking:
    • Performance tốt.
    • Dễ sử dụng.
    • Dùng chung được với RxAndroid.

So Sánh tốc độ bằng sử dụng viết ứng dụng mô phỏng kết quả cho được

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

So sánh SAX(Event-Based), DOM(Object-based)

I.Parsing XML

- XML Parser là chương trình giúp ta lấy, điều khiển (đọc, xóa, sửa) tài liệt xml

- Đặc điểm:

+ Độc lập ngôn ngữ

+ Độc lập mã nguồn

+ Linh hoạt Phù hợp đa công việc 

- Parser có thể chia làm 2 loại: Event-Based và Object-Based

+ Event-Based: quyết định sẽ phải làm gì với Element, Document (điển hình là SAX=Simple API for XML parsing)

+ Object-Based: convert tài liệu xml sang object (điển hình là DOM=Document Object Model)


II.Event-based(SAX)

- SAX là các API phân tách truy xuất tuần tự đến tài liệu XML. Sax cung cấp một cơ chế cho việc đọc dữ liệu từ một tài liệu XML. Nó là một thay thế tốt và hay dùng thay cho DOM. Tên của nó là viết tắt của “Simple API for XML” (tiếng Anh, tức là “API đơn giản cho XML”).

- Bộ phân tách mà hiện thực SAX (ví dụ, bộ phân tách SAX Parser) xử lí thông tin XML dưới dạng một dòng dữ liệu (single stream of data). Dòng dữ liệu này là đơn hướng, nghĩa là dữ liệu đã đọc rồi thì không thể đọc lại ngoại trừ phân tách lại từ đầu.

Hầu hết những ai sử dụng XML tin rằng kết quả của mẫu hình SAX là xử lí nhanh hơn DOM. Điều này là vì SAX stream dùng ít bộ nhớ hơn thay vì phải lưu tất cả trong bộ nhớ như với cây DOM.

- SAX có hai interface cơ bản là:

+ XMLReader: gồm thực hiện việc đọc file XML và phân tích file đó bằng cách gọi các phương thức của ContentHandler.

+ ContentHandler: gồm các phương thức xử lý việc nhận dữ liệu từ việc phân tích.

SAX được thiết kế theo Observer design pattern. XMLReader đóng vai trò là Subject và ContentHandler đóng vai trong là các Observer. Nhưng mỗi thực thể XMLReader chỉ cho phép đăng ký một listener.

III.Object based(DOM)

- DOM là chữ viết tắt từ tiếng Anh Document Object Model (“Mô hình Đối tượng Tài liệu”), là một giao diện lập trình ứng dụng (API). Thường thường DOM, có dạng một cây cấu trúc dữ liệu, được dùng để truy xuất các tài liệu dạng HTML và XML. Mô hình DOM độc lập với hệ điều hành và dựa theo kỹ thuật lập trình hướng đối tượng để mô tả tài liệu.

- Mặc dù một tài liệu hay văn bản có cấu trúc chặt chẽ (well-structured document) luôn luôn có thể được mô hình hóa bằng một cấu trúc dạng cây, DOM không có giới hạn về cấu trúc dữ liệu của một tài liệu.

- DOM API được định nghĩa bởi cả Microsoft và Sun để thao tác trực tiếp tài liệu XML trên HTML và trong ứng dụng sử dụng tài liệu XML. Ở đây, chúng tôi đề cập đến DOM API của Sun trong việc thao tác khai thác tài liệu XML trên ứng dụng

Các kiểu dữ liệu được dành cho node trong API như sau:

+ Element, Node: tương ứng Element trong tài liệu XML.

+ Attribute là dạng node không được thể hiện trong mô hình cây mà chúng là tập Node được lưu trong Map và là thuộc tính của Element Object được lưu tương ứng trên hình cây. Điều này có nghĩa, muốn truy cập Attribute thì phải truy cập đến Element.

+ Các kiểu dữ liệu thông thường như Comment, CDATA Section, Processing Instruction, DocumentType tương ứng với các thành phần trong XML như là Comment, CDATA Section, Processing Instruction và DTD.

+ Text: kiểu dành cho chữ trong tài liệu xml.

- Hầu hết các bộ phân tích XML (XML parsers) (ví dụ: Xerces) và bộ xử lí XSL (ví dụ: Xalan) đã được phát triển để sử dụng cấu trúc cây này. Những hiện thực như vậy đòi hỏi toàn bộ nội dụng của một văn bản phải được phân tích và lưu trong bộ nhớ. Vì thế, DOM được sử dụng tốt nhất trong các ứng dụng mà trong đó các thành phần của tài liệu có thể được truy xuất và thao tác một cách ngẫu nhiên. Với các ứng dụng dựa trên XML, bao gồm yêu cầu đọc/ghi có chọn lọc cho mỗi lần phân tích (one-time selective read/write per parse), DOM cho thấy được sự tối ưu về mặt bộ nhớ. Trong các trường hợp đó thì giao diện lập trình ứng dụng SAX trở nên rất tiện lợi về cả mặt tốc độ và bộ nhớ.

IV.Kết

- So sánh giữa DOM và SAX:

+SAX tốn ít tài nguyên nên phù hợp với việc quét những tài liệu lớn,DOM phù hợp với tài liệu nhỏ (do phải convert tài liệu xml sang object).

+ SAX phù hợp với việc lấy một phần nhỏ trong rất nhiều tài liệu XM, DOM phù hợp với việc điều khiển toàn bộ.

SAX nhanh hơn DOM.

- XSLT (The XML Stysheet Language for Transformations) là một ngôn ngữ để biến đổi tài liệu XML thành một dạng khác.

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

JPA Configuration, Persistence API and Serializable

I. JAVA PERSISTENCE API

1. Khái niệm:

- Java Persistence Architect API (JPA) là một kỹ thuật của Java dùng để truy xuất, quản lý và duy trì dữ liệu giữa các đối tượng/các lớp của Java và CSDL. JPA được định nghĩa như một phần trong đặc tả kỹ thuật của EJB 3.0.JPA được xem như là cách tiếp tiêu chuẩn cho các mô hình quan hệ đối tượng (Object to Relational Mapping – ORM) trong Java.

- Bản thân JPA chỉ là một đặc điểm kỹ thuật chứ không phải là một sản phẩm. Do đó JPA tự mình không thể thực thi các thao tác liên quan đến CSDL. JPA là tập hợp nhiều interface nên cần phải có các class triển khai, các class này được triển khai từ CSDL. Chính vì vậy JPA luôn đòi hỏi phải có một CSDL để ánh xạ tạo ra các class.

2. Thành phần trong JPA:

- Persistence: 
+  Giá trị duy nhất được sử dụng bởi các container để map đối tượng entity tới các bản ghi tương ứng. Bạn có thể lưu các dữ liệu trong một tập tin mã hóa và giải mã thuật toán riêng của bạn.


- EntityManager:  

+ EntityManager là một giao diện (interface) cung cấp các API cho việc tương tác với các Entity. 

Một số chức năng cơ bản của EntityManager như: 

Persist: phương thức này dùng để lưu một thực thể mới tạo vào cơ sở dữ liệu

Merge: dùng để cập nhật trạng thái của entity vào cơ sở dữ liệu.

Remove: xóa một thể hiện của entity.

- Persistence Unit: 

+ Mỗi Persistence Unit định nghĩa 1 hoặc nhiều thực thể quản lý mà các EntityManager của 1 ứng dụng có thể quản lý.

+ Cấu hình Persistence Unit được định nghĩa ra file persistence.xml.

Mỗi Persistence Unit cung cấp 1 tập hợp các thuộc tính cho việc cấu hình Data Source. Cùng với tất cả các chi tiết kết nối cần thiết, các Persistence Unit cũng chỉ rõ các nhà cung cấp JPA.


- Persistence Context:

Một Persistence Context là một tập hợp các Entity được quản lý bởi EntityManager . Persistence Context đánh dấu sự thay đổi của các Entity đó. Entity Manager hỗ trợ Persistence Context để commit hoặc undo những thay đổi. Ngay khi một EntityManager Object được tạo ra ,  nó ngầm được liên kết với một Persistence Context để phục vụ cho việc quản lý tập các Entity. 

Một Persistence Context sẽ được định nghĩa một giới hạn mà ở đó các đối tượng Entity sẽ được tạo ra, lưu trữ hoặc hủy bỏ.

                          Mối quan hệ giữa Persistence Contex và Persistence Unit


- Một số thuộc tính được định nghĩa trong  <persistence-unit>yếu tố như sau:

 <description>: mô tả các persistence unit và là tùy chọn.

 <provider>: phải có mặt trong môi trường J2SE hoặc khi các ứng dụng yêu cầu một hành động dịch vụ cụ thể.

<transaction-type>:  có giá trị hoặc như Java Transaction API (JTA) hoặc RESOURCE_LOCAL hoặc theo mặc định, giá trị là JTA.

 <JTA-data-source> / <không JTA-data-source>: dùng để chỉ định Java Naming và Directory Interface (JNDI) của nguồn dữ liệu. JNDI được sử dụng bởi các persistence

<mapping-file>: có chứa một danh sách của một hay nhiều file XML được sử dụng để mapping O/R. Các tập tin map được sử dụng để liệt kê các lớp entity mà có sẵn trong persistence unit

<properties>: quy định các thuộc tính cấu hình mà là nhà cung cấp cụ thể cho các persistence unit. Bất kỳ thuộc tính không được công nhận bằng cách các persistence provider đã được bỏ qua.


3. Tính năng, vai trò của JPA:

- Các tính năng JPA:

+ 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.

- Vai trò và lợi ích đem lại của JPA:

+ Việc giới thiệu JPA vào trong đặc tả J2EE 5 là một bước tiến lớn trong việc đơn giản hóa các quy trình phát triển ứng dụng. JPA đơn giản hóa mô hình thực thể dữ liệu và cộng thểm một số tính năng mới mà phiên bản EJB trước (EJB 2.0) không có. Giờ đây người lập trình có thể ánh xạ trực tiếp các đối tượng persistence với cơ sở dữ liệu quan hệ. JPA có thể sử dụng bên ngoài container, điều này không dễ thực hiện trong EJB 2.1. Bạn cũng có thể sử dụng JPA trong các ứng dụng swing.

+ 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.

+ Độc lập về DB,không phải làm việc với SQL.



II.Serializable

1.Khái niệm
Java cung cấp một kỹ thuật, được gọi là serialization, tại đây một đối tượng có thể được biểu diễn như là một dãy byte liên tục mà bao gồm dữ liệu của đối tượng cũng như thông tin về kiểu đối tượng và kiểu dữ liệu được lưu giữ trong đối tượng.
- Sau khi một đối tượng được serialize đã được ghi vào trong một file, nó có thể được đọc từ file này và được deserialize từ đó, đó là thông tin kiểu và các byte mà biểu diễn đối tượng và dữ liệu của nó có thể được sử dụng để tái tạo đối tượng này trong bộ nhớ.
- Toàn bộ tiến trình là JVM độc lập, nghĩa là một đối tượng có thể được xếp thứ tự (serialize) trên một platform và deserialize trên một platform hoàn toàn khác.
Các lớp ObjectInputStream và ObjectOutputStream trong Java là các luồng bậc cao mà chứa các phương thức để serialize và deserialize một đối tượng.
Lớp ObjectOutputStream chứa nhiều phương thức write để ghi các kiểu dữ liệu đa dạng, nhưng với một phương thức trong đầu ra chuẩn cụ thể:
public final void writeObject(Object x) throws IOException
- Phương thức trên xếp thứ tự một Object theo thứ tự và gửi nó tới đầu ra chuẩn. Tương tự, lớp ObjectInputStream chứa phương thức sau để deserialize một đối tượng:
public final Object readObject() throws IOException, 
                                 ClassNotFoundException
- Phương thức này thu nhận Object tiếp theo ra khỏi luồng và deserialize nó. Giá trị trả về là Object, vì thế bạn sẽ cần ép nó thành kiểu dữ liệu thích hợp.
- Để minh họa cách serialization làm việc trong Java, tôi sử dụng lớp Employee mà đã bàn luận trong các chương trước. Giả sử rằng chúng ta có lớp Employee sau, mà triển khai Serializable Interface:
public class Employee implements java.io.Serializable
{
   public String name;
   public String address;
   public transient int SSN;
   public int number;
   public void mailCheck()
   {
      System.out.println("Gui mail toi " + name
                           + " " + address);
   }
}
- Ghi chú rằng, với một lớp để được xếp thứ tự theo thứ tự một cách thành công, phải có hai điều kiện sau:
 + Lớp phải triển khai java.io.Serializable interface
 + Tất cả các trường trong lớp phải là có thể xếp thứ tự (Serializable). Nếu một trường là không thể xếp thứ tự, nó phải được đánh dấu.
- Lớp ObjectOutputStream được sử dụng để xếp thứ tự một Object. Chương trình SerializeDemo sau khởi tạo một đối tượng Employee và xếp thứ tự nó vào trong một file.
- Khi chương trình thực thi, một file với tên employee.ser được tạo. Chương trình không tạo bất kỳ đầu ra nào, nhưng bạn xem xét code và cố gắng xác định xem chương trình đang làm cái gì.
Chú ý: Khi xếp thứ tự một đối tượng vào một file, qui ước chuẩn trong Java là cung cấp một file có đuôi là .ser .
import java.io.*;

public class SerializeDemo
{
   public static void main(String [] args)
   {
      Employee e = new Employee();
      e.name = "Reyan Ali";
      e.address = "Phokka Kuan, Ambehta Peer";
      e.SSN = 11122333;
      e.number = 101;
      try
      {
         FileOutputStream fileOut =
         new FileOutputStream("/tmp/employee.ser");
         ObjectOutputStream out = new ObjectOutputStream(fileOut);
         out.writeObject(e);
         out.close();
         fileOut.close();
         System.out.printf("Du lieu da duoc serialize duoc luu giu trong /tmp/employee.ser");
      }catch(IOException i)
      {
          i.printStackTrace();
      }
   }
}

* Deserialize một Object trong Java

Chương trình DeserializeDemo sau sẽ deserialize đối tượng Employee được tạo trong chương trình SerializeDemo. Bạn xem xét chương trình này và xác định đầu ra của nó:
import java.io.*;
public class DeserializeDemo
{
   public static void main(String [] args)
   {
      Employee e = null;
      try
      {
         FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");
         ObjectInputStream in = new ObjectInputStream(fileIn);
         e = (Employee) in.readObject();
         in.close();
         fileIn.close();
      }catch(IOException i)
      {
         i.printStackTrace();
         return;
      }catch(ClassNotFoundException c)
      {
         System.out.println("Khong tim thay lop Employee");
         c.printStackTrace();
         return;
      }
      System.out.println("Deserialized Employee...");
      System.out.println("Name: " + e.name);
      System.out.println("Address: " + e.address);
      System.out.println("SSN: " + e.SSN);
      System.out.println("Number: " + e.number);
    }
}

2.Vai trò

Một hệ thống Enterprise điển hình thường có các thành phần nằm phân tán rải rác trên các hệ thống và mạng khác nhau. Trong Java mọi thứ đều được miêu tả như là một object. Nếu 2 thành phần Java cần liên lạc với nhau, ta cần phải có một cơ chế để chúng trao đổi dữ liệu. Serialization được định nghĩa cho mục đích này, và các thành phần Java sẽ sử dụng giao thức (protocol) này để truyền các object qua lại với nhau.