Thứ Ba, 27 tháng 12, 2016

"Integrating Session Beans, Entities, Message-Driven Beans, and Web Services(Chapter 7)"



I.EJBCấu trúc EJB

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

     + Java Persistence API (JPA)  là một đặc tả Java dùng cho việc truy xuất, lưu trữ/truy vấn và quản lý dữ liệu giữa các đối tượng Java/class với CSDL quan hệ. 

   - 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á)….


* Ứng dụng EJB được chia thành nhiều tầng nhiều lớp

Đầu tiên là Client Tier là giao diện nó là ứng dụng bình thường nếu là ứng dụng hay trình duyệt bình thường có thể gọi đến ứng dụng web tầng web được phát triển bởi servlet cao cấp hơn là JSP JSF Sturts dưới tầng web là EJB xử lý nghiệp vụ tiếp đó là tầng làm việc với database đây là kiến thức chung kiến trúc nhiều tầng của EJB 

    *Server 


Nếu nó là trình duyệt hay bất kỳ đoạn code java nào phải gọi đến server, server nếu nó là trình duyệt hay web sẽ gọi đến web tier nếu không sẽ gọi đến business tier

Nếu nó là trình duyệt nó sẽ gọi đến tầng web (JSP Pages Servlet) và nó có thể gọi đến một EJB , EJB này có thể gọi đến một EJB và tầng business này sẽ tiếp tục gọi đến tầng database hoặc là hệ thống cung cấp thông tin ngoài khác 

    *Phát triển EJB 


EJB container được chạy trong các server là nơi quản lý EJB chúng ta không thể gọi trực tiếp đến EJB chúng ta phải thông qua các container và vòng đời

   * Lợi ích của EJB


- Nó quản lý toàn bộ vòng đời cho ứng dụng của chúng ta 
- Quản lý trạng thái cho EJB 
- Quản lý các giao dịch
- Bảo mật và lưu trữ dữ liệu đều được chuyển cho container 

  * Vai trò phát triển của EJB


- Người làm ra cái code Bean
- Người cung cấp container để quản lý cái bean đó
- Người cung cấp server do container phải chạy trong server
- Application assembler có nghĩa vụ đóng gói
- Deployer
- Admin để quản lý toàn bộ quá trình chạy



 Ưu điểm sử dụng EJB
EJB 3.0 đơn giản hoá quá trình phát triển của các lập trình viên bằng cách sử dụng các POJO (plain Old java Object – đối tượng thuần java) và POJI (Plain Old Java Interface – các giao diện thuần java). Điều này giúp cho các lập trình viên có thể viết các beans một cách dễ dàng và chẳng khác gì việc viết một class hay một interface đơn thuần.

- Thay vì sử dụng xml để miêu tả các bean như trong EJB 2.1, EJB 3.0 sử dụng các anotation để miêu tả về các bean. Các anotation là các siêu dữ liệu miêu tả về đối tượng (class) và được viết ngay trong mã nguồn java, được sử lý trong thời gian run-time.

- Khả năng phát triển EJB là đơn giản , nó là một lớp java bình thường

- Nó ở dưới dạng component nên có khả năng tái sử dụng rất là cao nó được nhúng được chạy trong server và các contetner và các contentner này có khả năng phát triển hỗ trợ ứng dụng lớn

- EJB không nên dùng cho tất cả mọi nơi vì nó phải chạy trong contentner nên nó có nhược điểm là rất là nặng khi ta phát triển các ứng dụng nhỏ và vừa không nên dùng EJB

- Khi chúng ta phát triển các ứng dụng không cần quản lý session hoặc nhiều đặc điểm security

II.Web Service

eb service (Web Service) được coi là một công nghệ mang đến cuộc cách mạng trong cách thức hoạt động của các dịch vụ B2B (Business to Business) và B2C (Business to Customer). Giá trị cơ bản của Web service dựa trên việc cung cấp các phương thức theo chuẩn trong việc truy nhập đối với hệ thống đóng gói và hệ thống kế thừa.

