JavaRush /Blog Java /Random-VI /Giới thiệu về Java EE
zor07
Mức độ
Санкт-Петербург

Giới thiệu về Java EE

Xuất bản trong nhóm
Hôm nay chúng ta sẽ nói về nó là gì - Java EE: nó bao gồm những gì, các tính năng kiến ​​​​trúc của ứng dụng Java EE là gì và chúng tôi sẽ cung cấp các mô tả về các công nghệ khác nhau của nền tảng này. Bản thân chủ đề này rất rộng rãi, nhưng chúng tôi sẽ không dừng lại ở những điều cơ bản. Cuối cùng, chúng ta sẽ làm một so sánh nhỏ giữa Java EE với Spring Framework và trả lời câu hỏi: “học cái gì tốt hơn” (spoiler: tất nhiên là bạn cần phải học mọi thứ rồi =))) Giới thiệu về Java EE - 1Hãy bắt đầu từ những điều cơ bản.

Java EE - nó là gì?

Java EE là một nền tảng được xây dựng dựa trên Java SE, cung cấp API và môi trường thời gian chạy để phát triển và chạy các ứng dụng mạng quy mô lớn, nhiều tầng, có thể mở rộng, đáng tin cậy và an toàn. Những ứng dụng như vậy được gọi là ứng dụng doanh nghiệp vì chúng giải quyết các vấn đề mà các doanh nghiệp lớn gặp phải. Tuy nhiên, không chỉ các tập đoàn lớn và cơ quan chính phủ mới có thể hưởng lợi từ các loại ứng dụng này và những lợi ích mà Java EE mang lại. Các giải pháp mà nền tảng Java EE cung cấp rất hữu ích và đôi khi đơn giản là cần thiết đối với các nhà phát triển cá nhân và tổ chức nhỏ.

Phát triển Java EE

Java EE được phát triển thông qua Quy trình cộng đồng Java (JCP), được hình thành vào năm 1998. Nó cho phép các bên quan tâm tham gia vào việc định hình các phiên bản tương lai của đặc tả nền tảng ngôn ngữ Java. Cơ sở của quy trình này là JSR (Yêu cầu đặc tả Java), các tài liệu chính thức mô tả các đặc tả và công nghệ được đề xuất bổ sung vào nền tảng Java. Những yêu cầu như vậy được thực hiện bởi các thành viên cộng đồng - các nhà phát triển và công ty bình thường. Sau này bao gồm Oracle, Red Hat, IBM, Apache và nhiều hãng khác. Những thứ kia. những người này đề xuất các tính năng và tính năng mới để xem xét mà họ muốn đưa vào Java. Và sau đó họ tổ chức một cuộc bỏ phiếu, trên cơ sở đó đưa ra quyết định về những gì sẽ đưa vào phiên bản tiếp theo. Lịch sử phiên bản Java EE trông như thế này:
  • J2EE 1.2 (tháng 12 năm 1999)
  • J2EE 1.3 (tháng 9 năm 2001)
  • J2EE 1.4 (Tháng 11 năm 2003)
  • Java EE 5 (tháng 5 năm 2006)
  • Java EE 6 (tháng 12 năm 2009)
  • Java EE 7 (tháng 5)
  • Java EE 8 (tháng 8 năm 2017)
  • Jakarta EE 8 (tháng 9 năm 2019)
Năm 2017, một cột mốc mới trong quá trình phát triển nền tảng đã xảy ra: Oracle chuyển giao quyền kiểm soát việc phát triển Java EE cho Eclipse Foundation. Và vào tháng 4 năm 2018, Java EE được đổi tên thành Jakarta EE, tương thích hoàn toàn với Java EE 8.

Kiến trúc ứng dụng Java EE

Giới thiệu ngắn gọn. Để dễ hiểu hơn, chúng ta hãy nói về cấu trúc của ứng dụng Java EE và một số thuật ngữ mà chúng ta sẽ sử dụng sau. Các ứng dụng Java EE có cấu trúc có hai phẩm chất chính:
  • Thứ nhất, đa cấp. Các ứng dụng Java EE có nhiều tầng và chúng ta sẽ nói về vấn đề này chi tiết hơn;
  • thứ hai, làm tổ. Có một máy chủ Java EE (hoặc máy chủ ứng dụng), với các thùng chứa thành phần nằm bên trong nó. Những thùng chứa này chứa các thành phần (bingo!).
