Hotswap i alternatywy?

15

Od wczesnych lat mojego życia w college'u korzystam z Javy, a największym problemem, który mamy, jest absolutnie mniej produktywna niż w przypadku innych języków tłumaczonych. Wszyscy są pewni, że Java jest jednym z najlepiej skompilowanych języków.

Jednak ani Sun, ani Oracle nie włożyły wystarczających starań, aby rozwiązać ten problem. Jednym z problemów jest oczywiście przeładowywanie klas.

Ostatnie próby ze społeczności do rozwiązania tego problemu jest projekt DaVinci Hotswap , JRebel , PlayFramework . Jednak w chwili pisania tego tekstu nie byli jeszcze dojrzali (imo) i nie byli rodowitymi ludźmi. Niektóre z nich nie są przygotowane dla przedsiębiorstw, niektóre nie są kompatybilne ze wszystkimi IDE, niektóre z nich są niedojrzałymi projektami universtiy. Mapa drogowa, a nawet Java dla programistów, jest gotowa, ale społeczność Java nadal nie ma rozwiązania dla przeładowywania klas w locie.

Czy Oracle tak trudno jest podjąć wysiłek, aby rozwiązać ten problem? Dlaczego przeładowywanie klas nie zostało jeszcze zaimplementowane natywnie?

Ozgur
źródło
2
W rzeczywistości JRebel jest całkowicie gotowy do pracy w przedsiębiorstwie i ma całkiem dobrą obsługę IDE, choć nie jest darmowy.
CarlosZ
@CarlosZ Naprawdę? Używałem IntelliJ IDEA z JRebel od pierwszej wersji beta do serii 3.x. Zamiast „tego” musisz użyć „tego”. Na forum dla każdego wydania zobaczysz wiele problemów dotyczących wtyczki intelliJ. Ale najgorszym doświadczeniem były problemy z debugowaniem. Debuger może połączyć się bardzo późno. Mieliśmy ogromne problemy. Jako użytkownik IntellJ mam konkretne doświadczenie dotyczące JRebel w IDEA. I oczywiście płacenie pieniędzy to także inna sprawa.
@CarlosZ To naprawdę pytanie, ciekawi mnie, dlaczego trudno jest zaimplementować przeładowanie klasy w języku java.

Odpowiedzi:

4

Co z JEE / J2EE? Został wydany po raz pierwszy 12 lat temu. Jest to obsługiwane bezpośrednio przez Sun / Oracle i wielu innych dostawców.

A co z OSGi? Pierwsze wydanie miało miejsce prawie 11 lat temu. Zbudowano na nim Eclipse (IDE), Glassfish od Sun / Oracle i Apache Felix intensywnie go używają. Możesz go używać z Spring-OSGi.

Nie był obsługiwany natywnie w Java SE, ponieważ aplikacje korporacyjne były celowo obsługiwane przez serwery aplikacji jako osobne produkty.

Peter Lawrey
źródło
@Peter Lawrey 1) Lawrey Jeśli chodzi o J2EE, czy istnieje konkretne rozwiązanie? Nie widziałem twojego punktu? 2) Czy uważasz, że aby przeładować klasę, należy użyć OSGI? Co z Jigsaw? Nawet na poziomie JCR nadal nie ma konsensusu :). OSGI zajmuje się zupełnie innym obszarem niż przeładowywanie klas. 3) Nie mogłem zrozumieć części JavaSE, czy mógłbyś wyjaśnić coś więcej? Pamiętaj, że projekt DaVinci HotSwap jest sponsorowany przez Oracle. Oznacza to, że przynajmniej dla mnie są chętni na takie rozwiązanie.
To zależy od tego, czego oczekujesz od hot swap. Jeśli chcesz hot swap do debugowania, możesz to zrobić od jakiegoś czasu. Jednak w przypadku solidnych rozwiązań dla przedsiębiorstw tego rodzaju wymiana typu hot-swap nie jest właściwa i są to tylko kontrolowane wersje. W tym przypadku JEE i OSGi umożliwiają aktualizację działających aplikacji, które mają te same zalety, ale z kontrolą, jakiej można oczekiwać od środowiska produkcyjnego. Na przykład w moim kontenerze OSGi mogę usunąć klasy i zastąpić je nowszymi wersjami bez zatrzymywania aplikacji. Czego potrzebujesz, którego OSGi nie robi?
Peter Lawrey
1) Rozpoczęcie implementacji JEE / J2EE może być dobrym początkiem, ale istnieje wiele bardziej popularnych, łatwiejszych w użyciu JEE. Chodzi mi o to, że możesz zastąpić kod w działającym systemie. Czego więcej potrzebujesz w środowisku produkcyjnym / kontrolowanym.
Peter Lawrey
1
2) Przeładowywanie klas to jedyne rzeczy, do których używam OSGi. Co uważasz za główne zastosowanie OSGi?
Peter Lawrey
3) Sedno JEE polega na tym, że jest to przestrzeń do obsługi aplikacji korporacyjnych. JSE jest platformą bazową, której można używać do JEE lub innych aplikacji.
Peter Lawrey
2

Spróbuj tego: http://www.zeroturnaround.com/blog/reloading_java_classes_401_hotswap_jrebel/

W grę wchodzi wiele złożonych problemów. W rzeczywistości nie znam żadnych rozwiązań (dla Javy lub nie), które wprowadzają zmiany strukturalne w stanowych jednostkach. Dynamiczne języki, takie jak Ruby czy PHP, tak naprawdę tego nie robią, nie jestem pewien co do Erlanga, ale myślę, że również straci swój stan.

Jevgeni Kabanov
źródło