Po wielu latach trudów i odkładania projektu na później wreszcie nadchodzi – modułowa Java 9. W projekcie „Układanka” (Jigsaw) wyłożone zostały założenia modułowości. Pomysły były zbierane przez lata i często odkładane „na później” z różnych powodów. W końcu jednak, wraz z wydaniem Javy 9, doczekamy się obiecywanych od dawna javovych klocków.
Platforma Java SE od początku jest monolityczną bryłą i nawet jeśli aplikacja wymagała tylko jej części, należało ściągnąć całość. To jednak ma się zmienić. Dzięki zmianom w kolejnej wersji Javy, aby uruchomić aplikacje na komputerze klienckim, nie trzeba będzie ściągać całego ciężkiego środowiska. Szczególnie na urządzeniach z małą ilością pamięci sprawia to problemy, ale potężne chmury obliczeniowe także klękały pod jej ciężarem.
źródło: youtube,JVMLS 2015 - Nashorn for Java 9
„Układanka” to zbiór klas, bibliotek i różnych innych zasobów, wraz z metadanymi. Można o nich myśleć jak o pudełku z klockami LEGO, które będzie można dokładać do swojego projektu w miarę potrzeby. Wstępem do jej wprowadzenia były profile kompaktowe (compact profiles) w Javie 8, ale właściwe klocki będą dużo drobniejsze. Co więcej, prawdopodobnie będą zgodne z innymi podobnymi architekturami, jak specyfikacja opracowana przez OSGi Alliance.
Wraz z rozłożeniem Javy na części znikną pliki RT.JAR (Runtime JAR), które dla wielu są niewyczerpanym źródłem bólu. Zastąpią je profile kompaktowe (compact profiles), obecne już w Javie 8, projektowane przede wszystkim z myślą o urządzeniach wbudowanych. Dzięki temu maszyna wirtualna nie będzie tak się „rozpychać”. Pliki JAR jednak zostaną z nami do końca świata i o jeden dzień dłużej.
Modułowość poprawić ma również bezpieczeństwo aplikacji, co bez wątpienia Javie bardzo się przyda. Java 9 wprowadzi wyraźne granice między komponentami i jasno określi, co musi zostać wewnątrz modułu, a co może być widoczne na zewnątrz. Powinno to zredukować możliwości ataków przez odnoszenie się do metod, które poszerzą uprawnienia aplikacji lub jej dostęp do danych. Linkowaniem modułów zajmie się nowy linker, nazwany jlink.
Java 9 niestety mocno się spóźnia. Po wielu latach prac, Oracle ogłosił, że 22 września 2016 zostanie wydana nowa Java 9. Jest ona bardzo długotrwałym i żmudnym projektem, który rozpoczął się niemal od czasu gdy Oracle przejął firmę Sun Microsystems. Po tym zdarzeniu firma musiała skompletować od początku zespół, który rozpoczął proces zmian oraz modularyzacji języka. Pojawiły się nowe wersje Javy, w szczególności Java 8, oraz dużo poprawek błędów w trakcie trwania tego procesu.
Na początku maja szef architektów Java Platfom Mark Reinhold upublicznił harmonogram prac nad Java 9:
2015-12-10: Feature Complete 2016-02-04: All Tests Run 2016-02-25: Rampdown Start 2016-04-21: Zero Bug Bounce 2016-06-16: Rampdown Phase 2 2016-07-21: Final Release Candidate 2016-09-22: General Availability
Jak widać, Reinhold daje Oracle dużo czasu pomiędzy etapami na ewentualne poprawki błędów. Największą zmianą w Javie 9 jest przejście do modułowości. Tak zwana “układanka” to zbiór klas, bibliotek i różnych innych danych wraz z metadanymi. Pierwszym moim skojarzeniem były pudełka z klockami, która można dokładać do projektu kawałkami w miarę potrzeby. Już widzieliśmy wstęp do wprowadzenia modułowości w Javie 8, a mianowicie były to profile kompaktowe. Ale te klocki zawarte w Javie 9 będą dużo mniejsze. Założeniem projektu jest usunięcie problematycznych plików RT i JAR, a zastąpienie ich przez profile kompaktowe (compact profiles).
Modułowość również poprawi bezpieczeństwo aplikacji, co jest bardzo potrzebne. Java 9 wprowadzi wyraźne różnice pomiędzy komponentami i jasno określi, co musi pozostać wewnątrz modułu, a co może się znaleźć na zewnątrz. Dzięki temu możliwość ataków poprzez odnoszenie się do metod, które poszerzą uprawnienia aplikacji lub jej dostęp do danych, pozostanie mocno zmniejszona. Nowy linker, który zajmie się linkowaniem modułu został nazwany jlink.
Pozostaje nam czekać cierpliwie na premierę długo wyczekiwanej przez entuzjastów języka Java nowej 9-tki.