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 Wolę własne dedykowane katalogu dla własnej wspólne słoik na to ułatwia utrzymanie – stacker