Các phần mềm được viết bởi những ngôn ngữ lập trình khác nhau và chạy trên những nền tảng khác nhau có thể sử dụng Web service để chuyển đổi dữ liệu thông qua mạng Internet theo cách giao tiếp tương tự bên trong một máy tính. Tuy nhiên, công nghệ xây dựng Web service không nhất thiết phải là các công nghệ mới, nó có thể kết hợp với các công nghệ đã có như XML, SOAP, WSDL, UDDI… Với sự phát triển và lớn mạnh của Internet, Web service thật sự là một công nghệ đáng được quan tâm để giảm chi phí và độ phức tạp trong tích hợp và phát triển hệ thống. Chúng ta sẽ xem xét các Web service từ mức khái niệm đến cách thức xây dựng.

1. Giới thiệu về Web service
Theo định nghĩa của W3C (World Wide Web Consortium), Web service là một hệ thống phần mềm được thiết kế để hỗ trợ khả năng tương tác giữa các ứng dụng trên các máy tính khác nhau thông qua mạng Internet, giao diện chung và sự gắn kết của nó được mô tả bằng XML. Web service là tài nguyên phần mềm có thể xác định bằng địa chỉ URL, thực hiện các chức năng và đưa ra các thông tin người dùng yêu cầu. Một Web service được tạo nên bằng cách lấy các chức năng và đóng gói chúng sao cho các ứng dụng khác dễ dàng nhìn thấy và có thể truy cập đến những dịch vụ mà nó thực hiện, đồng thời có thể yêu cầu thông tin từ Web service khác. Nó bao gồm các mô đun độc lập cho hoạt động của khách hàng và doanh nghiệp và bản thân nó được thực thi trên server.

Trước hết, có thể nói rằng ứng dụng cơ bản của Web service là tích hợp các hệ thống và là một trong những hoạt động chính khi phát triển hệ thống. Trong hệ thống này, các ứng dụng cần được tích hợp với cơ sở dữ liệu (CSDL) và các ứng dụng khác, người sử dụng sẽ giao tiếp với CSDL để tiến hành phân tích và lấy dữ liệu. Trong thời gian gần đây, việc phát triển mạnh mẽ của thương mại điện tử và B2B cũng đòi hỏi các hệ thống phải có khả năng tích hợp với CSDL của các đối tác kinh doanh (nghĩa là tương tác với hệ thống bên ngoài – bên cạnh tương tác với các thành phần bên trong của hệ thống trong doanh nghiệp).

Dưới đây, chúng ta sẽ xem qua những khái niệm và cách thức cơ bản nhất để xây dựng một Web service trong tích hợp và phát triển hệ thống.

2. Đặc điểm của Web service
a. Đặc điểm
- Web service cho phép client và server tương tác được với nhau ngay cả trong những môi trường khác nhau. Ví dụ, đặt Web server cho ứng dụng trên một máy chủ chạy hệ điều hành Linux trong khi người dùng sử dụng máy tính chạy hệ điều hành Windows, ứng dụng vẫn có thể chạy và xử lý bình thường mà không cần thêm yêu cầu đặc biệt để tương thích giữa hai hệ điều hành này.
- Phần lớn kĩ thuật của Web service được xây dựng dựa trên mã nguồn mở và được phát triển từ các chuẩn đã được công nhận, ví dụ như XML.
- Một Web service bao gồm có nhiều mô-đun và có thể công bố lên mạng Internet.
- Là sự kết hợp của việc phát triển theo hướng từng thành phần với những lĩnh vực cụ thể và cơ sở hạ tầng Web, đưa ra những lợi ích cho cả doanh nghiệp, khách hàng, những nhà cung cấp khác và cả những cá nhân thông qua mạng Internet.
- Một ứng dụng khi được triển khai sẽ hoạt động theo mô hình client-server. Nó có thể được triển khai bởi một phần mềm ứng dụng phía server ví dụ như PHP, Oracle Application server hay Microsoft.Net…
- Ngày nay Web service đang rất phát triển, những lĩnh vực trong cuộc sống có thể áp dụng và tích hợp Web service là khá rộng lớn như dịch vụ chọn lọc và phân loại tin tức (hệ thống thư viện có kết nối đến web portal để tìm kiếm các thông tin cần thiết); ứng dụng cho các dịch vụ du lịch (cung cấp giá vé, thông tin về địa điểm…), các đại lý bán hàng qua mạng, thông tin thương mại như giá cả, tỷ giá hối đoái, đấu giá qua mạng…hay dịch vụ giao dịch trực tuyến (cho cả B2B và B2C) như đặt vé máy bay, thông tin thuê xe…
- Các ứng dụng có tích hợp Web service đã không còn là xa lạ, đặc biệt trong điều kiện thương mại điện tử đang bùng nổ và phát triển không ngừng cùng với sự lớn mạnh của Internet. Bất kì một lĩnh vực nào trong cuộc sống cũng có thể tích hợp với Web service, đây là cách thức kinh doanh và làm việc có hiệu quả bởi thời đại ngày nay là thời đại của truyền thông và trao đổi thông tin qua mạng. Do vậy, việc phát triển và tích hợp các ứng dụng với Web service đang được quan tâm phát triển là điều hoàn toàn dễ hiểu.

