Thứ Ba, 27 tháng 12, 2016

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

Một EJB được chia làm 3 loại:
1. Entity beans 
  •  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 bean có thể được lưu trữ và khôi phục lại một cách 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.
2. 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 bean 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 có 2 loại:
  • Stateless: Không lưu trữ thông tin client, không phân biệt user ,có thể chia xẻ bởi nhiều client  
  • Stateful :Lưu trữ thông tin client ,mỗi 1 client – 1 bean: không chia xẻ
3. 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 
  • 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.
  • 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.
  • 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,…
*Sơ đồ tổng quan 1 EJB:


4. Web Service
  • Dịch vụ Web (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 dịch vụ Web 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 dịch vụ Web để 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 dịch vụ Web 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, dịch vụ Web 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 dịch vụ Web từ mức khái niệm đến cách thức xây dựng.
  • Ư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)
Có 4 cách lưu data của client khi xây dựng Web Application.
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.
[​IMG]
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.

[​IMG]



Chồng giao thức có 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.

Mô tả tổng quan về công nghệ của Java EE & EJB

*Java EE

I. Khái niệm:
Java EE (Enterprise Edition) là một nền tảng được sử dụng rộng rãi, chứa một tập hợp các công nghệ được phối hợp vào nhau, làm giảm đáng kể chi phí và độ phức tạp của việc phát triển, triển khai và quản lý các tầng làm việc, 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ũng cấp thêm một tập các API (giao diện lập trình ứng dụng) để phát triển và hoạt động các ứng dụng phía máy chủ (Server-Side Applications) một cách mạnh mẽ, có khả năng mở rông, đáng tin cậy, di đông (portable) và bảo mật.
Một số thành phần cơ bản bao gồm:

- 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 để bao gói (encapsulate) các business logic của các ứng dụng. Công nghệ EJB cho phép phát triển nhanh chóng và đơn giản hóa các ứng dụng phân tán, các giao dịch an toàn và di động 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.
II. Cấu trúc đó được chia ra làm 3 tầng:
- Client: Bao gồm các giao diện mà qua đó các ứng dụng được truy cập. Giao diện được phát triển để được sử dụng bởi khách hàng, nhân viên, nhà cung cấp của doanh nghiệp.
- Middle: thực hiện logic của các ứng dụng thông qua Beans và các tập tin lớp khác của ứng dụng.
- Data: Bao gồm tất cả các dữ liệu đó mà được truy cập bởi các ứng dụng.
III. Ứng dụng đa tầng:
 * Thành phần khác nhau của Java EE ứng dụng đa tầng là: Java EE clients, Web components, Java EE components, Database components, Security components.
- Java EE clients tham chiếu cho người sử dụng cuối cùng hoặc thực thể mà các ứng dụng được thiết kế: Web clients, Application clients, Applets, Java Bean components.
- Cả hai thành phần Web và các thành phần Java EE thực hiện logic kinh doanh cho các ứng dụng web và các ứng dụng kinh doanh tương ứng: Servlets, JSP, và JSFs là những thành phần Web trong một ứng dụng Web. Các trang tĩnh HTML cũng là những thành phần web. Enterprise beans thực hiện logic trong trường hợp ứng dụng doanh nghiệp.
- Các tầng thông tin doanh nghiệp bao gồm các cơ sở dữ liệu của ứng dụng.
- Thành phần bảo mật liên quan đến việc thực hiện các phương pháp bảo mật liên quan đến các ứng dụng dữ liệu.
 * Hình dưới đây là minh họa kiến trúc tầng đa và các thành phần tương ứng của nó:
IV. Web và Máy chủ ứng dụng:
- Các máy chủ Web bao gồm một thùng đựng Web chứa tất cả các thành phần Web.
- Các máy chủ ứng dụng có chứa Web cũng như một thùng đựng EJB chứa tất cả các thành phần Java Bean doanh nghiệp:
 + Máy chủ Web chấp nhận yêu cầu từ khách hàng thông qua các trang Web và ứng phó với các yêu cầu với các trang Web thích hợp.
 + Các thông tin liên lạc giữa các máy chủ của khách hàng và Web diễn ra thông qua Hyper Text Transfer Protocol (HTTP). 
 + Một máy chủ ứng dụng là một thành phần phần mềm mà được phụ trách cho tất cả các hoạt động của doanh nghiệp và thực hiện logic của doanh nghiệp.

