2010-01-21 26 views
12

Jestem nowy w Jboss, ale mam wiele aplikacji internetowych, każdy z wykorzystaniem hibernacji wiosennej i innych bibliotek i portletów open source, więc w zasadzie teraz każdy plik wojen zawiera te pliki jar. Jak przenieść te słoiki do wspólnej lokalizacji, aby nie trzeba było ich umieszczać w każdym pliku wojennym? Domyślam się, że lokalizacja to server/default/lib, ale nie jestem pewien.Gdzie umieścić wspólną bibliotekę w JBoss AS 5?

Czym różni się te słoiki pod numerem WEB-INF/lib od JBOSS/server/default/lib? Czy napotkasz problem związany z klasą?

Mam również statyczne dane przechowywane w statycznych polach, takich jak Singleton, czy będą one udostępniane wszystkim plikom WAR?

Odpowiedz

18

Classloading:

Masz rację, umieścić .jar s do JBOSS/server/<configuration>/lib lub JBOSS/lib.

JBoss AS jest dostarczany z dołączonymi bibliotekami Hibernate, które są testowane w tej wersji AS.

Zobacz jboss-6.0.0-SNAPSHOT\server\default\conf\jboss-service.xml:

<server> 
    <!-- Load all jars from the JBOSS_HOME/server/<config>/lib directory and 
     the shared JBOSS_HOME/common/lib directory. This can be restricted to 
     specific jars by specifying them in the archives attribute. 
     TODO: Move this configuration elsewhere 
    --> 
    <classpath codebase="${jboss.server.lib.url}" archives="*"/> 
    <classpath codebase="${jboss.common.lib.url}" archives="*"/> 
</server> 

Zobacz także:

Różnica między WEB-INF/lib i JBOSS/server/default/lib:

Libs w WEB/lib pochodzą z twojej WOJNY i są widoczne tylko w tej WOJNY. Jeśli masz inny moduł, np. EJB JAR, nie będą z niego widoczne, a dostaniesz ClassNotFoundException lub (jeśli masz klasę w wielu miejscach) ClassCastException.

Libs w JBOSS-AS/server/<config>/lib są widoczne dla całego serwera, a więc wszystkich wdrożonych aplikacji i ich modułów. Jednak (IIRC) nie mają pierwszeństwa, więc jeśli wprowadzisz tę bibliotekę, np. w WAR, ale nie w słoiku EJB, możesz skończyć używając dwóch różnych wersji, co jest niepożądane (prawdopodobnie doprowadzi do wspomnianego ClassCastException).

Zachowanie obciążenia klasy można zmodyfikować na kilka sposobów, zobacz np. JBoss wiki.

dane statyczne:

nie opierają się na polach statycznych w Java EE, które przynosi kłopoty. Na przykład,. ta sama klasa może być ładowana przez różne moduły ładujące klasy, więc będzie wiele instancji tych wartości statycznych.
Jeśli chcesz udostępniać dane między innymi WAR, użyj zewnętrznej pamięci masowej - bazy danych, pliku (z synchronizacją, jeśli piszesz do niego), pamięci podręcznej JBoss itd.

+1

+1 Wolę własne dedykowane katalogu dla własnej wspólne słoik na to ułatwia utrzymanie – stacker

0

JBOSS/server/default/lib działa poprawnie.

Wszystkie słoiki w tym folderze zostaną załadowane do JBoss.

0
  1. Go do% JBOSS_HOME% \ server \ domyślnym katalogiem \ conf
  2. Otwórz plik JBoss-service.xml
  3. Pod tagu znajdziesz

Dodaj ne W tag ścieżka klasy jak poniżej zawierać folder sharedlib na lokalnym komputerze

Uwaga: Należy upewnić się, że to protokół pliku na podstawie kodu

Powiązane problemy