b. Ưu và nhược điểm

Ưu điểm:
+ Web service 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 Web service.
+ 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 Web service, 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 Web service 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.

3. Kiến trúc của Web service
Web service gồm có 3 chuẩn chính: SOAP (Simple Object Access Protocol), WSDL (Web Service Description Language) và UDDI (Universal Description, Discovery, and Integration). Hình 1 mô tả chồng giao thức của Web service, trong đó UDDI được sử dụng để đăng ký và khám phá Web service đã đượ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 Web service. Các thông điệp SOAP được gửi đi chính xác bởi HTTP và TCP/IP.

Click image for larger version. 

Name: service-architecture1.jpg 
Views: 65 
Size: 19.6 KB 
ID: 292

Chồng giao thức Web service là tập hợp các giao thức mạng máy tính được sử dụng để định nghĩa, xác định vị trí, thi hành và tạo nên Web service tương tác với những ứng dụng hay dịch vụ khác. Chồng giao thức này có 4 thành phần chính:
- Dịch vụ vận chuyển (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.
- Mô tả dịch vụ: được sử dụng để miêu tả các giao diện chung cho một Web service 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. Web service 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à Web service 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 Web service 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 Web service 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.

Click image for larger version. 

Name: web-service-registry.jpg 
Views: 49 
Size: 17.7 KB 
ID: 293

Trong đó, tầng giao thức tương tác dịch vụ (Service Communication Protocol) với công nghệ chuẩn là SOAP. SOAP là giao thức nằm giữa tầng vận chuyển và tầng mô tả thông tin về dịch vụ, cho phép người dùng triệu gọi một dịch vụ từ xa thông qua một thông điệp XML. Ngoài ra, để các dịch vụ có tính an toàn, toàn vẹn và bảo mật thông tin, trong kiến trúc Web service, chúng ta có thêm các tầng Policy, Security, Transaction, Management.


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

Describe overview of technologies of Java EE & EJB

I: Java EE
  1: Thế nào là Java EE


     -Là nền tảng (platform , còn gọi tắt là J2EE) mở, chuẩn để phát triển, triển khai, và quản lý các ứng dụng doanh nghiệp hướng thành phần , ứng dụng Web, Server

  2: Tại sao lại dùng Java EE
     -Với developers
          +có thể sử dụng bất kỳ J2EE implementation để phát triển và triển khai
          +có rất nhiều tài nguyên trong cộng đồng J2EE
          + Sử dụng các thành phần có sẵn của bên thứ 3
     -Với Vendors
          +tự do sáng tạo trong cài đặt mà vẫn đảm bảo tính phổ biến của ứng dụng
          +không cần create/maintain các APIs cho riêng mình
     -Với Business Customer
          +đảm bảo tính phổ biến của ứng dụng
          +có nhiều thực thi để lựa chọn
          +rất nhiều công cụ để phát triển

   3: J2EE APIs
     -Java 2 Standard Edition (J2SE)
     -Java Database Connectivity (JDBC)
     -RMI-JRMP – Remote Method Invocation (RMI)
     -Java Interface Definition Language (Java IDL)
     -Remote Method Invocation – Internet Inter- ORB Protocol (RMI-IIOP)
     -Enterprise JavaBean (EJB)
     -Servlet
     -Java Server Page (JSP)
     -Java Message Service (JMS)
     -Java Naming and Directory Interface (JNDI)
     -Java Transaction API (JTA)
     -JavaMail
     -JavaBean Activation Framework (JAF)

  4: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 – Applet component 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 – đây 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) – EJB component 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 EEcó  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