*EJB:

I. EJB là gì?
- EJB(Enterprise JavaBean) là một thành phần trong kiến trúc J2EE. EJB là một nền tảng cho phép xây dựng các thành phần phần mềm có tính di động, có khả năng tái sử dụng cao. EJB giúp chúng ta có thể xây dựng, triển khai các ứng dụng  phân tán trở nên dễ dàng hơn.
- EJB hướng tới việc xây dựng các ứng dụng thương mại, lớn, phân tán. EJB đưa ra kiến trúc và các đặc tả cho việc phát triển và triển khai các thành phần phía server của cấc ứng dụng phân tán. Các thành phần này có thể dược xây dựng bởi chính tổ chức phát triển hoặc sử dụng hay mua lại từ một bên thứ ba.
- Tại sao phải sử dụng EJB?
 + Nó giúp ta tận dụng được các lợi ích cảu mô hình hướng thành phần trên server
 + Tách biệt business logic với system code (container cung cấp các system services)
 + Đảm bảo tính portability cho các components( trên server khác nhau, trên môi trường tính toàn khác nhau)
 + Cho phép cấu hình tai thời diểm triển khai
* Mô hình EJB


- EJB được chia làm 3 loại:
+ Session Bean: 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 bean 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 có 2 loại:

  •      Stateless: trạng thái các giao dịch của client sẽ không dượ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 độc lập với nhau.
  •      Statefull: trạng thái giao dịch tác vụ của client sẽ được lưu trữ lại để phục vụ cho những lần giao dịch sau.

+ Entity Bean: chứa các thông tin tác vụ và các phương thức hoạt động cảu nó. Một entity bean có thể được lưu trữ và khôi phục lại một cách 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.
+ Message driven bean: 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.
II. Ưu điểm và nhược điểm
- Ưu điểm: 
     + Đơn giản
     + Tái sử dụng
     + Có chức năng mở rộng
- Nhược điểm: không sử dụng cho mô hình nhỏ và vừa

III. Một số đổi mới của EJB 3.0 so với EJB 2.xx
- EJB 3.0 dùng annotation để mô tả các service trong EJB thay cho sử dụng XML như trong EJB 2.xx
     + Chuyển tất cả mọi thành phần trở thành một java class bình thường, giúp đơn giản hóa và thuận lợi cho người lập trình
     + Bản chất java object là thành phần để mapping dữ liệu dối với CSDL, java object được phép cài đặt các phương thức xử lý hay hành vi của object trực tiếp
- Các phương thức callback của EJB 2 được sử dụng lại trong EJB 3 với chỉ thị của annotation. Tuy nhiên, chúng không cần bắt buộc cài đặt theo nghĩa để tạo thuận lợi cho cả người quen lập trình EJB2 và tiếp cận EJB3 và cũng mong muốn cấu hình ứng dụng theo ý của người phát triển
- EJB loại bỏ home interface và home object. 2 thành phần này được thay thế như interface của các java class thông thường-Business interface, điều này cho thấy sự đơn giản trong việc cài đặt EJB3
- EJB 3 loại bỏ component interface và thay thế bằng java class thông thường, java class này sẽ implement Business interface
- EJB 3 cho phép trực tiếp yêu cầu instance bean mà không cần tìm kiếm bean instance thông qua JNDI với khái niệm injection





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

DOM và SAX

  I.      Các dạng mô hình:
