Okur yazar gson

Standard

Elimdeki Collectiondaki elemanlari json olarak bi dosyaya yazayım dediğimde çok sorun yok.

Collection col = bizimElemanListesiGetir(...);
//String path = ".....";
File file = new File(path + "elemanlar.json");
file.createNewFile();
Writer writer = new FileWriter(file);
//dogrudan dosyaya json olarak gonder.
gson.toJson(col, writer);
writer.close();

fakat bunlari okurken şunu yapmaya çalışırsanız ve

File file = new File(path + "elemanlar.json");
Reader reader = new FileReader(file);
Collection col = (Collection) gson.fromJson(reader, Collection.class);

Generic olmasiyla ilgili bir sorun olursa ve java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap gibi hatalar alınırsa;

şunu denemeli


Type colType = new TypeToken<Collection>() {}.getType();
Collection col = new Gson().fromJson(reader, colType );

Burdaki Type java.lang.reflect.Type ve TypeToken da com.google.gson.reflect.TypeToken .

Reklamlar

Sayfa yönlenmiyor

Standard

Sitenize gelen bir istegi baska bir uri ye yönlendirmek isterken, sadece

response.setHeader("Location", "http://www.tafali.net");

yaptiginizda, sitenizden cevap kodu olarak 200 gittiği için yönlendirme çalışmayabilir. Buna ek olarak şunu da eklemeli.

response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);

SC_MOVED_PERMANENTLY yerine SC_MOVED_TEMPORARILY ya da SC_FOUND filan da olabilir tabi.

Apache / Tomcat – PHP / Java

Standard

Kardeşime eski kasayı gönderdim birkac site denemesi yapmak icin dükkana koyuver dedim. Bir wamp ve  bir tomcat7 kurmus. Sitenin PHP olanını wamp a koyup calistirdim, digerine de 8080 portundan erisebiliyoruz ama butun isteklerin apache ile karsilayip, tomcat e gidecek olanlari ona aktarma kisminda acemi olunca biraz ugrasmak gerekti.

Birkac yontem varmis bu is icin. Biz şöyle birşeyle hallettik.

  • Apache (wamp) deki httpd.conf dosyasinda “LoadModule proxy_module modules/mod_proxy.so” satırını actık. 

Fakat bu kadarla bırakırsanız, siteye ulasmaya calışınca 500 hatası alıyorsunuz, yanlış konfigurasyon filan diyor.

log dosyasinda “[warn] proxy: No protocol handler was valid for the URL /http-bind/. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.”  uyarısı çıkıyor.

Biraz aşağıdaki “LoadModule proxy_http_module modules/mod_proxy_http.so”  satırını da açınca sorun kalmadı. 

  • Bir de aşağıdaki gibi VirtualHost tanımı girince halloldu. 

<VirtualHost *:80>
ServerAdmin aaa@bbb.com
DocumentRoot “C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\Kedi”
ServerName kedi.cik

ProxyRequests Off
ProxyPass / http://localhost:8080/Kedi/
ProxyPassReverse / http://localhost:8080/Kedi/
</VirtualHost>

 

Eclipse ( rational ) açılmıyor

Standard

IBM in eclipse’i 🙂 Bir gün normal yoldan kapanmayınca ben de görevi sonlandırıverdim; “bu makina benim için bitti, bi daha da açılmam” deyip gitti 🙂 splash ekranindan öteye geçmiyordu. Kaldırdım, yeniden kurdum, guncelledim, javayi guncelledimse de bi daha açamadım. Workspace i seçtikten sonra biraz durup “.log” dosyasina bak deyip kapanıyordu.

Log da şöyle bişey :
java.lang.VerifyError : JVMVRFY036 stack underflow; class=org/eclipse/jface/viewers/ContentViewer

Hep overflow olacak değil ya bu sefer underflow 🙂 Neyse, açıkcası tam olarak ne olduğunu anlamadım; sonunda kurulum sırasında seçmemi istedigi benim de sen nasıl dersen o olsun dedigimde kuruldugu klasore “SDPShared” ismiyle actigi klasorun altindaki “plugins” klasorundeki ( yani SDPShared\plugins ) org.eclipse.jface li butun jarlari, gidip calisan birininkilerle degistirdim. Şimdilik barıştık bakalım.

Hibernate; basit örnek

Standard

Genelde bir konuya başlamak için üzerinde denemeler yapabileceğimiz minimum seviyede hazır bişeyler arıyoruz. Çalışabilir olsun, en az seviyede hazır olsun, karmaşık olmasın, vs.. sonra biz onun üzerinde oynayarak devam edelim. O örgünün örneğini birisi çıkarıverse, gerisi kolay 🙂

Yapabildiğim kadar hibernate için öyle bir başlangıç yapmaya çalışayım. Bu belki hibernate’in asıl özelliklerini göstermeyecek bile, ama oraya gitmek için üzerinde deneme yapabileceğiniz bir ortam sağlayabilir. Konfigurasyonlar, annotations’lar, tablo-sinif map’lemeleri, vs… gibi seylere girmiyorum.. sadece bu zımbırtı üzerinden veritabanına erişip bırakıyoruz.

