26 Mart 2012 Pazartesi

Netbeans’de Java Class Library Projesine JAR Ekleme

Farklı bazı projelerde kullanmak üzere bir takım sınıfları içeren JAR dosyası oluşturmak için Java Class Library projesini Netbeans kullanıcılarının büyük kısmı kullanmıştır. Oluşturulan projenin içerisine herhangi başka bir kütüphane eklemek istediğimizde bir problem yaşamadan ilgili JAR dosyasını kullanabiliyoruz. Fakat oluşturduğumuz projeyi build edip sonrasında oluşturulan JAR dosyasını başka bir projede kullanmak istersek bu sefer o proje içerisine eklediğimiz kütüphaneye ulaşamayız. Ulaşmaya çalışırsak ClassNotFoundException almamız ise muhtemel.

Buradaki temel problem aslında şu. Bildiğiniz gibi JAR dosyaları, içerisinde derlenmiş class dosyaları taşır. Bu nedenle bir projede rahatlıkla kullanılabilir. Fakat bir class library projesine bu JAR dosyasını koyarsak ve sonrasında projeyi build edersek JAVA class dosyalarını yeniden derlemeyecektir. Bu da bizim yeni üretilen JAR dosyamızın içerisinde, projeye eklediğimiz diğer kütüphanelerin olmaması anlamına gelecektir.

Sözü fazla uzatmadan konuya giriyorum. Yapmamız gerekenler şu şekilde. Projemizi tamamladıktan sonra build etmeden hemen öncebuild.xml dosyasının içerisinde bir değişiklik yapacağız. Böylece istediğimiz JAR dosyalarını içeren bir JAR dosyası elde edeceğiz. Örneğin projemize gson-2.1.jar‘ı ekleyelim. Bunun için build.xml dosyamızda aşağıdaki gibi bir değişiklik yapmalıyız. İlgili alanları kendi dosya isimleriniz ile değiştirebilirsiniz.

<target name="SON-JAR">
   <jar jarfile="dist/SON_DOSYA.jar">
      <zipfileset src="${dist.jar}"excludes="META-INF/*"/>
      <zipfileset src="lib/gson-2.1.jar"excludes="META-INF/*"/>
      <manifest>
         <attribute name="Main-Class"value="com.test.maktas.Main"/>
      </manifest>
   </jar>
</target>

Bu işlemden sonra projemizi build ettiğimizde çıkacak JAR dosyasında ilgili kütüphane dosyalarının da olduğunu göreceğiz.

( java, netbeans, jar, library, ClassNotFoundException, referring, java class library, jar inside jar )

1 Mart 2012 Perşembe

org.hibernate.HibernateException: Wrong column type Found Çözümü

Merhaba, hibernate kullanırken ortaya çıkan basit ama can sıkıcı bir problemin çözümünü paylaşmak istiyorum. Java tarafında @Entity annotation'ı ile oluşturduğum bir sınıfta, String değişkenleri @Column annotation'ı ile bağladım. Bu işlemi yaparken annotation parametresi olarak yalnızca column name'i verdim. Bu şekilde veritabanı tarafına bağlanmaya çalıştığımda, başlıkta geçen "org.hibernate.HibernateException: Wrong column type Found: char, expected: varchar2(255)" hatasını aldım. Bu hatayla karşılaşanlar için gelelim sebebine ve çözümüne...
@Column(name = "veritabani_alani")
public String getAlan() {
   return alan;
}
Hatayı alırken kullandığım veritabanı MySQL'di. Hibernate ile oluşturmadığım, daha önce elle tanımlanmış tabloları kullanıyordum. Bu tabloların karakter içeren alanları ise CHAR tipinde tanımlanmıştı. Hibernate, entity sınıflarında String olarak tanımlanan değişkenleri veritabanında eşlerken VARCHAR(255) kullanır. Herhangi bir spesifik karakter tipi belirtilmediği için ve Hibernate, alanın veritabanındaki karşılığını VARCHAR(255) değil de, tanımadığı bir tip olan CHAR görünce böyle bir hata ortaya çıkıyor. Benzer durumda bu hata belki alınmayabilir fakat schema validation alanı validate yapıldığı zaman Hibernate alanı valdiate edemediği için bu hata alınıyor. 

