30 Haziran 2009

JPA'da Bir Problem mi Var?

Çalıştığım projede EJB 3.0 ve JPA'yı kullanmaktayız. Uygulama sunucusu olarak JBoss 4.2.3 GA kullanıyoruz. Bu sabah bir native query yüzünden 1 saat oyalandım durdum. Query native yazıldı çünkü karmaşık bir query idi. JPA API'sindeki createNativeQuery metodu kullanıldı. Sorun şu: query'de çekilen kolonlara isim vermeyince otomatik olarak kolon ismi atanıyor. Bunu da çekilen alanın ismine göre yapıyor. Örneğin; "... d.id, p.id ..." şeklinde kolonlar varsa sonuç listesinde "ID, ID " şeklinde bir görüntü oluşuyor. Bu durumda da normalde d.id değeri 120, p.id değeri 130 ise ikisi de 120 geliyor. Daha sonra query'i "... d.id AS ID1, p.id AS ID2 ..." şeklinde değiştirince sorun gözükmüyor. JPA kolon isimlerinden dolayı bir karmaşaya düşüyor galiba. Çözüm bulmak sevindirici fakat böyle bir saçmalıktan dolayı 1 saat boşa uğraşmak üzücü...

25 Mart 2009

Tomcat 6.x Windows Servis'ine VM Argümanı Nasıl Verilir?

Apache Tomcat 6.x windows servis olarak çalıştırılabilmektedir. Tomcat'i bilgisayarınıza kurduğunuzda "bin" klasörü altında service.bat, tomcat6.exe ve tomcat6w.exe dosyaları bulunmaktadır. VM argumanı verirken bu dosyaları kullanacağız. Bu dosyalardan asıl işimizi gören "service.bat" dosyasıdır. Bu dosya ile tomcat windows servis olarak kurulabilir veya var olan bir servis kaldırılabilir. Bu dosyayı direk çalıştırdığınızda şu satır çıkar konsolda:

Usage: service.bat install/remove [service_name]

Buna göre "service.bat install" dediğinizde tomcat servis olarak yüklenecek veya "service.bat remove" dediğinizde var olan tomcat servisi sistemden kaldırılacaktır. Tomcat'i servis olarak yükledikten sonra "bin" klasörü içindeki tomcat6w.exe dosyasını çalıştırarak tomcat'in servis olarak çalışırken nasıl ayarlar ile çalışacağını kontrol edebilirsiniz, tabi ki bir kısım ayarlar. Bu ayarlardan bir tanesi VM argumanlarının verileceği kısımdır. Bu argümanlar açılan pencerede 4. tab olan Java tab'ındaki "Java Options" kısmında verilir. Ben bu kısma PermGen Space ayarı ile ilgili vm parametreleri girdim. Ondan sonra servisi başlattım fakat hata verdi, argümanları algılayamadı. Daha sonra service.bat dosyasını düzenlemek için açtım. Dosyada:

rem Set extra parameters
"%EXECUTABLE%" ...


şeklinde devam eden bir satır var. Bu satıra VM argümanları ";" işareti ile ayrılarak yazılmış. Ben de -XX:PermSize=512m, -XX:MaxPermSize=512 argümanlarını şu şekilde ekledim:

"%EXECUTABLE%" //US//%SERVICE_NAME% ++JvmOptions "-Djava.io.tmpdir=%CATALINA_BASE%\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties;-XX:PermSize=512m;-XX:MaxPermSize=512m" --JvmMs 256 --JvmMx 512

Daha sonra servisi "service.bat remove" ile kaldırıp "service.bat install" ile tekrar kurdum. Bu işlemden sonra servis düzgün olarak çalıştı.
Bu arada tomcat servis olarak değil de normal olarak yani startup.bat dosyası ile çalıştırılacaksa ve VM argümanı verilmek isteniyorsa catalina.bat dosyası içindeki "JAVA_OPTS" değişkenine istenilen argümanlar eklenmelidir. Ekleme aşağıdaki şekilde olabilir:

set JAVA_OPTS = %JAVA_OPTS% -XX:PermSize=512m -XX:MaxPermSize=512

Zaten dosya içinde JAVA_OPTS şeklinde aratırsanız örneğini görebilirsiniz.

11 Şubat 2009

JSF Tomcat ve Eclipse konfigürasyonu

Eclipse Ganymede versiyonunda JSF projesi nasıl yapılır, Tomcat üzerinde nasıl çalıştırılır? gibi soruların cevaplarının bulunabileceği güzel bir makale "JSF tutorial with Eclipse and Tomcat".