Thứ Năm, 15 tháng 12, 2016

DOM 2


  1. DOM Level 2 (DOM 2) được phát triển từ DOM 1Nó được xây dựng dựa trên DOM 1 interfaces.
  2. Mô hình DOM2 có 6 chi tiết khác nhau.
  • Module này định nghĩa một tập các đối tượng  giao diện để truy cập  phân tích cú pháp XML content.
  • Core
  • Range
  • Module này là tùy chọn có tính chất và phụ thuộc vào Module Core để thực hiện chức năng của nó.
  • Các Event trên đạt được mục tiêu của event này có thể gặp bất kỳ của các quá trình sau:

           -Event Capture
           -Event Bubbling
           -Event Cancelation
  • Các Module Traversal cho phép đi qua cây DOM để truy cập nội dung trong đó.
  • Các Module chứa TreeWalker, Nodelterator, và giao diện NodeFilter để tạo điều kiện dễ dàng traversal thông qua các document content
  • Các Module CSS là một Module tùy chọn trong DOM.
  • Nó định nghĩa interface để cung cấp một cơ chế để truy cập và thao tác các document CSS động. Nó định nghĩa các giao diện sau:
          -CSSStyleSheet
          -CSSRuleList
          -CSSHediaRule
          -CSSStyleDeclaration

Viết reflection về AsyncTask, Volley, Retrofit.


1.AsyncTask
AsyncTask là gì?
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 đề.
Khi sử dụng AsyncTask?
Android thực hiện mô hình chủ đề duy nhất và bất cứ khi nào một ứng dụng Android được tung ra, một thread được tạo ra. Giả sử chúng ta đang làm mạng lưới hoạt động trên một nút bấm trong ứng dụng của chúng tôi. Mở nút bấm một yêu cầu sẽ được thực hiện cho các máy chủ và phản ứng sẽ được chờ đợi. Do mô hình chủ đề duy nhất của Android, cho đến khi thời gian đáp ứng được chờ đợi màn hình của chúng tôi là không đáp ứng. Vì vậy, chúng ta nên tránh thực hiện các hoạt động dài chạy trên thread UI. Điều này bao gồm tập tin và truy cập mạng.

Để khắc phục điều này chúng ta có thể tạo chủ đề mới và thực hiện các phương pháp chạy để thực hiện cuộc gọi mạng này, do đó, giao diện người dùng vẫn đáp ứng.

Nhưng kể từ khi Android theo mô hình chủ đề duy nhất và Android UI bộ công cụ không phải là thread an toàn, vì vậy nếu có một nhu cầu để thực hiện một số thay đổi về giao diện người dùng dựa trên các kết quả của các hoạt động biểu diễn, sau đó cách tiếp cận này có thể dẫn đến một số vấn đề.

Vì vậy, các khuôn khổ Android đã đưa ra một mô hình rất tốt được bao bọc vào AsyncTask.

Lưu ý: AsyncTask lý tưởng nên được sử dụng cho các hoạt động mà phải mất vài giây. Một số nhiệm vụ giữ cho thread chạy trong thời gian dài như vậy trong trường hợp đó nó được khuyến khích để sử dụng gói java.util.concurrent như Executor, ThreadPoolExecutor và FutureTask.

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 Networking Library được Google phát triển và công bố tại Google I/O 2013 để quản lý các request network và lưu trữ các kết quả trả về – response, nó giúp các nhà phát triển – developers không phải viết nhiều code như trước nữa.Các tính năng – features trong Volley cho phép cùng một lúc thực hiện nhiều request trên các tiến trình – threads khác nhau với các mức độ ưu tiên – priority. Tất cả các request được thực hiện và lưu trữ trong bộ nhớ cache – cache memories giúp cho việc reload lại dữ liệu nhanh hơn.Toàn bộ response được lưu trong memories vậy nên nó không tốt khi dùng để load các dữ liệu lớn như âm nhạc – music hoặc phim – movies.Nhưng nó thực sự tuyệt vời để load các dữ liệu dạng JSON, Image hay String.
  • 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



