adsense

21.08.2014

Weblogic NoSuchMethodError Hatası ve prefer-web-inf-classes Parametresi

Bu makalede, uygulama kodu ile weblogic kütüphanelerinin çakışması problemine bir çözüm önerisi olarak “prefer-web-inf-classes” parmetresinden bahsedilecek.

Proje geliştirilirken uygulama kodu içerisindeki kütüphaneler ile weblogic kütüphanelerinin çakışması gibi durumlar meydana gelebiliyor. Bu durum uygulamanın çalışmasına mani olabilir.

Yaşanan bir örnek üzerinden konuya açıklık getirmeye çalışalım.

WLS 10.3.6 olan test ortamına uygulamaya ait war sorunsuz bir şekilde deploy edildi. Yapılan testler sonrasında uygulamanın WLS 12.1.2 olan prod ortamına alınması kararlaştırıldı. Fakat deployment sırasında uygulama hata alıp, aşağıdaki logun oluştuğu gözlendi.

<Aug 18, 2014 3:03:02 PM EEST> <Error> <Deployer> <BEA-149231> <Unable to set the activation state to true for the application "SOAOpsTool".
weblogic.application.ModuleException: java.lang.NoSuchMethodError: org/slf4j/spi/LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V


İnceleme sonucu, proje içerisinde(WEB-INF/lib) kullanılan slf4j kütüphanesinin, WLS 12.1.2 ortamında farklı bir versiyon ile mevcut olduğu görüldü. WLS 10.3.6 versiyonlu test ortamında slf4j kütüphaneleri bulunmadığı için hatanın daha önce yakalanamadığı farkedildi.

Proje içerisinde kullanılan kütüphaneler:
/WEB-INF/lib/jcl-over-slf4j-1.5.8.jar
/WEB-INF/lib/slf4j-log4j12-1.5.8.jar
/WEB-INF/lib/slf4j-api-1.5.8.jar

WLS 12.1.2 kütüphaneleri:
/org.slf4j.api_1.6.1.1.jar
/org.slf4j.jdk14_1.6.1.1.jar
/org.slf4j.ext_1.6.1.1.jar

Çözüm olarak; 
Projede kullanılan kütüphanelerin WLS tarafından önceliklendirilmesi sağlanmalıdır. Örnekteki slf4j kütüphanesinin ilk önce proje kütüphanelerinde aranmasını sağlamak için projedeki weblogic.xml dosyasına aşağıdaki parametre eklenip, uygulama deploy edilerek sorun giderilebilir.

Weblogic.xml ‘de Eklenen Kısım:

<container-descriptor>
       <prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>


Çıkarılan Dersler:

1-) Bu örnekte de görüldüğü gibi projelerdeki test ve prod ortamlarının her zaman aynı versiyon olması önemlidir. :)

2-) WLS versiyonları farklılaştıkça içerisindeki kütüphanelerin de değişebildiği unutulmamalı. Bu durum java.lang.NoSuchMethodError hatalarının sebebi olabilir.

Hiç yorum yok:

Yorum Gönder