Archive for category JBoss AS

Czym jest JBoss Application Server (krótka charakterystyka)?

Historia serwera JBoss AS

Prace nad JBossem rozpoczął Marc Fleury w 1996 roku jako produkt z otwartymi źródłami, od początku będącym implementacją standardu J2EE. JBoss od początku był wydawany jako produkt objęty licencją LGPL. Początkowo produkt nosił nazwę EJBoss (Enterprise Java Beans Open Source Sofware), jednakże po sprzeciwie firmy Sun (która posiada prawa do używania nazwy EJB) porzucono początkowe E i utworzono nazwę JBoss.

W 2001 roku Fleury został współzałożycielem firmy JBoss Group LCC, która oferowała komercyjne wsparcie dla serwera aplikacji. W 2002 roku została opublikowana wersja 3 serwera, która wpierała w pełni specyfikację J2EE oraz była pierwsza wersją, która zaczęła konkurować z innymi własnościowymi serwerami aplikacyjnymi, takimi jak WebSpere czy WebLogic.

W 2004 roku spółka JBoss Group LCC została przekształcona w firmę JBoss Inc. Jednocześnie opublikowano wersję 4 tego serwera aplikacji, który uzyskał dużą popularność. Wsparcie oferowane przez JBoss Inc przestało się ograniczać tylko do serwera aplikacji, zostało także rozszerzone o szereg komponentów, które zostały stworzone na potrzeby prac nad serwerem aplikacyjnym, takimi jak: Hibernate, jBMP, JBoss Cache czy też JBoss Rules.

JBoss Inc została w 2006 roku wykupiona przez firmę Red Hat Inc. Opublikowano także nową wersję serwera JBoss AS 5.

Czym jest JBoss AS

JBoss Application Server 5 jest serwerem aplikacji, napisanym w 100% w języku programowania Java, zgodnym ze specyfikacją J2EE 5. Jest on zbudowany na podstawie technologii JBoss Microcontainer, która jest lekkim kontenerem, wspierającym bezpośrednią instalację aplikacji, konfigurację oraz zarządzanie cyklem życia obiektów POJO (Plain Old Java Objects). JBoss Microcontainer jest samodzielnym projektem, który zastąpił wcześniejsze jądro serwera JBoss JMX Microkernel, używane w wersjach 3 oraz 4. Podstawowe cele projektu:

  • jądro JBoss Microcontainer powinienno być samodzielnym projektem
  • usługi dostępne w JBoss AS powinny łatwo dać się używać w innych serwerach aplikacji
  • użycie obiektów POJO
  • dostarczenie środowiska do zarządzania obiektami POJO, wsparcie dla zależności oraz klastrowania

Serwer JBoss AS został zaprojektowany wokół koncepcji Virtual Deployment Framework (VDF).

To co obejmuje pojęcie JBoss AS bardzo dobrze oddaje następujący obrazek (Źródło: Administration And Configuration Guide):

JBoss Application Server 5 architecture

JBoss Application Server 5 architecture

Na grafice widać, jaki szereg różnych technologii wchodzi w skład serwera aplikacji. Duża część z nich została rozwinięta na jego potrzeby, ale istnieją także jako samodzielne biblioteki do wykorzystania w innych aplikacjach.

  • W serwerze aplikacji jest zawarta implementacja specyfikacji EJB3.0, która pozwala na duże uproszczenie procesu tworzenia, ułatwienia testowania aplikacji.
  • JBoss Messaging jest szkieletem dla megastruktury JBoss ESB, oraz domyślną implementacja JMS.
  • JBoss Cache 2.0 jest dostarczane w dwóch wersjach. Jedna to tradycyna pamięć cache korzystająca ze struktur drzewiastych oraz PojoCache, czyli pamięć cache oparta na obiektach POJO. Wspiera transakcje oraz replikację między systemami i pozwala na przezroczyste dla użytkownika wykorzystanie obiektów POJO zarówno w replikacji danych jak i ich utrwalaniu.
  • JBoss WS 2 jest to zestaw usług implementujących usługi webowe JAXES 2.0.
  • JBoss Transaction jest domyślnym zarządcą transakcji w JBoss AS 5.
  • JBoss Web jest kontenerem webowym w JBoss AS 5, jest on implementacja bazująca na aplikacji Apache Tomcat.