Dưới đây là kết quả so sánh thời gian thực thi giữa Async Task thuần của Android, Volley Library của Google và Retrofit :
tIdZkl3

SAX(Event-Based), DOM(Object-based)

Định nghĩa : 
JAXP viết tắt của : Java API for XML Processing được coi là một API trong lập trình Java sử dụng XML. Nó có khả năng phân tích và sử dụng các dữ liệu dưới dạng XML.

Phân tích cú pháp XML : 
XML parsers là những chương trình mà có nhiệm vụ phân tích và sử dụng  dữ liệu trong trang XML.
Các đặc điểm nổi trội của XML parsers : 
              - Ngôn ngữ độc lập 
              - Mã độc lập 
              - Tính linh hoạt cao 
              - Phù hợp hơn với nhiều mục đích sử dụng 


JAXP chia XML prasers làm 2 loại là : 
  + Event-Based Parsers : Giao diện phân tích API đơn giản dành cho XML ( ví dụ như SAX)
  + Object-Based : Giao diện phân tích dạng Mô hình đối tượng tài liệu (ví dụ như DOM) 
Tìm hiểu thêm về giao diện DOM : là giao diện rất dễ hiểu , DOM phân tích toàn bộ tài liệu XML và kiến thiết một cấu trúc hoàn chỉnh đại diện cho bản tài liệu, trong bộ nhớ, bằng cách dùng các lớp để mô hình hóa các khái niệm
Tìm hiểu thêm về giao diện SAX : Bộ phân tích SAX được gọi là SAXParser và được tạo bằng javax.xml.parsers.SAXParserFactory. Khác với bộ phân tích DOM, bộ SAXParser không tạo ra một hình thức đại diện của tài liệu XML trong bộ nhớ và vì thế nó hoạt động nhanh hơn, ít tốn bộ nhớ hơn. Thay vào đó, bộ phân tích SAXParser thông báo cho các trình khách cấu trúc của tài liệu XML bằng cách gọi các hàm callbacks, nghĩa là, bằng cách gọi các phương pháp của trường hợp Bản mẫu:Javadoc:SE đã được cung cấp cho bộ phân tích.
Nếu muốn thêm thông tin bạn có thể tham khảo ở đây

So sánh về 2 giao diện : 
 + DOM chỉ tích hợp để dùng với các tài liệu nhỏ còn SAX có thể dùng để đọc các tài liệu lớn
 + DOM phù hợp cho việc đọc toàn bộ 1 trang XML còn SAX thì chia nhỏ nó ra
 + DOM thực hiển nhiệm vụ của mình khá chậm so với SAX

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

jsp life cycle

-Vòng đời của JSP có thể được định nghĩa như là toàn bộ tiến trình từ khi tạo ra đến khi hủy nó, tương tự như vòng đời của một Servlet, nhưng thêm một bước để biên dịch một JSP thành Servlet.
-Sau đây là các giai đoạn trong vòng đời của của một JSP:
  • Biên dịch
  • Khởi tạo
  • Thực thi
  • Hủy
4 giai đoạn chủ yếu trong vòng đời của JSP là tương tự như vòng đời của Servlet và chúng như sau:
Vòng đời (Life Cycle) của JSP

Biên dịch JSP

Khi môt trình duyệt yêu cầu một JSP, đầu tiên JSP engine kiểm tra để biết có hay không nó cần biên dịch trang này. Nếu trang chưa được biên dịch, hoặc nếu JSP đã được sửa đổi từ lần sửa đổi cuối cùng, thì JSP engine biên dịch trang này.
Tiến trình biên dịch gồm 3 bước:
  • Parse một JSP
  • Biên dịch JSP thành một Servlet
  • Biên dịch Servlet đó.

Khởi tạo JSP

Khi một container tải một JSP, nó gọi phương thức jspInit() trước khi phục vụ bất kỳ yêu cầu nào. Nếu bạn cần thực hiện sự khởi tạo JSP riêng, ghi đề phương thức jspInit():
public void jspInit(){
  // Initialization code...
}
Nét đặc trưng là, việc khởi tạo được thực hiện chỉ một lần và với phương thức int của Servlet, nói chung bạn khởi tạo các kết nối Database, mở các file, và tạo các bảng tra cứu trong phương thức jspInit.