Dữ liệu trong XML có thể được phân tích dựa trên nhiều mô hình khác nhau. Có 3 mô hình chính dùng để phân tích dữ liệu trong XML:
Ø       Mô hình tuyến tính (Linear): theo mô hình này dữ liệu được duyệt theo dạng đường thẳng, mô hình chỉ phù hợp với các dạng dữ liệu tĩnh không có sự thay đổi. Ví dụ như ta muốn tìm thông tin trong 1 cuốn sách trong thư viện chúng ta bắt đầu từ chủ đề của sách, đến tên sách, đến trang thứ mấy của sách và dòng thứ mấy. Tuy nhiên nếu cuốn sách đó được tái bản hay chuyển sang dạng khác thì mô hình này không còn thích hợp
Ø       Mô hình cây (Tree Model): như chúng ta đã biết XML có dạng cấu trúc phân cấp vì thế chúng ta có thể biểu diễn dữ liệu trong XML theo cấu trúc cây. Cấu trúc này có ưu điểm là chúng ta có thể xác định được các mối quan hệ giữa các phần tử với nhau. Ví dụ về mô hình này:
XML:
Cấu trúc cây:
Ø       Mô hình đối tượng: Mô hình đối tượng XML là tập hợp các đối tượng dùng để truy xuất và thao tác với các dữ liệu trong XML. Trong mô hình này dữ liệu cũng được tổ chức thành dạng cấu trúc cây cùng với các nút. Các đối tượng có nhiều thuộc tính và phương thức để chúng ta có thể quét cấu trúc cây XML và các phần tử trong cây.
      II.      Parsers:
1. Khái niệm:
Parser 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: có 2 kỹ thuật phân tích dữ liệu XML
Ø       Phân tích dựa trên sự kiện: 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 elementSimple API for XML (SAX) và Streaming API for XML (StAX) được xây dựng trên kỹ thuật này
Ø       Phân tích dựa trên đối tượng: theo kỹ thuật này dữ liệu trong XML sẽ được đọc và phân tích trên bộ nhớ theo sơ đồ cây XMLDocument Object Model (DOM) được xây dựng theo kỹ thuật này.
Ø       Cả 3 kỹ thuật SAXStAX và DOM đều có ưu nhược điểm khác nhau, do đó việc chọn lựa là tùy theo tình huống
DOM:
Ưu điểm
Nhược đ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
ü       Việc phân tích chỉ làm 1 lần
ü       Tốn bộ nhớ
SAX, StAX:
Ưu điểm
Nhược điểm
ü       Ít tốn bộ nhớ, StAX dễ làm hơn SAX
ü       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
  III.      Giới thiệu về DOM:
1. Khái niệm:
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ínhtext… đề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 là tập hợp các đối tượng dùng cho cấu trúc 1 văn bản; XML DOM là tập hợp các đối tượng dùng cho cấu trúc 1 văn bản XML; HTML DOM là tập hợp các đối tượng dùng cho cấu trúc 1 văn bản HTML.
2. Các đối tượng trong 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 (documentnode) 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. Chúng ta có ví dụ sau mô tả việc chuyển đổi từ XML sang DOM:
Ø       File XML:

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. Trong phạm vi bài này tôi chỉ giới thiệu khái niệm về DOM, còn ứng dụng ngôn ngữ lập trình để dùng DOM truy xuất nội dung XML tôi sẽ giới thiệu ở bài sau.
    IV.      Giới thiệu về 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 tốn tài nguyên hơn

Thứ Năm, 27 tháng 10, 2016

Servlet

Java Servlets là các chương trình chạy trên một Web server hoặc một Application server và thực hiện như là một tầng trung gian giữa một Yêu cầu từ một trình duyệt web hoặc HTTP client với các Database hoặc các ứng dụng trên HTTP server.
Sử dụng Servlets, bạn có thể thu thập Input từ người sử dụng thông qua các form trên trang web, hiển thị các bản ghi (record) từ một Database hoặc từ nguồn khác, và tạo các trang web động.
Java Servlets thường có chung mục đích: là các chương trình độc lập bởi việc sử dụng Common Gateway Interface (CGI). Nhưng so với CGI, thì Servlets có các lợi thế sau:
  • Hiệu năng tốt hơn đáng kể.
  • Servlets thực thi bên trong không gian địa chỉ của một Web server, không cần thiết phải tạo một tiến trình riêng biệt để xử lý mỗi yêu cầu từ Client.
  • Servlets là độc lập trên nền tảng bởi vì chúng được viết bằng Java.
  • Bởi vì viết bằng Java (mà Java cung cấp tình bảo mật cao trên Server) nên Servlets là đáng tin cậy.
  • Tính năng đầy đủ của thư viện của các lớp trong Java là luôn luôn có sẵn cho Servlets. Nó có thể giao tiếp với Applet, Database hoặc phần mềm khác thông qua các Socket và kỹ thuật RMI mà bạn đã từng thấy.