Önce bu aracı kullanabilmek için, normal olarak bu araca ihtiyacınız var 🙂 Buradan ( http://sourceforge.net/projects/hibernate/files/hibernate4/ ) zip dosyasını indirebilirsiniz. Ayrıca hangi veritabanını kullanıyorsanız onun Driver’larına ihtiyacınız olacak. Bunu da ilgili veritabanının sitesinden büyük ihtimalle bulursunuz. Bu jdbc icin kullanacaginiz driver. Sonucta bu aşamanın sonunda elinizde , hibernate ve ilgili veritabanı icin bir takım jar dosyaları olacak.

Burada bahsedecegimiz basit haliyle indirdiginiz zip dosyasını açtığınızda icinden cikan klasorunun icindeki (lib\required) deki jarlar yeterli. Buradaki jarlari ve veritabanı icin gereken jarlari projenizin lib’lerine ekleyin. (Netbeans veya Eclipse de, projenize sağ tıklayıp, menunun altlarındaki Properties’ten açılan yerden bunu yapabilirsiniz. Notepad kullanıyorsanız, buna gerek yok 🙂 )

Şimdi basit deneme kodunu yazmaya geçelim. Basit bir sınıf oluşturup main metodunu aşağıdaki gibi yazarak basit denemenizi yaparsınız.


public static void main(String[] args) {
Configuration conf = new Configuration();

conf.setProperty("hibernate.dialect", "org.hibernate.dialect.DB2Dialect");
conf.setProperty("hibernate.connection.url", "jdbc:db2://100.100.100.100:50000/VT");
conf.setProperty("hibernate.connection.username", "kull");
conf.setProperty("hibernate.connection.driver_class", "com.ibm.db2.jcc.DB2Driver");
conf.setProperty("hibernate.connection.password", "parola");

SessionFactory sesF = conf.buildSessionFactory();
Session ses = sesF.openSession();

List<Object[]> res = ses.createSQLQuery("select * from tablo").list();

System.out.println(" size : " + res.size());
System.out.println(" test : " + res.get(0)[0]);

ses.close();

}

Açıklamalar :
-dialect, driver_class, url deki degerler kullandiginiz veritabanina ozel:
mesela dialect için;
MySQL org.hibernate.dialect.MySQLDialect
MySQL with InnoDB org.hibernate.dialect.MySQL5InnoDBDialect
MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect
Oracle 8i org.hibernate.dialect.Oracle8iDialect
Oracle 9i org.hibernate.dialect.Oracle9iDialect
Oracle 10g org.hibernate.dialect.Oracle10gDialect

gibi..

-conf.buildSessionFactory() depricate olmus bunun yerine bunun parametreli hali gelmiş, bununla ilgili aşağıdaki şeklini deneyebilirsiniz.

-res.get(0)[0] ; tipinden de anladiginiz gibi bu dizi listesi, listede satirlar, dizide de alanlar var. yani mesela, “select isim, soyad, numara ..” demisseniz ve 3. kayittakinin soyadini ogrenecekseniz res.get(2)[1]…

ikinci ornek

public static void main(String[] args) {
Configuration conf = new Configuration();

Map sett = new HashMap();
sett.put("hibernate.dialect", "org.hibernate.dialect.DB2Dialect");
sett.put("hibernate.connection.url", "jdbc:db2://100.100.100.100:50000/VT");
sett.put("hibernate.connection.username", "kull");
sett.put("hibernate.connection.driver_class", "com.ibm.db2.jcc.DB2Driver");
sett.put("hibernate.connection.password", "parola");

ServiceRegistryBuilder srb = new ServiceRegistryBuilder().applySettings(sett);
SessionFactory sesF = conf.buildSessionFactory(srb.buildServiceRegistry());

Session ses = sesF.openSession();

List<Object[]> res = ses.createSQLQuery("select * from tablo").list();

System.out.println(" size : " + res.size());
System.out.println(" test : " + res.get(0)[0]);

ses.close();

}

– bu ikisi arasinda fark, depricate oldugundan dolayi farkli bir metodun kullanilmasi; diger taraftan conf. bilgilerinin veriliş şekli. Bunu farklı şekillerde yapabilirsiniz ve hatta genelde de bu şekilde yapmazsınız. xml veya properties doysasina yazip, onlardan okutarak aktarmak şeklinde kullanırsınız.

Java, mongodb, query – like –

Standard

sql deki ” … aciklama like ‘%adamin biri’ ” seklindeki sorgulari, mongodb de regex lerle yapiyoruz. Boyle birseyi javada yaparken util deki Pattern i sorgu oluşturmak için kullaniyoruz.

“aciklama” alaninda “text” degiskenimle baslayan degerler olan kayitlari getirmek icin : ( .. aciklama like ‘AAA%’ )


String text = "AAA";
Pattern like = Pattern.compile("^" + Pattern.quote( text ) );
DBObject sorgu = new BasicDBObject().append("aciklama", like);
DBCursor o = col.find(sorgu);

Pattern.quote kısmı, onceki yazidaki sorundan dolayı var, asıl konuyla ilgili degil.

ya da kısaca


DBCursor o = col.find(new BasicDBObject().append("aciklama", Pattern.compile("^" + Pattern.quote( text ) )));

Bu arada “col” da, calistigimiz veritabanindaki ilgili “collection”. ( new Mongo().getDB(“….”).getCollection(“…….”) )

Java , PatternSyntaxException

Standard

İnternetten topladigim bazi yazilarla işim var. Bunlarla çalışırken “java.util.regex.PatternSyntaxException” exceptionu aldim.

Mesajlar ise : “Unmatched closing ‘)’ near” veya “Unclosed group near” gibi.. Her iki mesaj da “( parantez )” lerle ilgili. “group” dedigi de o. Doğrudan internetten topladığım text i regex te kullanıyordum ve normal olarak, text lerde internette çok olan “:)))” ler icinde geliyormus. “)” leri regex’te gruplama ile ilgili gordugu icin de bunlarin duzenli acilip kapanmasini bekliyor. “Pattern.quote” isimi gordu.


Pattern.compile("^" + Pattern.quote( com.getComment() ));

Umarım yanlış bişey yoktur. 🙂