Thực thi JSP

Giai đoạn này trong vòng đời JSP biểu diễn tất cả các tương tác với Request tới khi JSP đó bị hủy.
Bất cứ khi nào một trình duyệt yêu cầu một JSP và trang đã được tải và được khởi tạo, thì JSP engine triệu hồi phương thức _jspService() trong JSP đó.
Phương thức _jspService() nhận một HttpServletRequest và một HttpServletResponsenhư là các tham số của nó.
void _jspService(HttpServletRequest request, 
                 HttpServletResponse response)
{
   // Service handling code...
}
Phương thức _jspService() của một JSP được triệu hồi một lần cho mỗi yêu cầu và nó chịu trách nhiệm tạo Response cho Request đó và phương thức này cũng chịu trách nhiệm tạo các phản hồi tới tất cả 7 phương thức của HTTP, ví dụ: GET, POST, DELETE, …

Hủy JSP

Giai đoạn hủy một JSP trong vòng đời JSP biểu thị khi nào thì một JSP bị gỡ bỏ khỏi một container.
Phương thức jspDestroy() trong JSP là phương thức hủy tương đương với trong Servlet. Ghi đè phương thức jspDestroy khi bạn cần thực hiện bất kỳ quá trình hủy nào, ví dụ như giải phóng kết nối với Database, hoặc đóng các file.
Phương thức jspDestroy() có form sau:
public void jspDestroy()
{
   // Your cleanup code goes here.
}

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

"Mô tả về vai trò của Persistence, tại sao cân persistence vai trò, đóng góp như thế nào trong việc phát triển Data model..., Serializable: Định nghĩa, cách dùng, vai trong..."

1.  Persistence 
-JPA:
  •  Nhẹ, dựa trên POJO framework Java.
  •  Giúp để tồn tại các đối tượng Java để các cơ sở dư liệu quan hệ.
  •  Cung cấp các nhà cung cấp bền bỉ trong việc áp dụng JPA.
  •  Chuyển đổi dữ liệu giữa các loại không tương thích trong lập trình hướng đối tượng với các loại cơ sở dữ liệu cơ bản thích hợp.
  • Công nghệ ORM mà vẫn tồn tại các thực thể trong cơ sở dữ liệu, hỗ trợ lập bản đồ hướng đối tượng phần mềm để các lược đồ cơ sở dữ liệu thông qua lập bản đồ cấu hình.
  •  Hình hiển thị bản đồ của Java Objects để Tables.
-Đặc điểm của kỹ thuật của JPA là như sau:
  •  Hỗ trợ mô hình lập trình POJO cho sự bền bỉ đối tượng vào cơ sở dữ liệu.
  • Cung cấp một ORM API  tiêu chuẩn trong đó kết hợp các khái niệm hiện tại framework bền vững của bên thứ ba.
  • Ví dụ, Hibernate, TopLink, đối tượng Java Data (JDO), và như vậy.
  • Định nghĩa một giao diện nhà cung cấp dịch vụ được thực hiện bằng cách kiên trì khác nhau các nhà cung cấp.
-Hình hiển thị các thành phần chính của JPA API.

  •   Persistence - một bản sắc đó là một giá trị duy nhất được sử dụng bởi các container để map các đối tượng Entity các bản ghi tương ứng trong cơ sở dữ liệu.
  •   EntityManager - cung cấp các API để tương tác với các Entity.
  •   EntityManagerFactory - được sử dụng để tạo ra một thể hiện của EntityManager.
  •   Persistence Unit -  bao gồm các thông tin cấu hình XML  một  của các lớp học được điều khiển bởi các nhà cung cấp JPA.
  •   Persistence Context - liên quan đến quản lý entity,  một tập hợp các entity như vậy  đối với bất kỳ persistent, đó  một ví dụ duy nhất về entity.
