Po co nam Java? Czyli o tym, co znaczy słowo enterprise, o JVM i o muCommanderze

Posted by wiktor on Oct 5, 2007 in java

“Po co nam ta Java?”, “Ale po co ją stosować, jak w Ruby on Rails mogę to samo zrobić szybciej (czytaj: być bardziej wydajnym)?” – takie pytania koledzy stawiają mi coraz częściej. Odpowiadanie na nie nie jest zadaniem prostym. Przekonanie osoby negatywnie nastawionej, że Java może spokojnie, nie wadząc nikomu żyć w informatycznym ekosystemie – baaaa – nawet uzupełniać go, graniczy z cudem.

Oczywiście nie jestem w stanie dać pełnej odpowiedzi na pytanie “Po co nam Java?”. Nawet do tego nie pretenduję. Poruszę tylko trzy zagadnienia, które będą świadczyć, że jednak po coś nam ta Java jest potrzebna:

  • zastosowania typu enterprise,
  • przenośność platformy Javy (ang. cross-platform), o której się często zapomina (na przykładzie muCommandera),
  • maszyna wirtualna Javy, czyli JVM.

Enterprise

Zacznijmy od magicznego słowa enterprise, z którym jest najwięcej problemu. Problemem jest zdefiniowanie, co oznacza aplikacja typu enterprise. Mało kto potrafi w ogóle powiedzieć, co to jest. Mówi się, że są to duże aplikacje, poważne, dla banków lub EAI itd. “No dobra, ale nadal co to znaczy? Przecież w Ruby on Rails też można takie aplikacje tworzyć.” – dostaniemy od razu odpowiedź. Zacznę więc od zdefiniowania terminu aplikacji enterprise (a tak na prawdę systemu rozproszonego), który po raz pierwszy na zajęciach na MIMUW-ie przedstawił mi Jacek Sroka. Otóż problemy, z jakimi się takiego typu aplikacje zmagają to:

  • zdalne wywoływanie metod (ang. Remote Method Invocation),
  • wielowątkowość (ang. Threading),
  • współpraca z bazami danych i systemami spadkowymi (ang. Back-end integration),
  • transakcje,
  • równoważenie obciążenia (ang. Load balancing),
  • płynne przejmowanie zadań od komponentów, które uległy awarii (ang. Transparent failover),
  • czy stan serwera, który uległ awarii jest replikowany na inne serwery (ang. Clustering),
  • uaktualnienia działającego systemu (ang. Dynamic redeployment),
  • prowadzenie dziennika i audyt (ang. Logging and auditing),
  • monitorowanie i administrowanie działającym systemem (ang. System management),
  • luźne sprzężenie przy pomocy komunikatów (ang. Message-oriented middleware),
  • tworzenie/niszczenie komponentów w zależności od obciążenia (ang. Component life cycle),
  • pule zasobów (ang. Resource pooling),
  • kontrola bezpieczeństwa na poziomie operacji (ang. Security),
  • pamięć podręczna (and. Caching),

(Wszystkie powyższe punkty pochodzą z notatek z wykładu Jacka Sroki)

Tym wszystkim zajmują się aplikacje typu enterprise. Czasem w sieci można znaleźć różne artykuły, o tym, że największe serwisy światowe nie są napisane w Javie. Wszystko to jednak statystyka i umiejętne posługiwanie się odpowiednimi przykładami. Pozostaje mi tylko powiedzieć, że nie jest to prawda. Java stoi za takimi serwisami jak Gmail, eBay, Google AdWords, FeedBurner, część Amazon, a z naszego polskiego podwórka to chociażby gazeta.pl, merlin.pl.

Przenośność platformy Javy

Nie zapominajmy o sztandarowym sloganie “Write once, run anywhere”, czyli program napisany w Javie będzie działał tak samo w różnych systemach operacyjnych (MacOS, Linux, Solaris, Windows). Ostatnio o tym sobie przypomniałem, kiedy szukałem menadżera plików dla MacOS podobnego do Total Commander (Windows) i Midnight Commander (konsola *nixowa). Wpadłem na program muCommander, czyli to czego szukałem i jeszcze napisany w Javie. Zobacz screenshot poniżej:

muCommander screenshot

To jest właśnie cudowny przykład zastosowania Javy. Program działa tak samo na wszystkich platformach, a do tego obsługuje FTP, SFTP, SMB, NFS, standardowo obsługuje pliki ZIP, TAR, GZip, ISO/NRG. Jest super i jest całkowicie darmowy ;) .

Poza tym dobrych aplikacji desktopowych napisanych w Javie jest więcej. Azureus. JAlbum. LimeWire. BlogBridge. O J2ME nie będę wspominał. Macie jeszcze jakieś dobre przykłady?

Maszyna wirtualna Javy, czyli JVM