Để giải thích kiến ​​trúc của các ứng dụng Java EE, trước tiên hãy nói về các lớp. Các cấp độ là gì? Những công nghệ Java EE nào được sử dụng ở các cấp độ khác nhau? Tiếp theo, chúng ta sẽ thảo luận về cách các máy chủ ứng dụng, bộ chứa thành phần và bản thân các thành phần đó được kết nối với nhau như thế nào. Nhưng hãy nhớ rằng tất cả những điều này đều là những góc nhìn từ các góc độ khác nhau về cùng một sự việc và thứ tự ở đây không quá quan trọng.

Cấp độ ứng dụng

Ứng dụng nhiều tầng là các ứng dụng được phân chia theo nguyên tắc chức năng thành các mô-đun (cấp độ, lớp) biệt lập. Thông thường (bao gồm cả trong bối cảnh phát triển Java EE), các ứng dụng doanh nghiệp được chia thành ba cấp độ:
  • khách hàng;
  • mức trung bình;
  • mức truy cập dữ liệu.
  1. Lớp máy khách là một ứng dụng yêu cầu dữ liệu từ máy chủ Java EE (lớp giữa). Đến lượt máy chủ sẽ xử lý yêu cầu của khách hàng và trả về phản hồi cho yêu cầu đó. Ứng dụng khách có thể là trình duyệt, ứng dụng độc lập (di động hoặc máy tính để bàn) hoặc các ứng dụng máy chủ khác không có giao diện đồ họa.

  2. Cấp độ trung bình lần lượt được chia thành cấp độ web và cấp độ logic nghiệp vụ.

    1. Lớp web bao gồm một số thành phần cung cấp sự tương tác giữa máy khách và lớp logic nghiệp vụ.

      Các công nghệ Java EE sau đây được sử dụng ở cấp độ web:

      • Công nghệ JavaServer Faces (JSF);
      • Trang máy chủ Java (JSP);
      • Ngôn ngữ biểu thức (EL);
      • Servlet;
      • Bối cảnh và nội dung phụ thuộc cho Java EE (CDI).

    2. Lớp logic nghiệp vụ bao gồm các thành phần thực hiện tất cả logic nghiệp vụ của ứng dụng. Logic nghiệp vụ là mã cung cấp chức năng đáp ứng nhu cầu của một số lĩnh vực kinh doanh cụ thể (ngành tài chính, ngân hàng, thương mại điện tử). Cấp độ này có thể được coi là cốt lõi của toàn bộ hệ thống.

      Các công nghệ liên quan ở cấp độ này:

      • JavaBean doanh nghiệp (EJB);
      • Dịch vụ web JAX-RS RESTful;
      • Các thực thể API liên tục của Java;
      • Dịch vụ tin nhắn Java.

  3. Cấp độ truy cập dữ liệu Cấp độ này đôi khi được gọi là cấp độ hệ thống thông tin doanh nghiệp (EIS). EIS bao gồm nhiều máy chủ cơ sở dữ liệu khác nhau, hệ thống hoạch định nguồn lực doanh nghiệp ERP (Lập kế hoạch nguồn lực doanh nghiệp) và các nguồn dữ liệu khác. Lớp logic nghiệp vụ truy cập lớp này để lấy dữ liệu.

    Ở cấp độ này, bạn có thể tìm thấy các công nghệ như:

    • API kết nối cơ sở dữ liệu Java (JDBC);
    • API kiên trì Java;
    • Kiến trúc trình kết nối Java EE;
    • API giao dịch Java (JTA).

Máy chủ ứng dụng, bộ chứa, thành phần