-Các lớp entity phải được chú thích với các @Entity chú thích được định nghĩa trong javax.persistence package.
  •  Các lớp phải có một constructor không có đối với sửa đổi lần truy cập công cộng hoặc bảo vệ.
  •  tính hoặc các phương pháp tổ chức lớp nên không được tuyên bố  cuối cùng. Các lớp học cũng nên không được tuyên bố  cuối cùng
  • Nếu ví dụ entity được thông qua dưới dạng Session Bean sau đó nó phải thực hiện các Serializable  interface.
  • Entity có thể được các lớp Entity hoặc không.
  • Các Entity của lớp Entity phải được khai báo là private hay protected và được truy cập chỉ bằng các phương pháp hiện diện trong lớp.
  •  Mỗi entity phải được xác định bởi một định dạng duy nhất hoặc một khóa chính. Các khóa chính giúp khách hàng truy cập vào các entity.
  •  Các chú thích @ id áp dụng sở hữu entity xác định rằng sẽ là khóa chính.
-Để quản lý các trường entity trong persistence context, một  interface có tên EntityManager API.
  • Interface EntityManager được định nghĩa trong javax.persistence package và được sử dụng để tương tác với  persistence context.
  • Interface EntityManager cung cấp phương pháp để đồng bộ trạng thái của các entity trong cơ sở dữ liệu.
  •  Hình cho thấy cách làm việc của EntityManager trong JPA.
Bảng liệt kê một số các phương pháp quy định trong  EntityManager interface.
Persistence Unit:
  •  là một tập hợp các lớp map 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.
  • Contains hợp lý của các lớp entity, map siêu dữ liệu của họ, 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 các ví dụ EntityManager trong chương trình khách hàng.
  • Các đoạn mã hiển thị mã cho một tập tin persistence.xml phát triển như là một phần của các ứng dụng doanh nghiệp.

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.



Trong Java Persistence API, một entity có thể có truy cập field-based hoặc property-based. Trong việc tiếp cận field-based, cung cấp persistence truy cập trạng thái của entity trực tiếp thông qua các biến cá thể của nó. Trong truy cập property-based, nhà cung cấp persistence sử dụng JavaBeans kiểu get / phương pháp accessor thiết lập để truy cập tài sản persistent của đơn vị. Tất cả các trường và thuộc tính trong entity đang tồn tại. Tuy nhiên, ghi đè lên một lĩnh vực hoặc property's default persistence  bằng cách đánh dấu nó với các @Transient chú thích hoặc từ khóa Java transient.

Các Java Persistence API đơn giản hoá mô hình lập trình cho các thực thể kiên trì và thêm khả năng mà không có trong EJB 2.1. Dưới đây là danh sách những đơn giản hóa và bổ sung của nó:
  • Yêu cầu các lớp và các giao diện ít
  • Hầu như loại bỏ mô tả triển khai kéo dài qua các chú thích
  • Địa chỉ số kỹ thuật tiêu biểu nhất qua mặc định chú thích
  • Cung cấp bản đồ sạch hơn, dễ dàng hơn, tiêu chuẩn đối tượng quan hệ
  • Loại bỏ sự cần thiết cho mã tra cứu
  • Thêm hỗ trợ cho các thừa kế, đa hình, và các truy vấn đa hình.
  • Thêm hỗ trợ cho tên (tĩnh) và truy vấn động.
  • Cung cấp một ngôn ngữ truy vấn Java Persistence - một nâng cao EJB QL
  • Làm cho nó dễ dàng hơn để kiểm tra các đơn vị bên ngoài của EJB container
  • Có thể được sử dụng bên ngoài của container
  • Có thể được sử dụng với các nhà cung cấp bền bỉ của bên thứ ba pluggable


2. Serializable 

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ớ.
Ấn tượng nhất là 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.
Nếu bạn tò mò để biết: lớp Java chuẩn nào là có thể xếp thứ tự hoặc không, bạn kiểm tra văn kiện cho lớp đó. Việc kiểm tra khá đơn giản: Nếu lớp triển khai java.io.Serializable interface thì nó là Serializable, nếu không thì nó không thể xếp thứ tự.
Tại sao lại cần đến Serialization?
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.

Làm thế nào để Serialize một object?

Để Serialize một object ta cần đảm bảo rằng class của object đó cài đặt giao diện java.io.Serializable. Đây là một giao diện trống, ko 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ề class (ví dụ như tên của class, version của class, tổng số các field của 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