Jar, czy War?

Belka
  • Rejestracja:prawie 8 lat
  • Ostatnio:2 dni
  • Lokalizacja:PL
  • Postów:452
0

Hej,
mam pewne pytanie odnośnie postawienia aplikacji na serwerze. Otóż przerabiałem pewną wewnętrzną aplikację w firmie. Wcześniej była pakowana jako WAR i stawiana na serwerze na Tomcacie. Przy pracy z ta apką postanowiłem zmienić sposób jej pakowania na JAR z wbudowanym Tomcatem w spring boota. Wydaje mi się, że jar - zwłaszcza biorąc pod uwagę wielkośc apki (jest nieduża) - jest zgrabniejszym rozwiązaniem, jednak usłyszałem sprzeczne opinie.

Teraz pytanie ode mnie - jaki sposób deploymentu aplikacji na serwerze wybiera się aktualnie najczęściej? Czy korzysta się z pakowania jar, czy war? Jeśli JAR, to jak później uruchomić tą aplikację na serwerze? Ma ona działać na Win Server 2016 i czytałem gdzieniegdzie, że jary najlepiej uruchamiać jako usługi Windows. Czy to prawda?

Z góry dzięki za wszystkie odpowiedzi ;)

OtoKamil
Czy te sprzeczne opinie zawierały jakieś argumenty? Jakie?
Belka
Właśnie niekoniecznie. Że łatwiej będzie się to deployować na zewnętrznym tomcacie, tak jak to robili do tej pory.
TerazOdpowiemNaKomcie
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 3 godziny
  • Postów:384
2

make jar not war

AK
To jest tylko hasło, owszem słuszne w niektórych okolicznościach , ale tylko w pewnym kontekście
Belka
  • Rejestracja:prawie 8 lat
  • Ostatnio:2 dni
  • Lokalizacja:PL
  • Postów:452
0

Okej, zatem skoro potwierdziło się, że jar będzie lepszą opcją to dajcie jakieś wskazówki jaka jest najwygodniejsza forma deploymentu jarów. Jako Windows service?
Uruchamianie z konsoli odpada, bo apka ma scheduler i musi działać 24 godziny na dobę, a dostęp do serwera mam tylko poprzez pulpit zdalny (jest on postawiony z tego co pamiętam na jakimś vmware).

AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
0
Belka napisał(a):

Okej, zatem skoro potwierdziło się, że jar będzie lepszą opcją to dajcie jakieś wskazówki jaka jest najwygodniejsza forma deploymentu jarów. Jako Windows service?
Uruchamianie z konsoli odpada, bo apka ma scheduler i musi działać 24 godziny na dobę, a dostęp do serwera mam tylko poprzez pulpit zdalny (jest on postawiony z tego co pamiętam na jakimś vmware).

Moim zdaniem klasyczny sposób (Tomcat jako windows service) i WAR jest sprawdzony.
Filozofia fat jar lepiej się wpisuje w cloud, Docker, te sprawy, szybkie poodnoszenie w jednym kroku gdy moc obliczeniowa jest potrzebna, oraz w stanowisko developerskie/testowe

I na odwrót, sam goły fat jar jest bardzo daleki od bycia usługą. Musiałby dostać jakiś wrapper w C/C++
Usługa charakteryzuje się tym, że jest zarejestrowana (nawet jeśli jest nieaktywna). Jak zarejestrować JAR, potencjalnie zmienny???


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek
KE
Że co C++? Jary z spring boota odpala się pod Linuksami normalnie, java -jar nazwapliku.jar, żadne wrappery nie są potrzebne. Co jest potrzebne, to jakiś menedżer procesów, który odpali powyższe, najczęściej systemd jeśli natywnie, tudzież Docker/k8s itp. Stawiam że na Win jest coś podobnego
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
6
AnyKtokolwiek napisał(a):

Moim zdaniem klasyczny sposób (Tomcat jako windows service) i WAR jest sprawdzony.

Zgadzam się, że jest to sposób sprawdzony i działa w setkach tysięcy miejsc. Wszędzie tak samo źle.
Jest to rozwiązanie niebezpieczne i niefektywne.

NIebezpieczne, bo istotne konfiguracje (wersja tromcata, xmle, dodatkowe jary) mogą być łatwo/niechcący ręcznie zmieniane.
Z tego wychodzą fajne numery jak wersja tomcata na produkcji jest inna niż u developerów i jeszcze inna niż na testach (ostatnio widziałem taki problem).
Nieefektywne, ze względu na:

  • najgorsze : okazyjne walki z classpathem i konfliktami jarów, (raz na ruski rok, ale boli)
  • wolniejszy start zwykle,
  • dodatkową zabawę w konfiguracje (xml itp),

Przy okazji embedded tomcat (w jar) tylko troche poprawia sytuację.
(fajniejsze rozwiazania to generalnie te, które nie bazują na servletach - ale jeśli sprawa dotyczy starej aplikacji to nie ma co się szarpać).

Co do "jar jako serwis" - google pokazuje wiele rozwiązań jar service wrapper widziałem kilka w użyciu, może nawet jakiś konfigurowałem, ale niestety to nie moja działka (serwery na windows).


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 4x, ostatnio: jarekr000000
discoStar
@jarekr000000: jakie nie bazują na servletach?
jarekr000000
Webflux, netty. Ratpack, micronaut... pełno tego.
discoStar
Dzięki, doczytam :)
wiciu
  • Rejestracja:ponad 11 lat
  • Ostatnio:8 dni
  • Postów:1205
0

Nie znam się na Windowsie (dlatego się wypowiem :D), ale jeżeli Docker działa na Windowsie, to mógłbyś spróbować uruchomić apkę w kontenerze dockerowym w tle (z parametrem -d -> detached mode). Na unixach powinno to działać podobnie jak parę innych opcji odpalania aplikacji jako proces w tle (np. service/screen/tmux/nohup/itd.). Nie uruchamiałem czegoś takiego produkcyjnie, więc trudno mi coś napisać o stabilności takiego podejścia. Jeżeli takie rozwiązanie nie wchodzi w grę, to chyba rzeczywiście musisz poszukać jakichś rozwiązań uniwersalnych dla wszystkich platform albo konkretnie Windows-specific.

Belka
  • Rejestracja:prawie 8 lat
  • Ostatnio:2 dni
  • Lokalizacja:PL
  • Postów:452
0

Z tego co sprawdzałem dzisiaj, to mógłbym odpalić cmd, czy tam PowerShella i uruchomić jara standardową komendą jar, ale wtedy zachodzi obawa, że ktoś kto połączy się z serwerem "w innej sprawie" zamknie z jakiegoś powodu konsolę i apka padnie. Postanowiłem nie ryzykować w taki sposób, zwłaszcza że główną funkcjonalnością aplikacji jest scheduler odpalający się o wczesnych godzinach. Finalnie zatem chyba spakuję to w war.

wiciu
Może spróbuj poszukać odpowiedników unixowych rozwiązań typu screen, tmux, service lub coś podobnego dla PowerShella. W takim podejściu możesz odpalić apkę w osobnej sesji, wyjść z tej sesji (apka dalej będzie chodzić w tle) i zamknąć terminal. Wtedy, jeśli ktoś połączy się z serwerem, będzie musiał explicite wejść do tej sesji, aby ubić Twoją apkę.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.