Các ứng dụng doanh nghiệp thường giải quyết các hoạt động như thu thập, xử lý, chuyển đổi và báo cáo một lượng lớn dữ liệu. Những dữ liệu này thường được lưu trữ trong một máy chủ cơ sở dữ liệu ở một vị trí cụ thể và được truy xuất theo yêu cầu. Ứng dụng chịu trách nhiệm xử lý dữ liệu từ cơ sở dữ liệu và cuối cùng trình bày chúng cho khách hàng sử dụng. Tuy nhiên, sự phức tạp liên quan đến việc giảm thiểu trao đổi dữ liệu giữa các kiến trúc khác nhau là thách thức thực sự mà các nhà phát triển phải đối mặt. Trung tâm của vấn đề nằm ở việc giảm bớt mối quan hệ phức tạp của quá trình di chuyển dữ liệu giữa mã được sử dụng để phát triển ứng dụng và mô hình lưu trữ được sử dụng để duy trì dữ liệu. Nói tóm lại, ý tưởng là tạo ra một cơ chế tương tác liền mạch giữa hai mô hình bền vững:bản chất hướng đối tượng của ngôn ngữ Java và mô hình cơ sở dữ liệu quan hệ.
API cơ bản cho cơ sở dữ liệu
Nền tảng Java đã có các API tiêu chuẩn để làm việc với các hệ thống cơ sở dữ liệu dưới dạng các API JDBC. Các API này rất xuất sắc trong việc làm việc với cơ sở dữ liệu và cung cấp các phương tiện cần thiết để tương tác với cơ sở dữ liệu một cách thuận tiện từ ngôn ngữ Java. Nhưng, vấn đề là Java là một ngôn ngữ hướng đối tượng. JDBC cung cấp các API cốt lõi để tương tác với cơ sở dữ liệu và không tập trung vào việc chuyển đổi cấu trúc hàng và cột của bảng cơ sở dữ liệu thành một lớp thực thể. Do đó, một lớp API được tìm kiếm hoạt động bên trên JDBC API. API bền bỉ, hoặc JPA, giảm thiểu hai mô hình khác nhau về kiến trúc với mục tiêu tận dụng tính linh hoạt của hoạt động. API giúp biểu diễn một bảng quan hệ cơ sở dữ liệu dưới dạng POJO và có thể được xử lý theo cách tương tự tất cả thông qua mã Java. API JDBC cốt lõi hoạt động trong nền để đối phó với sự phức tạp của giao tiếp và kết nối cơ sở dữ liệu trong khi JPA cho phép thực hiện các giao dịch theo mã hướng đối tượng của ngôn ngữ Java. Tuy nhiên, ánh xạ dữ liệu giữa cơ sở dữ liệu quan hệ và Java không phải là một nhiệm vụ dễ dàng.
Hỗ trợ Java Persistence
Trong cơ sở dữ liệu quan hệ điển hình, thông tin được lưu trữ trong cấu trúc hàng và cột. Việc trao đổi dữ liệu giữa hệ thống cơ sở dữ liệu và mô hình đối tượng của ứng dụng Java là khó khăn vì Java chỉ định một thực thể duy nhất là một lớp được biểu thị bằng một tập hợp các thuộc tính và hoạt động được áp dụng trên chúng. Do đó, để tuân thủ sự không phù hợp về hành vi giữa hai kiến trúc khác nhau, một lập trình viên Java phải viết nhiều dòng mã. Những dòng mã này giúp chuyển đổi dữ liệu hàng và cột của bảng cơ sở dữ liệu sang các đối tượng Java. Tuy nhiên, thường những dòng mã này trở nên quá lặp đi lặp lại, dẫn đến việc mã nguồn chứa đầy mã nguồn viết sẵn. Điều này là không mong muốn và vi phạm nguyên tắc hướng đối tượng cơ bản về khả năng tái sử dụng. Mặc dù các mã thông minh có thể giảm thiểu nhiều nghịch cảnh, nhưng đó không phải là một giải pháp dễ dàng. Sự xuất hiện của các giải pháp của bên thứ ba là thời gian nghỉ ngơi trong việc ánh xạ dữ liệu cơ sở dữ liệu vào các đối tượng Java nhưng chúng không phải là tiêu chuẩn. Việc triển khai của mỗi nhà cung cấp khác nhau đáng kể. Tất cả điều này có nghĩa là tình huống yêu cầu một thư viện API ổn định tiêu chuẩn từ chính nền tảng Java. Điều này dẫn đến sự ra đời của Java Persistence API (JPA), đặc biệt là để thu hẹp khoảng cách giữa mô hình miền hướng đối tượng của Java và hệ thống cơ sở dữ liệu.
Giải pháp độc quyền
Hiểu rằng các giải pháp quan hệ đối tượng đã có từ khá lâu, thậm chí có từ trước khi ngôn ngữ Java ra đời. Ví dụ, sản phẩm TopLink của Oracle thực sự bắt đầu với Smalltalk, và sau đó chuyển sang Java. Ngày nay, nó là một phần của các máy chủ OracleAS, WebLogic và OC4J. Trên thực tế, hai API bền bỉ phổ biến nhất từng là Oracle’s TopLink, một tiêu chuẩn độc quyền trong miền thương mại và Hibernate trong miền cộng đồng nguồn mở. Sau đó, Hibernate trở nên phổ biến hơn và ảnh hưởng lớn đến việc tạo ra thư viện JPA tiêu chuẩn.
Trình lập bản đồ dữ liệu
Trình ánh xạ dữ liệu về cơ bản là một mẫu kiến trúc do Martin Fowler đề xuất trong cuốn sách Các mẫu kiến trúc ứng dụng doanh nghiệp , 2003. Nó cung cấp một cách cụ thể để giải quyết vấn đề quan hệ đối tượng. Trình ánh xạ giúp tạo một chiến lược nằm trong danh mục giữa JDBC thuần túy và giải pháp ánh xạ quan hệ đối tượng đầy đủ chức năng. Tại đây, các nhà phát triển ứng dụng tạo một chuỗi SQL thô để ánh xạ các bảng cơ sở dữ liệu tới các đối tượng Java bằng cách sử dụng phương pháp ánh xạ dữ liệu. Có một khuôn khổ phổ biến sử dụng kỹ thuật ánh xạ này giữa cơ sở dữ liệu SQL và đối tượng Java, được gọi là Apache iBatis. Dự án Apache iBatis hiện đã được thông báo là không hoạt động. Tuy nhiên, những người sáng tạo ban đầu của Apache iBatis đã chuyển dự án sang MyBatis và đang được phát triển tích cực.
Không giống như các giải pháp vấn đề quan hệ đối tượng khác bằng cách sử dụng khuôn khổ ánh xạ dữ liệu như MyBatis, chúng ta có thể kiểm soát hoàn toàn các giao dịch SQL với cơ sở dữ liệu. Đây là một giải pháp nhẹ và không tốn chi phí của một khung ORM toàn diện. Tuy nhiên, có một vấn đề với trình lập bản đồ dữ liệu. Bất kỳ thay đổi nào được thực hiện đối với mô hình đối tượng đều có ảnh hưởng đến mô hình dữ liệu. Do đó, người ta phải thực hiện các thay đổi đáng kể đối với các câu lệnh SQL. Bản chất tối giản của khung giúp các nhà phát triển kết hợp các thay đổi và sửa đổi mới tùy theo nhu cầu. Trình ánh xạ dữ liệu đặc biệt hữu ích trong tình huống chúng ta cần một khuôn khổ tối thiểu, xử lý SQL rõ ràng và nhiều quyền kiểm soát hơn đối với việc sửa đổi của nhà phát triển.
JDBC
JDBC (Kết nối cơ sở dữ liệu Java) là phiên bản dành riêng cho Java của đặc tả ODBC (Kết nối cơ sở dữ liệu đối tượng) của Microsoft. ODBC là một tiêu chuẩn để kết nối bất kỳ cơ sở dữ liệu quan hệ nào từ bất kỳ ngôn ngữ hoặc nền tảng nào. JDBC cung cấp tính trừu tượng tương tự đối với ngôn ngữ Java. JDBC sử dụng SQL để tương tác với cơ sở dữ liệu. Các nhà phát triển phải viết các truy vấn DDL hoặc DML theo đặc tả cú pháp của cơ sở dữ liệu phụ trợ, nhưng xử lý chúng bằng mô hình lập trình Java. Có một sự kết hợp chặt chẽ giữa nguồn Java và các câu lệnh SQL. Chúng ta có thể sử dụng các câu lệnh SQL thô và thao tác chúng một cách tĩnh tùy theo nhu cầu. Do tính chất tĩnh của nó, rất khó để kết hợp các thay đổi. Hơn nữa, các phương ngữ SQL khác nhau giữa các nhà cung cấp cơ sở dữ liệu này sang nhà cung cấp cơ sở dữ liệu khác. JDBC được kết nối cứng với cơ sở dữ liệu chứ không phải mô hình đối tượng của ngôn ngữ Java. Do đó, bạn sẽ sớm cảm thấy cồng kềnh khi làm việc, đặc biệt là khi sự tương tác với cơ sở dữ liệu từ mã nguồn Java tăng lên. Tuy nhiên, JDBC là sự hỗ trợ chính cho tính bền vững của cơ sở dữ liệu trong Java và tạo cơ sở cho các khuôn khổ cấp cao.
EJB
Enterprise Java Bean (EJB) với J2EE đã mang lại một số thay đổi mới trong lĩnh vực tồn tại của Java ở dạng thực thể bean. Ý tưởng là để cô lập các nhà phát triển can thiệp trực tiếp vào sự phức tạp của tính bền vững của cơ sở dữ liệu. Nó đã giới thiệu một cách tiếp cận dựa trên giao diện. Có một trình biên dịch bean chuyên dụng để tạo ra việc triển khai cho sự bền bỉ, quản lý giao dịch và ủy quyền logic nghiệp vụ. Các bộ mô tả triển khai XML chuyên dụng được sử dụng để định cấu hình các đậu thực thể. Vấn đề là EJB, thay vì đơn giản hóa mọi thứ, đã kết hợp rất nhiều phức tạp. Kết quả là, mặc dù có nhiều cải tiến sau đó như giới thiệu Ngôn ngữ truy vấn JavaBeans Enterprise (EJB QL), nó đã sớm mất đi tính phổ biến.
Đối tượng dữ liệu Java
JDO (Đối tượng dữ liệu Java) đã cố gắng giải quyết vấn đề mà mô hình bền vững EJB phải đối mặt. Nó cung cấp một API cho sự bền bỉ trong suốt và được thiết kế để hoạt động với EJB và J2EE. JDO là một sản phẩm chịu ảnh hưởng lớn và được hỗ trợ bởi cơ sở dữ liệu hướng đối tượng. Đối tượng Persistence là các đối tượng Java thuần túy không yêu cầu nhà phát triển triển khai bất kỳ lớp hoặc giao diện đặc biệt nào. Thông số kỹ thuật về độ bền đối tượng thường được định nghĩa trong một siêu tệp XML. Các ngôn ngữ truy vấn được hỗ trợ có bản chất là hướng đối tượng. Mặc dù có nhiều tính năng tốt, đặc tả JDO không thể nhận được nhiều sự chấp nhận của cộng đồng nhà phát triển.
Java Persistence API
Có một số khuôn khổ bền vững độc quyền cả trong miền thương mại và miền mã nguồn mở. Các khung công tác như Hibernate và TopLink dường như đáp ứng khá tốt nhu cầu ứng dụng. Do đó, Hibernate đã được chọn làm cơ sở chính để tạo ra một mô hình bền vững tiêu chuẩn được gọi là JPA.
JPA là một khung bền vững Java nhẹ tiêu chuẩn giúp tạo ánh xạ quan hệ đối tượng bằng POJO. JPA cũng giúp tích hợp tính bền bỉ vào một ứng dụng doanh nghiệp có thể mở rộng. Nó rất dễ sử dụng vì chỉ có một số lớp nhỏ cần được tiếp xúc với một ứng dụng quan tâm đến việc sử dụng mô hình bền vững JPA. Việc sử dụng POJO có lẽ là khía cạnh hấp dẫn nhất của JPA. Nó có nghĩa là không có gì đặc biệt về đối tượng; điều đó làm cho nó tồn tại lâu dài. Ánh xạ quan hệ đối tượng là hướng siêu dữ liệu. Nó có thể được thực hiện bằng cách sử dụng chú thích bên trong mã hoặc bên ngoài. bằng cách sử dụng XML.
Các API liên tục của JPA tồn tại như một lớp riêng biệt với đối tượng liên tục. Logic nghiệp vụ thường gọi API và chuyển đối tượng liên tục để vận hành chúng. Mặc dù ứng dụng nhận thức được API liên tục, nhưng đối tượng liên tục, là POJO, hoàn toàn không biết về khả năng liên tục của nó.
Kết luận
Bài viết này đã giới thiệu tổng quan về một số giải pháp độc quyền có sẵn trước khi JPA ra đời, chẳng hạn như data mapper, JDBC và EJB. Ý tưởng là cung cấp một cái nhìn sâu sắc về điều gì đã dẫn đến việc tạo ra JPA và một chút về kỹ thuật bền bỉ của người tiền nhiệm của nó. Giữ nguyên; các bài viết tiếp theo đi sâu vào các khía cạnh cụ thể hơn của JPA API.