Menu

9 Aralık 2011 Cuma

#HY000Host 'XXX' is not allowed to connect to this MySQL server


mysql> grant all privileges on *.* to logger@192.168.10.14 identified by 'logger';

6 Aralık 2011 Salı

Glassfish Performans Iyilestirme (Tuning)

      Bu makalemizde Glassfish`in performans iyilestirmelerini inceleyecegiz. Neden buna ihtiyac duyuyoruz, cunku benimde basima geldigi gibi, proje gelistirim asamasinda hersey normal olarak gorunuyor ama, bir production sisteme yuklemeye, yani gercek calisma ortamina gecmeye basladigimizda iste o zaman  sorunlarla karsilasmaya basliyoruz.

    Peki neden bu sekilde oluyor derseniz, cok basit olarak sunu dusunebiliriz, Mesala siz bilgisayariniz uzerinde uygulama gelistiriyorsunuz ve yaptiklarinizi test etmek icin, belkide gunde en az 4-5 defa yeniden deploy ediyorsunuz, ve iste bu sekilde yaptiginiz icin, her yeni redeploy yapiliminda server yeniden restart oluyor diyebiliriz, restart oluyordan kastim, butun degerler sifirlanip yeniden basliyor, buna JVM yani RAM deki objelerin silinmesi vs. gibi diger butun degerler ilk haline donuyor. Ama gercek bir uygulama sunucusa attigimizda, belkide burada aylarca hic restart ve redeploy olmadan sistemin calismasi gerekiyor ve bizde performans problemlerini burada yasiyoruz.

   Sizinde tahmin edebileceginiz gibi, Application Server icindeki butun parametreler default olarak ayarlanmis gelmektedir. Ve bizimde makalemizin konusu bu, buradaki parametreleri optimum hale getirmeye calisacagiz.

Sozu cok fazla uzatmadan ise koyulalim..
  • Using the glassfish performance tuner
  • Deployment Settings
  • Logger Settings
  • Web Container Settings
  • EJB Container Settings
  • Java Message Service Settings
  • Transaction Service Settings
  • HTTP Service Settings
  • Network Listener Settings
  • Transport Settings
  • Thread Pool Settings
  • ORB Settings
  • Resource Settings
  • Load Balancer Settings
Makalemizde yukaridakileri adim adim inceleyecegiz.
Oncelikle sunu belirteyim, performance tuner glassfish`in sitesinde indirdigimiz surumde mevcut degil, oracle kendi sitesinde indirmemiz gerekecek, simdi diyeceksiniz glassfish oracle`in degilmi diye, bunu detayli bir sekilde ben bilmiyorum ama en yakin zamanda ogrenip, paylasacam.

Download icin..
http://www.oracle.com/technetwork/middleware/glassfish/downloads/ogs-3-1-1-downloads-439803.html
(ogs-3.1.1-unix-ml.sh linux icin)
(ogs-3.1.1-windows-ml.exe windows icin)
Using the glassfish performance tuner
    Performance tuner glassfish`in bize server deployment icin gerekli tavsiyelerde bulunur ve optimum ayarlari yapmamizda yardimci olur.
Ben kendi bilgisayarim icin asagidaki ayarlamalari yaptim.

Yukaridaki 1.adim da yapilacaklar, ikinci adimda ayarlanmis degerler goreceksiniz ve gelen JVM ile ilgili onlarinda detaylarini JVM tuning makalemizde gorecegiz.

Deployment Settings

Deployment Settings performance icin onemli ayarlari icermektedir.
1- Disable auto-deployment
Burada bahsedilen otomatik deploy, yani .war file`ini yada .ear file`nizi glassfish`in (glassfish-3.0.1/glassfish/domains/domain1/autodeploy/) directorisine attiginiz zaman glassfish onu otomatik olarak deploy edecektir. ve edebilmesi icin auto-deployment parametresinin enable olmasi gerekiyor.

Ama biz production sistemimizde bu parametreyi disable yapmaliyiz, cunku glassfish surekli autodeploy klasorunu kullanmaya calismasin, bu parametreyi production server`imizde disable yaptigimizda performansi artiracaktir.
Ayarlamak icin (http://127.0.0.1:4848/common/index.jsf)
 domain -> Application Cofiguration altinda 
                   Auto Deploy : disable.

2-Use Pre-compiled JavaServer Pages

JSP sayfalarinin derlenmesi cok yogun kaynak ve zaman alici islemlerden biridir. JSP sayfalarinin deploydan once derlenmesi ciddi performance artisi saglayacaktir. Ve bu ozelligi kullandigimiz zaman sadece servlet file`lari deploy olacaktir.

Ayarlamak icin (http://127.0.0.1:4848/common/index.jsf)
 domain -> Application Cofiguration altinda 
                   Precompile: enable.

 3- Disable Dynamic Application Reloading

 Eger bu parametre enable ise, o zaman server ve uygulamadaki degisiklikleri periodik olarak incelecektir ve buda performance kayiplarina neden olacaktir. Production serverimizde bu parameteriyi disable yapacagiz.

Ayarlamak icin (http://127.0.0.1:4848/common/index.jsf)
 domain -> Application Cofiguration altinda 
                   Reload: disable.
Son hali goruntulu olarak

Logger Settings

 

1 Aralık 2011 Perşembe

JPQL`de SUM fonksiyonunda aritmetik islemler

Bilindigi gibi jpqlde sum fonksiyonunda aritmetiksel ismler yapmamiza izin vermiyor. Ama biz bunun gecici bir cozumunu asagidaki yontemle bulabiliriz.
Mesala ben asagidaki bir sql yazdigimda syntax error verecektir.
String sql = "SELECT SUM(p.price*l.quantity) FROM purchaseorders o JOIN orderlineitems l ON o.pono=l.pono JOIN products p ON l.prod_id=p.prod_id JOIN suppliers s ON p.sup_id=s.sup_id"
Ama biz asagidaki gibi bir class yaratip onu kullandigimizda sorunumuz cozulmus olacaktir.
    package jpqlexample.servlets;
    ...
    class LineItemSum {
           private Double price;
           private Integer quantity;
           private Double rslt;
           public LineItemSum (Double price, Integer quantity){
                 this.rslt = quantity*price;
           }
           public Double getRslt () {
                return this.rslt;
           }
           public void setRslt (Double rslt) {
                this.rslt = rslt;
           }
        }
Kullanimi :
String sql = "SELECT NEW jpqlexample.servlets.LineItemSum(p.price, l.quantity)
                       FROM PurchaseOrder o
                        JOIN o.orderLineItems l JOIN l.product p JOIN p.supplier"