3 Şubat 2014 Pazartesi

Web Uygulamalarının Deployment Kabusuna Son

Merhabalar,

 Web uygulamaları geliştirenlerin en büyük kabusudur deployment yapmak.

Kodda yaptığınız değişiklikleri görebilmeniz için uygulamınızı publish etmeniz ve bunu beklemeniz gerekmektedir(Bu size bir kahve molası için zaman tanısa da vaktinizin bir çoğunu beklemek ile geçirir)


Hot deployment destekleyen (server instance) jvm'ler metotlar içinde yapılan değişiklikleri deploy etmenize olanak sağlasa her durum için çözüm oluyor malesef.Örneğin JSF kullanılan bir uygulamada managed bean ya da bir action eklediğinizde yaptığınız değişikleri göremiyorsunuz.

Bu tarzda sıkıntıları aşabilmek içim  yaklaşık olarak 40 framework için  desteği bulunan JREBEL'i kullanmanızı önerebilirim.

Resmi web sitesine

http://zeroturnaround.com/software/jrebel/ adresinden erişebilirsiniz.


Lisanslı kullanabileceğiniz gibi facebook, twitter gibi sosyal ağlarla ücretsiz olarak kullanmanıza olanak veren ücretsiz sürüme sahiptir. (Zaman zaman sizin adınıza tweet atabilir :) yada paylaşımda bulunabilir.)

Ücretsiz kullanım için jrebel'e üye olmanız ve plugini çalıştığınız ortama kurmanız gerekmektedir.
Eclipse'e kurmada hiç bir sıkıntı yaşamadığımı özellikle belirtmek isterim..

Plugin kurulduktan sonra jrebel'in online sitesinden aldığınız license code bilgisini jrebel config center bölümünüze girmeniz yeterli. Bundan sonra kullanacağınız server instanceları ve uygulamaları JREBEL'e belirtmeniz yeterli.(Jrebel, Uygulamanızda rebel.xml dosyası oluşturmaktadır. Hangi paket yada klasör içerisindeki dosyaların otomatik olarak redeploy edileceği bilgisi bu file içerinde saklanmaktadır. Yani istediğiniz file,istediğiniz package, istediğiniz web content klasörünü belirtebiliyorunuz.)

Tek dezanantajı ise bu işlemi belirli periyotlarla yapmanız. Ama zamandan kazandığınız miktarı düşünürseniz bu işlem çok da önemli değil.

Web uygulaması geliştirelenlerin jrebel'i kullanmasını şiddetle tavsiye ediyorum.

 


31 Ocak 2014 Cuma

Hibernate Left Join Referans Problemi

 Hibernate ile ilgili bugün rastladığım bir durumu paylaşmak istiyorum..
Var olan bir tablomdaki iki kolon üzerinden aynı tabloya left join yaptığımda Hibernate bu sonuçları kendi modellerime dönüştürdüğünde gelen verilerde bir sıkıntı olduğunu farkettim.

İkinci left joinimden gelen veri null olarak gelmeliydi.Ancak ilk tablom ile aynı instance id de kayıt geliyordu.


Çalıştırdığım sql bu şekildeydi.


SELECT entry.*,createuser.*, updateuser.* FROM BLOG.ENTRY entry 
LEFT JOIN BLOG.BLOGUSER createuser ON entry.crtuserid=createuser.userid
LEFT JOIN BLOG.BLOGUSER updateuser ON entry.upduserid=updateuser.userid

Bunun için 
Hibernate ile select işlemi için SQLQuery kullanmıştım.Öncelikle kullandığınız tablolara alias vermeli ve sqlquery nesnenize eklemelisiniz.

SQLQuery query= em.createSqlQuery(hql);
query.addEntity("entry", Entry.class);
query.addEntity("createuser", Bloguser.class);
query.addEntity("updateuser", Bloguser.class);

Ancak bu değişikliklerde gelen verinin düzenlenmesine yetmedi.
Araştırmalarımda aynı tablo üzerine yapan left joinlerde select edilen veriler için  braces yani süslü parantez kullanılması öneriliyordu.
 
Sqlimin select kolonlarını braces ile sarmaladıktan sonra istediğim sonucu elde edebildim.
 

SELECT {entry.*},{createuser.*},{ updateuser.*} FROM BLOG.ENTRY entry 
LEFT JOIN BLOG.BLOGUSER createuser ON entry.crtuserid=createuser.userid
LEFT JOIN BLOG.BLOGUSER updateuser ON entry.upduserid=updateuser.userid