Vòng đời của Servlets

Một chu kỳ sống servlet có thể được định nghĩa là toàn bộ quá trình từ sáng tạo của nó đến sự hủy diệt.Sau đây là các đường dẫn theo sau là một servlet
  • Servlet được khởi tạo bằng cách gọi init () method.
  • Các cuộc gọi servlet service() method để xử lý yêu cầu của khách hàng.
  • Servlet được hủy bằng cách gọi destroy () method.
  • Cuối cùng, servlet là rác thải được thu thập bởi các bộ thu rác của JVM.
Bây giờ chúng ta thảo luận về các phương pháp vòng đời chi tiết.

The init() method :

  • init() method được thiết kế để được gọi là chỉ một lần. Nó được gọi là khi servlet đầu tiên được tạo ra, và không được gọi là một lần nữa cho mỗi yêu cầu người sử dụng. Vì vậy, nó được sử dụng để khởi tạo một lần, cũng như với các init() method của applet.
  • Servlet thường được tạo ra khi một người sử dụng đầu tiên gọi một URL tương ứng với servlet, nhưng bạn cũng có thể xác định rằng các servlet được nạp khi máy chủ đầu tiên được bắt đầu.
  • Khi người dùng kích hoạt một servlet, một trường hợp duy nhất của mỗi servlet được tạo ra, với mỗi yêu cầu người sử dụng kết quả trong một chủ đề mới được bàn giao cho doGet hay doPost cho phù hợp.Phương thức init () chỉ đơn giản là tạo ra hoặc tải một số dữ liệu sẽ được sử dụng trong suốt cuộc đời của servlet.

The service() method :

  •  method là phương pháp chính để thực hiện các công việc thực tế. Servlet container (tức là máy chủ web) gọi service() để xử lý request từ client (trình duyệt) và viết các response định dạng lại cho client.
  • Mỗi khi máy chủ nhận được một request cho một servlet, máy chủ sẽ tạo ra một thread mới và call service. Các service () kiểm tra loại Request HTTP (GET, POST, PUT, DELETE, vv) và gọi các method doGet, doPost, doPut, doDelete phù hợp.