Chúng ta hãy xem định nghĩa của Java EE từ Wikipedia. Java EE là một tập hợp các thông số kỹ thuật và tài liệu liên quan dành cho ngôn ngữ Java, mô tả kiến ​​trúc của nền tảng máy chủ phục vụ các nhiệm vụ của các doanh nghiệp vừa và lớn. Để hiểu rõ hơn ý nghĩa của “bộ thông số kỹ thuật” trong ngữ cảnh này, hãy vẽ một sự tương tự với giao diện Java. Bản thân giao diện Java không có chức năng. Nó chỉ đơn giản xác định một số hợp đồng theo đó một số chức năng được triển khai. Nhưng các lớp khác thực hiện giao diện. Hơn nữa, một giao diện có thể có nhiều cách triển khai, mỗi giao diện có thể khác nhau ở một số chi tiết. Các đặc điểm kỹ thuật là hoàn toàn giống nhau. Java EE trần trụi chỉ là một tập hợp các thông số kỹ thuật. Các thông số kỹ thuật này được triển khai bởi nhiều máy chủ Java EE khác nhau. Máy chủ Java EE là một ứng dụng máy chủ triển khai các API nền tảng Java EE và cung cấp các dịch vụ Java EE tiêu chuẩn. Máy chủ Java EE đôi khi được gọi là máy chủ ứng dụng. Dữ liệu máy chủ có thể chứa các thành phần ứng dụng, mỗi thành phần tương ứng với cấp độ riêng của nó trong hệ thống phân cấp nhiều cấp. Máy chủ Java EE cung cấp nhiều dịch vụ khác nhau cho các thành phần này dưới dạng một thùng chứa. Bộ chứa là giao diện giữa các thành phần mà chúng lưu trữ và chức năng độc lập với nền tảng cấp thấp hỗ trợ thành phần đó. Các container cung cấp các dịch vụ cụ thể cho các thành phần mà chúng lưu trữ. Ví dụ: quản lý vòng đời phát triển, chèn phụ thuộc, đồng thời, v.v. Các vùng chứa che giấu sự phức tạp về mặt kỹ thuật và tăng tính di động. Có bốn loại vùng chứa khác nhau trong Java EE :
  1. Các thùng chứa Applet được hầu hết các trình duyệt triển khai. Khi phát triển các applet, bạn có thể tập trung vào khía cạnh trực quan của ứng dụng, trong khi vùng chứa cung cấp một môi trường an toàn.

  2. Bộ chứa ứng dụng khách (ACC) chứa một tập hợp các lớp, thư viện Java và các tệp khác cần thiết để triển khai các tính năng như dịch vụ chèn, quản lý bảo mật và đặt tên trong các ứng dụng Java SE.

  3. Bộ chứa web cung cấp các dịch vụ cốt lõi để quản lý và thực thi các thành phần web (servlet, thành phần EJB Lite, trang JSP, bộ lọc, trình nghe, trang JSF và dịch vụ web). Nó chịu trách nhiệm khởi tạo, khởi tạo và gọi các servlet cũng như hỗ trợ các giao thức HTTP và HTTPS. Vùng chứa này được sử dụng để phục vụ các trang web cho trình duyệt máy khách.

  4. Bộ chứa EJB (Enterprise Java Bean) chịu trách nhiệm quản lý và thực thi các thành phần mô hình EJB chứa lớp logic nghiệp vụ của ứng dụng. Nó tạo ra các thực thể đậu EJB mới, quản lý vòng đời của chúng và cung cấp các dịch vụ như giao dịch, bảo mật, đồng thời, phân phối, đặt tên hoặc khả năng gọi không đồng bộ.

Ngoài ra, trong Java EE còn có bốn loại thành phần mà việc triển khai đặc tả Java EE phải hỗ trợ:
  1. Applet là các ứng dụng giao diện đồ họa người dùng (GUI) chạy trên trình duyệt. Họ tận dụng API Swing phong phú để tạo ra giao diện người dùng mạnh mẽ.

  2. Ứng dụng là các chương trình chạy ở phía máy khách. Chúng thường là giao diện đồ họa người dùng (GUI) và được sử dụng để xử lý hàng loạt.

  3. Các ứng dụng web (bao gồm các servlet và bộ lọc của chúng, trình xử lý sự kiện web, trang JSP và JSF) - chạy trong vùng chứa web và phản hồi các yêu cầu HTTP từ máy khách web. Servlets cũng hỗ trợ các điểm cuối dịch vụ web SOAP và RESTful.

  4. Các ứng dụng doanh nghiệp (được xây dựng bằng Đậu Java doanh nghiệp, Dịch vụ tin nhắn Java, API giao dịch Java, Cuộc gọi không đồng bộ, Dịch vụ thời gian) chạy trong vùng chứa EJB. EJB do container quản lý xử lý logic kinh doanh giao dịch. Chúng có thể được truy cập cục bộ hoặc từ xa thông qua RMI (hoặc HTTP cho các dịch vụ web SOAP và RESTful).

Sơ đồ bên dưới thể hiện kiến ​​trúc ứng dụng Java EE điển hình: Giới thiệu về Java EE - 2

Công nghệ