Hatayı düzeltmek için yapılması gereken şey aslında basitçe Hibernate'e bu alanın tipinin CHAR olduğunu göstermek. Bunu için de @Column'a bir parametre daha ekliyoruz ve tipi belirtiyoruz.
@Column(name = "veritabani_alani", column_definition="char")
public String getAlan() {
   return alan;
}
( char, column_definition, database, hibernate, java, mysql, org.hibernate.HibernateException, varchar, wrong column type found )
Kaynak: http://cedar715.wordpress.com/2009/10/13/org-hibernate-hibernateexception-wrong-column-type-found-char-expected-varchar2255/

25 Nisan 2011 Pazartesi

HTTPServletRequest İle Adres Satırındaki URL’i Almak

Merhabalar,

Basit, belki çoğunuzun bildiği ve daha önce yaptığı bir işlemi anlatacağım şimdi. HTTPServletRequest ile tarayıcının adres satırındaki URL’i almanın aslında temel yöntemi request.getQueryString() ve request.getRequestURI() metodlarından dönen String değerlerinin birleştirilmesidir. Bazı durumlarda bu yöntemler çalışmayabiliyor. Örneğin portlet içerisindeki HTTPServletRequest’de bu yöntem işe yaramıyor. Çalışmadığı başka durumlar da olabilir. Her koşulda bu veriyi alabilmenin yolu ise aşağıdaki request.getAttribute() metoduna gerekli parametreleri vererek metodu çağırmadır. Bu yöntem ile URL’in tamamı sorunsuzca alınabilir.

Aşağıda bir örneğini görebilirsiniz:
String activePage = "";
String queryString = "?"+request.getAttribute("javax.servlet.forward.query_string");
String requestURI = ""+request.getAttribute("javax.servlet.forward.request_uri");
if(requestURI == "null") {
    queryString = "?"+request.getAttribute("javax.servlet.include.query_string");
    requestURI = ""+request.getAttribute("javax.servlet.include.request_uri");
}
if(requestURI == "null") {
    queryString = "?"+request.getQueryString();
    requestURI = request.getRequestURI();
}
if(queryString.equals("?null")) {
    queryString = "";
}
activePage = requestURI+queryString;
( httpservletrequest, url, uri, request.getattribute, adres satırı, address bar, tarayıcı, browser ) 
Kaynak: http://stackoverflow.com/questions/1256562/java-httpservletrequest-get-url-in-browsers-url-bar

20 Nisan 2011 Çarşamba

Java Portlet Sınıfında DoView()’a İki Kez Girme Sorunu

Merhaba,

Java’da portlet geliştiren arkadaşlar için, internette kolay kolay bulamayacağınız bir bilgi paylaşmak istiyorum. Başıma gelen bir sorunun nasıl çözülebileceğini anlatacağım.

Yazıma başlamadan önce, sorunla Sun Java Portlet ve Netbeans 6.5.1’de karşılaştığımı belirteyim. Portlet geliştiren arkadaşlar bilirler, herhangi bir IDE tarafından oluşturulan default portlet sınıfında gelen doView, processAction gibi metodlar bulunur. DoView metodu, portlet sayfaları her yükleneceğinde yapılması gereken işleri içerir. ProcessAction ise, formdan post yapıldığı zaman yapılacak işlerin bulunduğu metoddur.

Normal şartlar altında, portlet ilk açıldığında ya da form post edilip processAction metodundaki işler tamamlanıp metoddan çıkıldığında uygulama doView metoduna bir kez girer. Problem ile tam olarak burada karşılaştım. Sorun, herhangi bir işlemden sonra uygulama doView metoduna girip, işlemleri yaptıktan sonra, bir jsp sayfasını render etmesi gerekirken, doView metoduna ikinci kez giriyordu. Dolayısıyla bu durum, session yönetimini olumsuz etkiliyor ve sorunlar çıkarıyordu.Statik değişkenler, gözden kaçırılan kodlar gibi bir çok kısmı aradım taradım fakat sonuç bulamadım. Şu an kaynağını hatırlamadığım, içerisinde 2 adet post bulunan bir forum köşesinde sonuca ulaştım. Problem, render edilen jsp sayfasındaki kırık bir linkten kaynaklanıyordu. Yani, javascript, css dosyaları ya da direkt olarak jsp dosyalarını içerisinde bulunan kırık bir link (resim, video, dosya vs.) buna sebebiyet veriyordu.