Tags: , ,

Instalacja aplikacji na żądanie w serwerze aplikacji JBoss 6

W wersji 6.0.0M2 serwera aplikacji JBoss pojawiła się nowa funkcja: ładowanie aplikacji serwera na żądanie, czyli dopiero wtedy, gdy przyjdzie zapytanie HTTP o adres, który jest obsługiwany przez daną aplikację.

Powód wprowadzenie tej funkcji jest prozaiczny: ma przyspieszyć czas startu serwera aplikacji. W trakcie tworzenia aplikacji często zachodzi potrzeba restartów serwera aplikacji i wtedy każda dodatkowa sekunda, która poświęca się na czekanie aż wszystkie aplikacje zostaną zainstalowane trwa wieczność :).

Aby włączyć tę funkcję, należy wywołać polecenie run.sh z dodatkowym parametrem:

./run.sh -Djboss.as.deployment.ondemand=true

W środowisku produkcyjnym nie jest zalecane włączanie tej opcji, tam należy preferować uruchamianie wszystkich aplikacji od razu podczas startu serwera aplikacji.

Informacje tu przedstawione dotyczą wersji JBossa 6.0.0M2, więc dalekiej od stabilności. W związku z tym mogą się zmienić.

Źródła

Tags:

Optymalizacja parametrów JVM dla JBoss AS

W celu przyspieszenia zarówno startu jak i działania serwera aplikacji JBoss można trochę zmodyfikować działanie JVM dodając parametry włączające dodatkowe optymalizacje.

Dwa podstawowe parametry to oczywiście zarządzanie pamięcią:

  • -Xms1024m
    Ustawienie początkowego rozmiaru sterty dla JVM (zalecana ta sama wartość co przy -Xmx).
  • -Xmx1024m
    Ustawienie maksymalnego rozmiaru sterty dla JVM.
  • -XX:MaxPermSize=256
    Ustawienie rozmiaru dla przestrzeni z definicjami klas, istotne w przypadku wystąpienie wyjątku OutOfMemoryError: PermGen space.
  • -XX:+UseLargePages
    Rezerwacja dużych strona pamięci, większych niż standardowe 4kB. Może wpływać negatywnie na wydajność innych aplikacji. Uboczną właściwością użycia dużych stron pamięci w Linuksie jest brak ich możliwości zapisania w pamięci swap (co niekoniecznie musi oznaczać coś złego). Aby używać tego parametru, wcześniej należy skonfigurować odpowiednio system operacyjny, dokumentacja znajduje się pod tym dokumencie: Java Support for Large Memory Pages.
  • -XX:+AggressiveOpts
    Włączenie dodatkowych optymalizacji JVM, które mają zostać włączone dopiero w przyszłych wersji Javy.
  • -XX:+DoEscapeAnalysis
    Po włączeniu tej opcji JVM będzie starał się sprawdzić, czy dany obiekt występuje tylko i wyłączenie w lokalnym zasięgu działania metody. Jeżeli tak, to będzie próbował alokować go bezpośrednio w na stosie bądź też w rejestrach. Dokładny opis można znaleźć w artykułach:

Przykładowa zawartość pliku run.conf:

1
2
3
4
5
6
if [ "x$JAVA_OPTS" = "x" ]; then
 JAVA_OPTS="-Xms128m -Xmx512m -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
fi

# optymalizacja
JAVA_OPTS="${JAVA_OPTS} -XX:+UseLargePages -XX:+AggressiveOpts -XX:+DoEscapeAnalysis"

Tags: , ,