Vì vậy, chúng tôi đã sắp xếp kiến ​​trúc. Cấu trúc tổng thể phải rõ ràng. Trong quá trình mô tả các thành phần kiến ​​trúc, chúng ta đã đề cập đến một số công nghệ Java EE như EJB, JSP, v.v. Chúng ta hãy xem xét kỹ hơn về chúng. Bảng dưới đây cho thấy các công nghệ được sử dụng chủ yếu ở cấp độ khách hàng:
Công nghệ Mục đích
Servlet Các lớp Java xử lý động các yêu cầu của máy khách và tạo phản hồi (thường là các trang HTML).
Các mặt máy chủ Java (JSF) Một framework để xây dựng các ứng dụng web có giao diện người dùng. Cho phép bạn bao gồm các thành phần giao diện người dùng (ví dụ: các trường và nút) trên một trang, chuyển đổi và xác thực các thành phần này, đồng thời lưu trữ dữ liệu này trong bộ lưu trữ phía máy chủ.
Công nghệ Facelets của Java Server Facelets Nó là một kiểu con của ứng dụng JSF sử dụng các trang XHTML thay vì các trang JSP
Trang máy chủ Java (JSP) Các tài liệu văn bản được biên dịch thành servlet. Cho phép bạn thêm nội dung động vào các trang tĩnh (chẳng hạn như trang HTML)
Thư viện thẻ tiêu chuẩn của trang máy chủ Java (JSTL) Thư viện thẻ đóng gói chức năng cốt lõi trong ngữ cảnh của các trang JSP.
Ngôn ngữ biểu thức Một tập hợp các thẻ tiêu chuẩn được sử dụng trong các trang JSP và Facelets để truy cập các thành phần Java EE.
Bối cảnh và nội xạ phụ thuộc cho Java EE (CDI) Biểu thị một tập hợp các dịch vụ được cung cấp bởi các bộ chứa Java EE để quản lý vòng đời của các thành phần, cũng như đưa các thành phần vào đối tượng máy khách một cách an toàn.
Thành phần đậu Java Các đối tượng đóng vai trò lưu trữ dữ liệu tạm thời cho các trang ứng dụng.
Bảng dưới đây cho thấy các công nghệ được sử dụng ở cấp độ logic nghiệp vụ:
Công nghệ Mục đích
Các thành phần Enterprise Java Beans (enterprise Bean) EJB là các hạt được quản lý có chứa chức năng cốt lõi của ứng dụng.
Dịch vụ web RESTful JAX-RS Nó là một API để phát triển các dịch vụ web tuân theo phong cách kiến ​​trúc REST.
Điểm cuối dịch vụ web JAX-WS API để tạo và sử dụng các dịch vụ web SOAP.
Các thực thể Java Persistence API (JPA) API để truy cập dữ liệu trong kho lưu trữ dữ liệu và chuyển đổi dữ liệu đó thành các đối tượng ngôn ngữ lập trình Java và ngược lại.
Đậu được quản lý Java EE Các Bean được quản lý cung cấp logic nghiệp vụ của ứng dụng nhưng không yêu cầu các tính năng giao dịch hoặc bảo mật của EJB.
Dịch vụ tin nhắn Java API Dịch vụ tin nhắn Java (JMS) là một tiêu chuẩn nhắn tin cho phép các thành phần ứng dụng Java EE tạo, gửi, nhận và đọc tin nhắn. Điều này đảm bảo giao tiếp phân tán, đáng tin cậy và không đồng bộ giữa các thành phần.
Bảng bên dưới hiển thị các công nghệ được sử dụng ở lớp truy cập dữ liệu:
Công nghệ Mục đích
API kết nối cơ sở dữ liệu Java (JDBC) API cấp thấp để truy cập và truy xuất dữ liệu từ kho lưu trữ dữ liệu. Cách sử dụng JDBC điển hình là viết các truy vấn SQL dựa vào cơ sở dữ liệu cụ thể.
API kiên trì Java API để truy cập dữ liệu trong kho lưu trữ dữ liệu và chuyển đổi dữ liệu đó thành các đối tượng ngôn ngữ lập trình Java và ngược lại. API cấp cao hơn nhiều so với JDBC. Ẩn tất cả sự phức tạp của JDBC đối với nhà phát triển.
Kiến trúc trình kết nối Java EE API để kết nối các tài nguyên khác của công ty, chẳng hạn như:
  • ERP (Hệ thống hoạch định nguồn lực doanh nghiệp, hệ thống hoạch định nguồn lực doanh nghiệp),
  • CRM (tiếng Anh: Customer Relations Management, hệ thống quản lý quan hệ khách hàng).
API giao dịch Java (JTA) API để xác định và quản lý giao dịch, bao gồm giao dịch được phân phối và giao dịch trên nhiều kho dữ liệu.

Java EE so với mùa xuân