Tüm araştırmalarıma rağmen sebebini hala bulamadım fakat benzer sorunu yaşayan arkadaşlar için umarım yardımcı olabilmişimdir. Tespit ettiğiniz kırık linki düzeltmek, sorununuzu çözecektir.

( sun, java, portal, portlet, doview, twice, çift, iki kere, netbeans )

11 Nisan 2011 Pazartesi

Flash Bellek’deki CDFS Partition’ı Silme

Merhabalar,

Aylar önce, OCZ Rally2 USB Belleğime, hızlı kurulum ve bazı denemeler yapmak için Windows XP setup yüklemeye çalışmıştım. Bu işle uğraşanlar U3 kelimesine zaten aşinadırlar. U3 destekli USB flash bellek modelleri için bazı yöntemler zaten bulunmakta fakat ben bundan bahsetmeyeceğim. Aslında bu noktaya bir sorun vasıtasıyla geldim ve şimdi bu sorundan ve çözümünden bahsedeceğim.

Dediğim gibi aylar önce bu işlemi başarıyla gerçekleştirip bir partition oluşturdum. Bu işlem sonrasında USB flash belleği bilgisayara takdığımda aşağıdaki gibi bir görüntü oluşuyordu. Windows yüklemesi yapmak için gerçekten güzel bir teknoloji fakat flash belleği eski haline geri getirmek? Evet bu tam bir işkence.
Kısaca anlatayım. Flash belleğinize bu işlemi bir kere yaptığınızda, windows’un disk yönetimi kısmında flash bellek ve cd-rom sürücüsü tamamen ayrı gözükmektedir. Yani siz flash belleği formatlamak istediğinizde, yalnızca ayrılmış olan kısmı formatlayabiliyorsunuz, diğer kısma dokunamıyorsunuz. Bazı arkadaşlar fdisk, ya da belleğin tüm bitlerini sıfırlama gibi önerilerde bulunacaklardır fakat bu yönetmlerin hiçbiris işe yaramıyor. Aylarca bu iş için uğraştım fakat bir sonuca ulaşamadım. En sonunda bir site buldum ve orada belirtilen yöntem ile flash belleğimi yeniden kazandım :) Bu sitenin linkini aşağıda vereceğim. Şimdi gelelim işlemin nasıl yapılacağına.

Öncelikle https://drive.google.com/file/d/1HeBbJCvmScY6rRpUbvyWTR6sr8qwld6C/view?usp=sharing adresindeki uygulamayı indirmemiz gerekiyor. Her ihtimale karşı upload ettim fakat yazı sonunda uygulama ana sayfasının linkini de vereceğim. Bu uygulama bize flash belleğimizle ilgili detaylı bilgi verecek. Uygulamayı indirdikten sonra flash belleğinizi bilgisayarınıza takın ve çıkan ekrandan belleğinizi bulun. Sonrasında ise detay kısmında belleğe ait vendor ve product id değerlerini bulacağız.
Sonrasında ise http://flashboot.ru/index.php?name=iflash&pagenum=1 (http://flashboot.ru/iflash/) adresine giriyoruz. Site Rusça fakat arama yapacağımız kısımlar zaten belli :) Bulmuş olduğumuz vendor ve product id değerlerini girerek arama yapıyoruz. Çıkan sonuçlardan ise flash belleğimize ait bilgileri buluyoruz. En sağ kısımda ‘Утилита’ yazan yerde ise kullanacağımız uygulamanın adı yazmakta. Ufak bir Google araması yapıp çıkan uygulamayı buluyoruz. Bu uygulama, flash belleğin chipsetine özgü bir modifikasyon uygulaması.

Sonrasında bu uygulamayı bilgisayarımıza indirip, kurulum gerektiriyorsa yapıyoruz. Daha sonra bu uygulama aracılığı ile partition’a verilmiş kısımda dahil olmak üzere tüm flash bellek içeriğini görebiliyoruz. Yapılması gereken tek şey ise bu uygulama aracılığı ile gerekli format işlemini yapmak. Bu kadar basit.

Umarım benim gibi bu derece sıkıntı yaşayıp çözüm bulamayan arkadaşlara bir kolaylık sağlayabilmişimdir.

( u3, flash, bellek, cdfs, partition, chipset, usbdeview )