Cấu trúc Servlet API

  • javax.servlet package chứa 1 abstract class tên là GenericServlet
  • Các GenericServlet kế thừa từ lớp Object và giúp thiết kế một giao thức servlet độc lập
  • Các GenericServlet triển khai interface:
  • ServletConfig: định nghĩa các method được sử dụng bởi Servlet container để truyền thông tin tới 1 Servlet mà nó khởi tạo.
  • Serializable: được định nghĩa trong java.io package để sắp đặt trạng thái của 1 đối tượng.
  • Lớp HTTPServlet là một lớp con của GenericServlet và cho phép để tạo ra một Servlet dựa trên HTTP như là một phần của một ứng dụng Web.


    Continuous Integration

    Với nhiều bạn khái niệm Continuous Integration (Tích hợp liên tục - CI) là một cái gì đó xa lạ. Hôm nay mình sẽ giúp các bạn hiểu thế nào là CI và vận dụng nó vào trong công việc phát triển phần mềm.

    CI là gì?

    Tích hợp liên tục (CI) là phương pháp phát triển phần mềm đòi hỏi các thành viên trong nhóm tích hợp công việc thường xuyên. Mỗi ngày, các thành viên đều phải theo dõi và phát triển công việc của họ ít nhất một lần. Việc này sẽ được một nhóm khác kiểm tra tự động, nhóm này sẽ tiến hành kiểm thử truy hồi để phát hiện lỗi nhanh nhất có thể. Cả nhóm thấy rằng phương pháp tiếp cận này giúp giảm bớt vấn đề về tích hợp hơn và cho phép phát triển phần mềm gắn kết nhanh hơn — Thư viện phát triển phần mềm của IBM
    Continuous IntegrationVòng đời phát triển phần mềm theo phương pháp CI

    Tại sao nên dùng CI ?

    Sử dụng phương pháp CI giúp cho hệ thống luôn đảm bảo là build được và chạy đúng (do phải pass qua toàn bộ test case). Mặt khác các công đoạn test sẽ được hệ thống CI server thực hiện tự dộng giúp cho ta có thể dễ dàng biết được tình trạng của một branch, một commit nào đó và không cần lấy source về test thử. Do đó tốc độ phát triển được tăng lên. Đây cũng là lý do mà nhiều team phát triển theo mô hình Agile lựa chọn phương pháp này.

    Một ví dụ tổng quát về việc sử dụng các công cụ, dịch vụ phối hợp với nhau để thực hiện Continous Integration (CI) trong quá trình phát triển phần mềm.

    Mô hình tổng quan gồm có những gì ?

    CloudFormation : một dịch vụ của AWS hỗ trợ việc quản lý, xây dựng các tài nguyên trên Amazon Web Service (AWS) một cách tự động thông qua các APIs và Json templates.
    Chức năng : cung cấp các tài nguyên cần thiết trên AWS cho dự án, trong ví dụ này chúng ta sẽ cần :
      01 EC2 instance để cài đặt Jenkins (CI server)
      01 ELB xử lý việc cân bằng tải
      01 RDS instance cho lưu trữ dữ liệu
      01 ECS cluster để chạy, điều phối các docker containers
      01 ECR registry để lưu trữ các docker images


    Ansible : một công cụ, ngôi sao đang lên, trong việc quản lý cấu hình tự động cho các machines.
    Chức năng : cung cấp việc cài đặt và thiết lập môi trường cũng như các packages cần thiết cho CI server :

      Nginx với chức năng reverse proxy cho jenkins
      Jenkins với chức năng CI server
      Docker với chức năng build docker image
      Aws CLI tương tác với ECS, ECR qua dòng lệnh
    Jenkins : CI server, một sản phẩm mã nguồn mở giúp tự động hóa các công việc building, deploying các phần mềm, dự án.
    Chức năng : cung cấp hõ trợ cấu hình chạy unit test, build, deploy cho dự án.

    Docker : một công cụ giúp đóng gói và phân phối ứng dụng dễ dàng, đa nền tảng. 
    Chức năng : đóng gói và phân phối các ứng dụng thông qua các docker images.

    ECS : EC2 Container Service. Một dịch vụ của AWS thực hiện việc điều phối, quản lý, liên kết các docker container để làm việc hiệu quả.
    Chức năng : cung cấp việc vận hành và điều phối các docker containers.

    ECR : EC2 Container Registry. Một dịch vụ của AWS để lưu trữ các docker images, chức năng tương tự như DockerHub. Từ đấy các hệ thống có thể lấy docker image theo yêu cầu.

    Vậy các bộ phận trên phối hợp với nhau như thế nào ?


      1. Engineer push code tới git repository
      2. Jenkins định kỳ kiểm tra và pull code mới về
      3. Jenkins chạy Unit test
      4. Jenkins chạy docker build để đóng gói ứng dụng vào docker image
      5. Jenkins pushs docker image tới ECR
      6. Jenkins trigger deploy tới ECS để lấy docker image mới từ ECR
    Các bước trên được thực hiện tuần tự cho tới khi tất cả các bước được hoàn thành tạo nên một chu trình khép kín CI.

    Như vậy chúng ta đã có một mô hình tổng quát về CI tích hợp các công cụ có sẵn AWS, Docker, Jenkins, Ansible. Việc tích hợp CI sẽ đẩy nhanh quá trình phát hiện lỗi thông qua việc tự động hóa. Giúp cho người viết mã có thể sớm sửa lỗi, góp phần tăng tốc quá trình đưa những cập nhật mới của ứng dụng tới người dùng.