Bodajże najważniejszym elementem platformy Java jest maszyna wirtualna, czyli JVM (ang. Java Virtual Machine). Pomimo swojej nazwy JVM nie jest w ogóle związana z językiem Java. Jest jedną z najbardziej zaawansowanych maszyn wirtualnych (obok CLR), a technologia HotSpot obala mit powolności całej platformy, który to strasznie i niesprawiedliwie za Javą się ciągnię. Koncepcja maszyny wirtualnej pewnie już nas nigdy nie opuści w przeciwieństwie do języka. Widać już pierwsze jaskółki:

  • Sun otwarcie wspiera projekt JRuby (zatrudnienie dwóch czołowych programistów w 2006 r., praca nad bardzo dobrą wtyczką do Ruby’iego i Ruby on Rails dla NetBeans, wdrażanie aplikacji RoR na Glassfishu),
  • pojawia się coraz więcej języków dynamicznych na JVM (Groovy, Jython),
  • JVM zostanie wzbogacony o instrukcję invokedynamic w Javie 7 (JSR 292), która dramatycznie przyspieszy języki dynamiczne na JVM,
  • powstają także setki innych języków na JVM, a najciekawszym z nich wydaje się Scala.

Widać, że nie ma co bez sensu kruszyć kopii między Ruby on Rails a Javą i tylko czerpać z obydwu rzeczy to, co najlepsze. Trzeba po prostu wybierać najlepsze narzędzia do wykonania pracy.

A Wam? Po co jest Java?

6 Comments


[...] Po co nam Java? Czyli o tym, co znaczy słowo enterprise, o JVM i o muCommanderzeblog.mocna-kawa.com/2007/10/05/po-co-nam-java-czyli-o-tym-co… dodane przez wwiktorr od paru sekund [...]


 
Leszek
Oct 5, 2007 at 12:09 pm

Cóż. Java ma to do siebie, że w wielu miejscach jej nie widać, tak jak ma to miejsce choćby w serwisach bankowych. Java nie upada i nie upadnie. Ona co najwyżej rozwinie się w wiele potomnych języków, do różnych zastosowań i tylko z tego powodu może kiedyś sama Java, jako język) zostanie zapomniana.


 
Peszek
Nov 17, 2009 at 11:09 am

A więc po przeczytaniu, stwierdziłem nieoczekiwanie … Po co nam Java?


 
Marek
Feb 1, 2010 at 11:28 am

Zobaczmy jak sobie railsy radzą, po tym czasie z Enterprise:

# zdalne wywoływanie metod (ang. Remote Method Invocation),
RMI i EJB (które wykorzystuje RMI), zostało zastąpione WebService’ami i mało kto używa teraz tego inaczej

# wielowątkowość (ang. Threading),
kulała, kuleje, ale już nie długo. Ale po co wątki w enterprise? Wątkowanie się na poziomie serwera raczej używa, nie na poziomie aplikacji.

# współpraca z bazami danych i systemami spadkowymi (ang. Back-end integration),
Było, jest i będzie

# transakcje,
w domyśle rozproszone, na razie brak :(

# równoważenie obciążenia (ang. Load balancing),
To znowu nie zależy od technologi a od konfiguracji serwerów, było jest i będzie dla php, rails, javy i czego kto sobie zażyczy

# płynne przejmowanie zadań od komponentów, które uległy awarii (ang. Transparent failover),
W rails na poziomie konfiguracji serwerów (ale w Javie wspomagane przez serwer aplikacyjny), przy architekturze rails zasadzie nie potrzebne.

# czy stan serwera, który uległ awarii jest replikowany na inne serwery (ang. Clustering),
servery bez stanowe, nie dotyczy :)

# uaktualnienia działającego systemu (ang. Dynamic redeployment),
Przyszło do railsów niedawno wraz z Serverem Unicorn

# prowadzenie dziennika i audyt (ang. Logging and auditing),
Trzeba używać zewnętrznego oprogramowanie (np New Relic RPM, hoptoad, etc)

# monitorowanie i administrowanie działającym systemem (ang. System management),
Zewnętrzne narzędzia again

# luźne sprzężenie przy pomocy komunikatów (ang. Message-oriented middleware),
Można używać np RabitMQ

# tworzenie/niszczenie komponentów w zależności od obciążenia (ang. Component life cycle),
Niestety, nie ma i nie widać kompnentów, ale znowu, czy nie od tego jest architektura Webservice’ów aby zapomnieć o komponentach?

# pule zasobów (ang. Resource pooling),

# kontrola bezpieczeństwa na poziomie operacji (ang. Security),
nie ma i raczej nie będzie

# pamięć podręczna (and. Caching),
jest

W sumie:
trochę wcześnie, żeby Banki atakować, ale jak ktoś by się uparł to by się dało :)


 
ppz
Jun 30, 2010 at 12:34 am

jeśli azureus jest przykładem fajnego softu który stoi na javie to ja nie chcę mieć do czynienia z resztą tego co wymieniłeś. w życiu nie widziałem bardziej mulącego programu.


 
admin
Jun 30, 2010 at 11:39 am

@ppz
Od czasu napisania tego posta, zmieniłem swoje zapatrywanie na uniwersalne aplikacje. Po przejściu na Maka, stwierdziłem, że aplikacje natywne są duuuuużo lepsze od nie-natywnych.


 

Reply

Copyright © 2010 Mocna Kawa All rights reserved. Theme by Laptop Geek.