Bộ sưu tập

Java 11 phiên bản mới có gì vui ?


Vậy là đến hẹn lại lên, thấm thoắt đã 6 tháng kể từ cái ngày JDK 10 được release, trong tháng 9 vừa qua JDK 11 đã được ra mắt. Việc release JDK 11 vào tháng 9 có lẽ không có gì lạ bởi mọi người đều biết bắt đầu từ JDK 10 các phiên bản Java sẽ được lên kế hoạch để nâng cấp cứ mỗi 6 tháng, tuy nhiên đối với những tín đồ Java thì mỗi lần release là một lần được thỏa khát vọng tìm tòi khám phá. Vậy trong JDK 11 có những gì mới, chúng ta hãy cùng tìm hiểu trong bài viết này nhé.

I. Java 11 là phiên bản hỗ trợ dài hạn (Long Term Support) đầu tiên của Java.

Khái niệm Long Term Support (LTS) có lẽ cũng đã không còn xa lạ với các lập trình viên trên các nền tảng khác ví dụ như NodeJS. Nhưng trong thế giới của Java thì đó mới là khái niệm đáng để quan tâm từ Java 10. Câu chuyện bắt đầu từ Java 10 khi Oracle thay đổi cách để release các phiên bản Java không phải dựa theo các tính năng (feature-based release) nữa mà dựa theo khoảng thời gian (Time-based release). Xin nhắc lại một lần nữa 6 tháng là khoảng thời gian được chọn để một phiên bản Java mới được ra đời và đây là một con số được cố định bất kể các tính năng được cập nhật trong phiên bản mới này nhiều hay ít, to hay bé để được coi là một phiên bản khác với phiên bản trước. Chính vì vậy đôi khi các phiên bản Java mới này đa phần sẽ là các phiên bản “thí nghiệm” với các tính năng chưa được hoàn thiện hay kiểm duyệt chặt chẽ, và chúng ta nên tự hiểu rằng chúng sẽ không nên được sử dụng để triển khai ứng dụng trong môi trường chạy thật (production). Để đáp ứng cho việc triển khai ứng dụng Java lên môi trường thật, chúng ta cần một phiên bản Java thật hoàn chỉnh và đã được kiểm duyệt cẩn thận, và đó chính là các phiên bản Java được hỗ trợ dài hạn (Long Term Support). JDK 11 là một trong số những bản Java như thế và chúng ta có thể tự tin triển khai Java 11 lên trên hệ thống ở môi trường thật của chúng ta với một sự yên tâm về tỉ lệ rủi ro xuất hiện các bug là thấp. Xin nói thêm là chu kì ra đời cho một phiên bản Java Long Term Support sẽ tính theo đơn vị năm.

II. Xóa bỏ hoàn toàn các module liên quan đến Java EE

Hệ quả của việc cơ cấu lại với tinh thần là tinh gọn phần lõi của JDK từ Java 9 đã khiến một số các modules liên quan đến J2EE bị deprecated tại thời điểm đó. Một số các package nằm trong danh sách bị cắt đi này có thể kể đến như java.xml.ws, java.xml.bind, java.activation, java.xml.ws.annotation, java.corba, java.transaction, java.se.ee, jdk.xml.ws, jdk.xml.bind. Tuy nhiên Java 9 (và cho đến Java 10) vẫn hỗ trợ các modules này cho đến khi ra đời Java 11 chính là lúc mà tất cả những gì ta kể ở trên sẽ bị xóa bỏ khỏi lõi của JDK. Để sử dụng các các tính năng mà module này mang lại ta sẽ phải import chúng từ các module bên ngoài khác (nôm na là dùng các file thư viện khác). Một ví dụ cho sự thay thế java.xml.bind trong lõi của JDK chính là việc sử dụng file thư viện như dưới đây


<!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.0</version>
        </dependency>

Để có cái nhìn đầy đủ hơn, các bạn cũng có thể tìm hiểu về sự thay thế cho các module khác ở đây.

III. Cảnh báo để xóa bỏ Nashorn javascript engine

Nashorn Javascript engine là một nền tảng có thể cho phép các đoạn mã Javascript được thực hiện ở trên đó. Ra đời cùng với Java 8 với sứ mệnh là sẽ thay thế java engine cũ hơn Rhino, nhưng có lẽ là do không được cộng đồng đón nhận như mong đợi (cá nhân mình thì nghĩ là do quá lép vế so với các nền tảng Javascript nổi tiếng như NodeJS) nên Nashorn javascript engine sẽ bị deprecated trong phiên bản Java 11 và trong được lại sẽ bị xóa hoàn toàn khỏi các phiên bản Java sau này.

IV. Http Client Module

Http Client Module là một module mới được hoàn thiện trong Java 11 nằm trong package java.net.http, nó được ra mắt với mục tiêu sẽ thay thế cho các API truyền thống là java.net.HttpURLConnection được sử dụng để giao tiếp với Http Server. Điểm đặc sắc còn ở chỗ module mới này cung cấp các API để ta có thể lập trình theo phong các Reactive qua việc sử dụng Flow API (có từ Java 9) để tạo các Http Request dựa trên giao thức HTTP2.

V. Thực thi code từ file mã nguồn Java

Các bạn có thể xem video trực tiếp trên Youtube tại đây.

VI. Sử dụng từ khóa var như kiểu của các tham số trong các biểu thức lambda

Các bạn có thể xem video trực tiếp trên Youtube tại đây.

VII. Giải quyết các vấn đề về truy cập các thành phần con (nested) qua Reflection API

Các bạn có thể xem video trực tiếp trên Youtube tại đây.

VIII. Java 11 phiên bản của Oracle sẽ không phải là bản miễn phí

Java dưới tay của Oracle kể từ khi mua lại của Sun Microsystem đã được cải thiện và nâng cấp nhiều, tuy nhiên theo cảm nhận của bản thân thì nó không còn được mở như trước (đấy là ý kiến cá nhân của mình thôi nha). Biểu hiện cụ thể là qua các vụ kiện tụng với Google về bản quyền sử dụng các Java SDK trên hệ điều hành Android mà kể từ đó Google chuyển hướng sang hỗ trợ nhiều hơn cho ngôn ngữ lập trình Kotlin trên hệ điều hành của họ. Và bây giờ là việc Java 11 phiên bản Oracle sẽ yêu cầu người dùng phải trả phí khi nó được sử dụng vào trong các hệ thống chạy thật với bất kì mục đích thương mại nào. Còn lại tất nhiên khi chúng ta học hành, nghiên cứu, hay làm các mô hình ứng dụng mẫu để demo thì không cần quan tâm đến vấn đề này. Mặc dù nói vậy nhưng tại thời điểm này Oracle vẫn là đơn vị chính đóng góp cho cộng động phiên bản Java miễn phí là Open JDK. Mình từ trước đến giờ vẫn luôn yêu thích và sử dụng Oracle Java JDK, nhưng có lẽ từ bây giờ mình sẽ chuyển sang để sử dụng phiên bản Open JDK miễn phí này, và cảm thấy nó đúng với tính “mở” mà mình vẫn hình dung ra mỗi khi nghe thấy ai đó nhắc đến từ “Java”.

Good luck!

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s