Spring Framework được coi là đối thủ cạnh tranh với Java EE. Nếu bạn nhìn vào sự phát triển của hai nền tảng này, sẽ xuất hiện một bức tranh thú vị. Các phiên bản đầu tiên của Java EE được tạo ra với sự tham gia của IBM. Chúng tỏ ra rất ngầu nhưng lại vụng về, nặng nề và bất tiện khi sử dụng. Các nhà phát triển gặp khó khăn vì nhu cầu duy trì một số lượng lớn tệp cấu hình và các lý do khác khiến quá trình phát triển trở nên phức tạp. Cùng lúc đó, Spring IoC ra đời. Đó là một thư viện nhỏ, đẹp và dễ sử dụng. Nó cũng sử dụng một tệp cấu hình, nhưng không giống như Java EE, chỉ có một tệp. Sự đơn giản của Spring đã dẫn đến việc hầu hết mọi người bắt đầu sử dụng framework này trong các dự án của mình. Và sau đó Spring và Java EE bắt đầu con đường dẫn đến cùng một thứ, nhưng từ những mục đích khác nhau. Pivotal Software, nhà phát triển Spring, bắt đầu tung ra hết dự án này đến dự án khác để đáp ứng mọi nhu cầu có thể và không thể có của các nhà phát triển Java. Dần dần, cái trước đây được gọi là Spring đầu tiên trở thành một trong những dự án, sau đó được sáp nhập hoàn toàn với một số dự án khác trong Spring Core. Tất cả điều này đã dẫn đến sự phức tạp không thể tránh khỏi của Spring so với ban đầu. Theo thời gian, việc theo dõi toàn bộ mớ phụ thuộc của Spring trở nên rất khó khăn và nảy sinh nhu cầu về một thư viện riêng có thể tự tải và chạy mọi thứ (bây giờ Spring Boot yêu quý đã bị trục trặc ở đâu đó). Trong suốt thời gian qua, JCP đã nỗ lực làm một việc - đạt được sự đơn giản hóa tối đa mọi thứ có thể có trong Java EE. Kết quả là, trong EJB hiện đại, để mô tả một hạt đậu, chỉ cần chỉ định một chú thích phía trên lớp đó là đủ, điều này cho phép nhà phát triển truy cập vào toàn bộ sức mạnh của công nghệ Enterprise Java Beans. Và sự đơn giản hóa tương tự đã ảnh hưởng đến mọi đặc tả trong Java EE. Kết quả là Spring và Java EE gần như tương đương nhau về mặt chức năng. Một số thứ tốt hơn, một số thứ tệ hơn, nhưng nếu bạn nhìn toàn cầu, không có sự khác biệt lớn. Điều tương tự cũng xảy ra với sự phức tạp của công việc. Cả Spring và Java EE đều là những công cụ tuyệt vời. Có lẽ điều tốt nhất hiện có để xây dựng các ứng dụng mạng doanh nghiệp bằng Java. Tuy nhiên, Java EE nói chung chỉ có thể hoạt động trong Máy chủ ứng dụng doanh nghiệp (Tomcat không phải là một) và một ứng dụng trên ngăn xếp Spring có thể chạy trên mọi thứ (trên cùng một Tomcat) và thậm chí không có máy chủ nào cả (vì nó sẽ chạy nó bên trong nó một cách độc lập). Điều này làm cho Spring trở thành một công cụ lý tưởng để phát triển các ứng dụng GUI ngoại vi nhỏ hoặc kiến ​​trúc microservice. Nhưng việc loại bỏ sự phụ thuộc vào máy chủ ứng dụng có tác động tiêu cực đến khả năng mở rộng của ứng dụng Spring. Và Java EE rất phù hợp để triển khai ứng dụng cụm nguyên khối có thể mở rộng. Các nhà phát triển quen thuộc với Spring Framework hiện đang có nhu cầu lớn hơn trên thị trường lao động. Đây là cách nó đã xảy ra trong lịch sử: vào thời điểm Java EE quá phức tạp, Spring “đã có được cơ sở khách hàng”. Chưa hết, vẫn chưa có câu trả lời rõ ràng cho câu hỏi học Spring hay Java EE để làm gì. Một người mới bắt đầu có thể được đưa ra lời khuyên sau đây. Làm quen (ít nhất là bề ngoài) với cả hai nền tảng. Viết một dự án nhà nhỏ bằng cả Java EE và Spring. Và sau đó đi sâu hơn vào khuôn khổ cần thiết trong công việc. Nhờ đó, việc chuyển đổi giữa Spring và Java EE sẽ không gặp khó khăn gì.

Kết quả

Tất nhiên, một chủ đề có quy mô lớn không thể đề cập hết trong một bài viết! Sau rất nhiều thuật ngữ mới, chắc hẳn bạn sẽ muốn “áp dụng” kiến ​​thức này vào một ví dụ thực tế. Do đó, chúng ta sẽ tiếp tục nghiên cứu Java EE: bạn sẽ tìm thấy những bài học thực tế về việc thiết lập môi trường cục bộ để phát triển Java EE trong bài viết tiếp theo.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION