Różne wersje libów a ClassNotFoundException

0

Siema, pierwsze raz zakładam wątek w tym dziale, ale czy kojarzycie jak możnaby rozwiązać następujący problem:

1) Deployuję plik .war na serwery aplikacyjne, takie jak Jboss czy WebSphere
2) W tym warze są pewne liby w wersjach innych niż gdzieś tam już istniejące na tych serwerach, przez co lecą NoSuchMethodException i inne pierdy
3) Podmiana liba w pliku war na liba w wersji z serwera nic nie zmienia
4) Usunięcie liba z wara powoduje ClassNotFoundException

help :D @jarekr000000 @scibi92 @Shalom

0

A to jakaś aplikacje JEE czy Spring?

1

Twoja apka potrzebuje twojego jara, a używa jara z serwera, który jest 'stary'. Wsadzenie do apki jara z serwera nic nie daje bo to twój jest ten 'lepszy', mógłbyś podmienić jar na serwerze na ten swój, ale nie rób tak :D

Ja w swoim projekcie używam guavy 23.0, na weblogicu, na który deployuje jest guava bodajże 12.0 i jakbym nic nie zrobił to ona będzie domyślnie użyta i dostanę tonę błędów. Dlatego mam takie coś:

<prefer-application-packages>
    <package-name>com.google.*</package-name>
    <package-name>org.jboss.logging.*</package-name>
</prefer-application-packages>

Nie napisałeś jakiego konkretnie używasz, ale na Websphere czy Jboss sa pewnie podobne możliwości.

0

Generalnie ciężko. Używaj wersji które masz z sewerem. Cudowanie z ustawianiem preferencji, jak powyżej, jest ryzykowne bo pewnie jakieś inne paczki od tego zalezą i nadal będą latać wyjątki że sygnatury nie pasują.

0

Na WebSphere masz możliwość skonfigurowania class loaderów i wskazania czy klasa ma być wyszukiwana w parent class loaderze czy w class loaderze aplikacji.
Dodatkowo jeśli na WS są zdeployowane biblioteki współdzielone, to aplikacja powinna być skojarzona z taką bibliotekę współdzieloną (o ile chcesz korzystać z tej wersji współdzielonej... )

0

@yarel: WebSphere 9, deploy polega na tym że wchodzę na consolę WS w chromie i idę do Enterprise aplication types -> install i wybieram mój war. Deploy sam w sobie jest owocny, ale później podczas próby startu owej aplikacji, są te błędy

0

To by trzeba rozważać przypadek po przypadku. Jaki jar, jakie błędy?
Dorzucasz liby mavenem?
To pewnie razem z twoim jarem dobierają się inne, które powodują konflikty.
Wtedy robisz exclusions, w najgorszym razie ręcznie wybierasz jara przez <system>/ path (straszny syf - dawno tak nie musiałem).

Czasem rozwiązanie to nawet podmiana jarów na serwerze (i jboss, i websphere ma koncept takich ext (shared) billiotek - względnie cywilizowany).

Tak ogólnie bez konkretu to jedyne co mogę poradzić to 1850 EURa za dzień + koszty transportu, przylatuje i rozwiązuję. Dzień raczej starczy w typowym projekcie. Chyba, że to dym na skraju JSF + Bean Validation - wtedy pewnie dwa dni :-)

Ktoś tam pewnie wybrał tego webshera i musiał raczej wiedzieć, że to płatne rozwiązanie. Płacisz albo krwią programistów, albo kasą dla konsulatantów - przeważnie w obu walutach.

0
jarekr000000 napisał(a):

To by trzeba rozważać przypadek po przypadku. Jaki jar, jakie błędy?
Dorzucasz liby mavenem?
To pewnie razem z twoim jarem dobierają się inne, które powodują konflikty.
Wtedy robisz exclusions, w najgorszym razie ręcznie wybierasz jara przez <system>/ path (straszny syf - dawno tak nie musiałem).

Czasem rozwiązanie to nawet podmiana jarów na serwerze (i jboss, i websphere ma koncept takich ext (shared) billiotek - względnie cywilizowany).

Tak ogólnie bez konkretu to jedyne co mogę poradzić to 1850 EURa za dzień + koszty transportu, przylatuje i rozwiązuję. Dzień raczej starczy w typowym projekcie. Chyba, że to dym na skraju JSF + Bean Validation - wtedy pewnie dwa dni :-)

Ktoś tam pewnie wybrał tego webshera i musiał raczej wiedzieć, że to płatne rozwiązanie. Płacisz albo krwią programistów, albo kasą dla konsulatantów - przeważnie w obu walutach.

  • Mavenowy exclusions zrobi to samo co ręczne usunięcie jara, więc ClassNotFoundExceptions
  • No właśnie nie powinienem ruszać jarów na serwerze
  • Chciałbym mieć twoją dniówkę :)

EDIT:

  • jar to apache lang3, błąd jest java.lang.NoSuchMethodError: org/apache/commons/lang3/StringUtils.removePattern.
0

jar to apache lang3, błąd jest java.lang.NoSuchMethodError: org/apache/commons/lang3/StringUtils.removePattern

Jeszcze nie napisałeś skąd to leci, kto wywołuje. W sumie ważne.

Ale pierwszy hint - musisz mieć wersję co najmniej 3.2, żeby ta metoda była.

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.2.1</version>
</dependency>
0

A czy rozwiązaniem problemu nie jest EAR i zdefiniowanie pod niego bibliotek? Coś mi chodzi po głowie, że takie rzeczy były w dokumentacji WebLogica, więc pewnie na WAS-ie też są.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0