11 Şubat 2008 Pazartesi

Glassfish administrator console problemi

Sun'ın application server'ı Glassfish'in son versiyonunu kurdunuz. Herşey mükemmel kuruldu ve hata vermedi ama 4848 numaralı porttan admin console'a ulaşmaya kalktığınızda şöyle bir hata alıyorsunuz:

type Exception report
message
descriptionThe server encountered an internal error () that prevented it from fulfilling this request.
exception javax.servlet.ServletException: java.lang.reflect.InvocationTargetException while attempting to process a 'beforeCreate' event for 'sun_page1'.
root cause java.lang.RuntimeException: java.lang.reflect.InvocationTargetException while attempting to process a 'beforeCreate' event for 'sun_page1'.
root cause java.lang.reflect.InvocationTargetException
root cause java.lang.reflect.UndeclaredThrowableException
root cause javax.management.AttributeNotFoundException: AdminSessionTimeoutInMinutes
note The full stack traces of the exception and its root causes are available in the Sun Java System Application Server 9.1_01 logs.

ÇÖZÜM:

Mesele (hemen her java kaynaklı problemde olduğu gibi) Türkçe windows kullanıyor olmamamızdan kaynaklanıyordur. Çözüm için (evet 2 saatten fazla zamanımı aldı bunu bulmak):

{glassfish'in kurulu olduğu yer}\domains\domain1\config\domain.xml

dosyasını açıp editliyoruz. JVM ayarlarının yapıldığı bir kısım var ( tag'i) Onun içine
-Duser.language=tr-TR

satırını ilave ediyoruz. Glassfish'i yeniden başlatıyoruz. Admin console artık hatasız çalışıyor...

Bu arada problemin çözümünü ararken rastladığım ifadeyi de buraya almak istiyorum:

JAVA:"write once run everywhere except Turkey"

3 yorum:

Adsız dedi ki...

Eyvallah.Çok hatıra geçti.

Bilgehan dedi ki...

Aslında sorunu çözen -Duser.language=tr-TR yazmak değilmiş. Onun yerine -Duser.language=qwerty, -Duser.language=loremipsum ya da manası olmayan herhangi birşey yazmak sorunu çözüyor. Yeter ki sadece tr yazmayın.

Aslında olayın arka planı şöyle. Locale ayarı Türkçe olan bir bilgisayarda, default language ayarı tr. Artık java dünyasında standart olan İ, ı karakteri sorunu nedeniyle, Türkçe dil seçeneğinde glassfish administrator çalışmıyor.

tr-TR parametresinin sorunu çözmesi ise şöyle. Normalde language parametresi iki karakterli bir değer alır. tr-TR diye bir language parametresi olmaz. (tr-TR yada tr_TR aslında locale'i gösterir. Dil ve ülkenin bir birleşimi olarak.) Fakat jvm böyle tanımadığı bir language parametresi ile karşılaşınca standart olarak ingilizce dile switch ediyor ve sorun çözülmüş oluyor. Orada tr-TR yerine alakasız birşey yazılsa bile sorunun ortadan kalkmasının nedeni bu. Tabi aslında gerçek bir çözüm değil, sorunun etrafında dolaşmış oluyoruz. Bu bir bug ve https://glassfish.dev.java.net/issues/show_bug.cgi?id=3851 adresinde söylediğine göre 9.1.1 versiyonunda düzeltilmesi bekleniyor.

Onur dedi ki...

bu sorun aslında bir bug.dil configurasyonu sadece sayfaya erişmek ve mevcut connection poollara erişmek için geçici bir çözüm ancak bu çözüm bazı exceptionlarada neden oluyor örneğin seam + glassfish de eğer dil ayarını bu şekilde yaparsak evet glassfishin admin sayfasına erişebiliyoruz ama web uygulamamızda login olamıyoruz ve şu hata ile karşılaşıyoruz:

"Exception : Connection could not be allocated because: Locale not recognized"

bu hatadan kurtulmanın yolu ise eklediğimiz -Duser.language tagını tekrar kaldırmak... Yani malesef aşağı tükürsek sakal yukarı tükürsek bıyık :D