8 Kasım 2012 Perşembe


http://www.yazilimsozluk.com/Konular-2101-javascipt_yard%C4%B1m.aspx da bir soruya cevap olarak benim tarafımdan yazılmıştır.


Dostum ben ayrı bir form kullanarak yapmışım upload işini sayfanın refleshlenmesinden kurtulabileyim diye. Ayrı bir form tanımlayıp içine bi file elementi bir de submit butonu eklemişim. Resim de diğer form da div de gösteriliyor. Div in background ını set ederek resmi göstertmişim. Adam file elementten resim seçtikçe oradaki resmi de değiştirmişiz. Sonra submit e bastığında o ayrıyetten oluşturduğum formun formdata sına resmi atımışım ve o şekilde servlet e yollamışım. Örnek kod vericem umarım işine yarar.

//Alttaki kısım html de yer alıyor.Action da upload edilecek servis adresi,
//onsubmit te de çalışacak javascript metodları var.
//File nesnesinin onclick inde de çalışacak javascriptler var.Birşey
//seçildiğinde anaformun içindeki div in background ının değiştirilmesi
//falan.
<form action="/Fide/formdesigner/resimekle" name="ggrd23_form" id="ggrd23_form" method="post" enctype="multipart/form-data" target="ggrd23_frame" onsubmit="var fide_formIslemi=new Fide_AnaFormIslemleri(document.forms,'panellistgrid',
document.forms['ggrd23']);return fide_formIslemi.fide_formSubmiteResimEkle('ggrd23_image19_file');">
<input name="ggrd23_image19_file" id="ggrd23_image19_file" class="ggrd23_image19_file" type="file" value="Dosya Seç"
onchange="var fide_formIslemi=new Fide_AnaFormIslemleri(document.forms,'panellistgrid',
document.forms['ggrd23']); fide_formIslemi.fide_secilenResmiGösterici(this,'ggrd23_image19');">
</input>
<input name="ggrd23_image19_submit" id="ggrd23_image19_submit" class="ggrd23_image19_submit" type="submit"
value="Resmi Gönder"></input>
</form>
//Aşağıdaki metod file nesnesinin onchange inde çalışan metod. Resim
//seçildiğinde gidiyor div in background ını değiştirererek kullanıcıya
//resim gösteriyor. Senin için gereksiz ve benim için gizliliği önemli olan
//birkaç yeri sildim. Umarım fazla silmemişimdir :-)

/**
     *
     * Resim nesnelerinde choosefile butonu ile seçtiğimiz resmin gösterilmesini
     * sağlayan metoddur.
     *
     * @param input
     *            File nesnesinin kendisi
     * @param fide_resimNesnesiAdi
     *            Hangi resim nesnesinde gösterilmesini istiyorsak o ad
     *            girilecek.
     */
    this.fide_secilenResmiGösterici = function (input, fide_resimNesnesiAdi) {
        /**
         * Dosya seçilmeden tamam a basılmışsa bir işlem yapmıyoruz.
         *
         */
        if (input.files && input.files[0]) {
            /**
             * Bizim istediğimiz tip image Başka tip upload etmiycez ve resim
             * nesnesinde de gösteremeyiz zaten.
             *
             */
            /**
             *
             * Daha sonra da reader ile okuyoruz. Onload ını override edip
             * istediğimiz nesnenin istediğimiz özelliğini dolduruyoruz.
             *
             */
            if (input.files[0].type.indexOf('image') >= 0) {
                var reader = new FileReader();
                reader.onload = function (e) {
//                    document.getElementById(fide_resimNesnesiAdi + 'resim').style.backgroundImage = "url("
//                        + this.result + ")";
                    document.getElementById(fide_resimNesnesiAdi + 'resim').style.backgroundImage =
document.getElementById(fide_resimNesnesiAdi + 'resim').title;
                };
                reader.readAsDataURL(input.files[0]);
                return;
            } else {
                window.top.popupOlusturucuHata(fide_jsDil.gecerliResimBulunamadi(),
                    3000);
                document.getElementById(fide_resimNesnesiAdi + 'resim').value = "";
                return;
            }
        }
        document.getElementById(fide_resimNesnesiAdi + 'resim').value = "";
    };
//Bu da formun onsubmitinde çalışacak method. File elementinden
//seçili dosyayı alıyor ve bir formdata oluşturarak onun içine basıyor.
//Daha sonra da o formdata yı return ediyor. Return edilince de o
//formdata Action da yazılan adrese gidiyor içindeki resim ile beraber.
//Karşıda da o resmi okuyup istediğini yapıyorsun.


/**
     *
     * Resim upload edebilmek için kullanmamız gereken metoddur. Resim upload
     * edebilmek için harici bir form kullanıyoruz. Bu metod genelde onsubmit
     * metodnda çağırılır. Yeni bir formdata oluşturulur ve bunun içine image
     * eklenir. Formu post ettiğimizde karşıya burada oluşturulan formun
     * gönderilmesi sağlanır.
     *
     *
     * @param fide_resimNesnesiAdi
     */
    this.fide_formSubmiteResimEkle = function (fide_resimNesnesiAdi) {
        var fide_images = document.getElementById(fide_resimNesnesiAdi).files;
        if (fide_images.length == 0) {
            window.top.popupOlusturucuHata(fide_jsDil.seciliResimBulunamadi(), 3000);
            return null;
        }
        var fide_formData = new FormData();
        for (var i = 0; i < fide_images.length; i++) {
            if (fide_images[i].type.indexOf("image") >= 0) {
                fide_formData.append('image', fide_images[i]);
            } else {
                window.top.popupOlusturucuHata(fide_jsDil.gecerliResimBulunamadi(),
                    3000);
                return null;
            }
        }
        window.top.popupOlusturucuBasarili(fide_jsDil.resimGonderildi(),
            3000);
        return fide_formData;
    };
Umarım işine yarar. En azından fikir verir. Kafanı karıştırdıysam affola. Kolay gelsin.

1 Kasım 2012 Perşembe

Çarpımları toplamlarının 7 katı olan 3 adet pozitif çift tam sayıyı bulma.



Elimizde 3 adet pozitif çift tamsayı var. Bu sayıların
çarpımlarını, toplamlarına bölünce 7 sayısını elde
ediyoruz. Bu sayıları bulan kodu yazınız. ( Sayılar 1
ile 10.000 arasında olacak.) bu sorunun nasıl bir algoritması olacak. Sorusuna cevap olarak yazılmıştır.

package main;
import java.util.Calendar;
/**
*
*
*
* @author Murat GUZEL
*
* (Elimizde 3 adet pozitif çift tamsayı var. Bu sayıların
* çarpımlarını, toplamlarına bölünce 7 sayısını elde
* ediyoruz. Bu sayıları bulan kodu yazınız. ( Sayılar 1
* ile 10.000 arasında olacak.) bu sorunun nasıl bir algoritması olacak).
* Sorusuna cevap olarak benim tarafımdan yazılmıştır.
*
*/
public class Deneme {
     public static void main(String[] args) {
     long ilkZaman=Calendar.getInstance().getTimeInMillis();
     int sayilarinCarpimi = 14;
     int sayilarinToplami = 0;
     while(sayilarinCarpimi<10000){
          sayilarinToplami=sayilarinCarpimi/7;
          for(int i=2;i<sayilarinToplami-2;i+=2){
               for(int j=i;j<sayilarinToplami-2;j+=2){
                    for(int k=j;k<sayilarinToplami-2;k+=2){
                         if((i+j+k)*7==sayilarinCarpimi && (i*k*j)==sayilarinCarpimi){
                              System.out.println(i + " " + j + " " + k);
                              break;
                         }
                    }
               }
          }
          sayilarinCarpimi+=14;
     }

     long sonZaman=Calendar.getInstance().getTimeInMillis();
     long zamanFarki = sonZaman - ilkZaman;
     if(zamanFarki>1000){
          System.out.println((zamanFarki-zamanFarki%1000)/1000 + " saniye ve " + zamanFarki%1000 + "                                         milisaniye");
     }else{
          System.out.println(zamanFarki + " milisaniye");
     }
}
}




15 Ekim 2012 Pazartesi

window.open ve window.opener

Window.open ile bir sayfanın içinden diğer bir sayfayı açabiliriz.

var newWindow=window.open('deneme2.html');

daha sonra
newWindow.document.getElementById('') 
diyerek açtığımız sayfadaki istediğimiz bir htmlelement e müdahale edip sayfanın içeriğini ana sayfadan değiştirebiliriz. Anasayfadan 2. açılan sayfaya ulaşım bu şekilde sağlanabilir.

2. sayfadan anasayfaya ulaşım ise opener kullanılarak yapılır.

window.opener.document.getElementById('') 

diyerekten 2. sayfadan anasayfaya ulaşabilir ve içeriğini değiştirebiliriz. Ayrıca anasayfada tanımlanmış herşeye de ulaşabiliriz. window.opener bize anasayfanın window elementini döndürür. Yani anasayfanın tüm özellikleri elimizdedir.

Dikkat edilmesi gereken bir konu olarak sayfaların 2 si de en azından http protokolü kullanıyor olmalıdır.
Eğer protokol yoksa sayfalar arası erişime izin verilmez.

Aşağıdaki örneklerde deneme1.html anasayfa, deneme2.html de açılan sayfadır.

//deneme1.html

<!DOCTYPE html>
<html>
<body>

<h1>My First Heading</h1>

<p>My first paragraph.</p>

<button type="button" onclick="denemeFunction1();">Click Me!</button>
</body>
</html>
<script>
var denemeVar = 12345;
function denemeFunction1(){
var newWindow=window.open('deneme2.html');
window.top.deneme1=1;
window.top.deneme2=2;
window.top.deneme3=3;
window.top.deneme4=4;
window.top.deneme5=5;
window.top.deneme6=6;
}
</script>


//deneme2.html

<!DOCTYPE html>
<html>
<body>

<h1>My First Heading</h1>

<p>My first paragraph.</p>

<button type="button" onclick="denemeFunction2();">Click Me!</button>
</body>
</html>
<script>
function denemeFunction2(){
var i=0;
for(var j=0;j<15;j++){
j++;
}
alert(window.opener.denemeVar);
alert(window.opener.top.deneme3);
}
</script>

4 Ekim 2012 Perşembe

java android mevcut session kaybetme

Bir android uygulamasında login olduktan sonra mevcut oturum bilgileriniz kullanarak bir servisten veri çekmek isteyebilirsiniz. Bunun içinde defaulthttpclient ve httppost ve httpresponse nesnelerini kullanabiliriz. Fakat veriyi çekerken defaulthttpclient i new lersek mevcut session ı kaybedip yeni bir session açmış oluruz ve karşıdaki servis bize login olmamış yabancı bir kişi muamelesi yaparak ya hata döndürür ya da login page i döndürür.

Bu gibi durumlarda defaulthttpclient i new lememeliyiz.


Defaulthttpclient i her zaman saklamalıyız ve ona olan referansı kaybetmemeliyiz. Bu duruma sağlayabilmek için aşağıdaki bloka sahip bir sınıf kullanabiliriz.


private CookieStore androidCookie= null;
private Object androidLock = new Object();
/**
 *Bu method mevcut cookiestore yi kullanarak yeni bir httpclient yaratır.
 *Bu şekilde mevcut session ı da almış oluruz.
 * @author Murat GUZEL
 */
private HttpClient getHttpClient() {
        final DefaultHttpClient httpClient = new DefaultHttpClient();
        synchronized (androidLock) {                
        if (androidCookie== null) { 
        androidCookie= httpClient.getCookieStore();                
        } else {
              httpClient.setCookieStore(androidCookie);               
        }
  }
  return httpClient;
}
Bu sınıfı uygulamanın heryerinde kullanabilirsiniz.

3 Ekim 2012 Çarşamba

Java JFileChooser dosya açma ve kaydetme mantığı.

http://yazilimsozluk.com/Default.aspx?KonuId=1674 da bir soruya cevap olarak benim tarafımdan yazılmıştır.


Dostum şimdi o olay şöyle. Şimdi adam menübar ı açtı. Aç a bastı. Bir path e ilerledi bir dosya seçti ve open a bastı. Sen burada getSelectedFile diyip adamın seçtiği dosyayının referansını alman lazım.
Bu dosya ne dosyası ise istersen bu dosyayı okuyup adama içeriğini gösterip üstünde değişiklik te yaptırabilirsin, neyse.
Şimdi bu dosyayı başka bir yere kayıt ediceksin diyelim. Senin yine filechooser ın showSaveDialog unu kullanman lazım. Onu açıcaksın adam bir path seçicek, aşağıdan dosyanın ismini girecek ve kaydet e basıcak.
Kaydet e bastığında senin daha önce açılmış dosyayı byte byte okuyup adamın seçtiği yere yazman lazım.
Okuyup yazarken fileinputstream,fileoutputstream kullanabilirsin. Ya da fileutils gibi bir kütüphane nin copy metodunu da kulanabilirsin ya da channel acıp yollayabilirsin.
Biraz da kodda anlatmaya çalışayım.

Şimdi adam menübar dan aç a bastığında

//frmDosyaAcKaydet JFileChooser tipinde.
frmDosyaAcKaydet.showSOpenDialog(anaFrame);

diyip açtın dosya açma kısmını. Adam seçti dosyayı. Dosyayı seçtiği anda senin şöyle bir kod çalıştırman lazım.

//Kullanıcının seçtiği dosya. io kütüphanesinin File tipinde dönen bir değer
//frmDosyaAcKaydet JFileChooser tipinde.
acilanDosya = frmDosyaAcKaydet.getSelectedFile();

şimdi bu değeri bir yerde tuttun. Adamın seçtiği dosyaya bir referansın var artık.

Daha sonra adam menubar dan kaydet e bastığında senin

//frmDosyaAcKaydet JFileChooser tipinde.
frmDosyaAcKaydet.showSaveDialog(anaFrame);

gibi bir kod çalıştırman lazım. Bu şekilde istediğin gibi bir kaydetme frame i açılmış olacak. Adam sonra gitti bir path e dosya adını girdi ve kaydet butonuna bastı. Çalışacak kod şöyle birşey olmalı.

//frmDosyaAcKaydet JFileChooser tipinde.
//Kullanıcının kaydetmek için seçtiği path ve dosya adı. io kütüphanesinin File tipinde dönen bir değer
File kaydedilecekDosya = frmDosyaAcKaydet.getSelectedFile();
  //Dosya yazmak için output stream açıyoruz
  OutputStream st = null;
  try {
   st = new FileOutputStream(kaydedilecekDosya);
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  }
  //Byte array tanımlıyoruz. Buradan dosyayı okuyup outputstream vasıtasıyla yeni yere yazıcaz.
  byte[] buffer=new byte[1024];
  int okunanByte=0;
  //Dosyayı burada 1024 lük bloklar halinde okuyup yeni
  //path ine yazıyoruz.
  try {
   while ((okunanByte=acilanDosya.read(buffer))>0){
    try {
     st.write(buffer,0,okunanByte);
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  } catch (IOException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }
  try {
   st.flush();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  try {
   acilanDosya.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  try {
   st.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

  Böylece dosyayı yeni yerine yazmış oluruz. Bu okuma ile yazma arasında geçen sürede dosya üzerinde istediğin
  değişiklikleri yapıp o şekilde de yazabilirsin. Mesela bir text dosyasıysa dosyayı açarsın stringbuffer a alıp
  kullanıcıya gösterirsin üstünde değişiklikler yapar kullanıcı daha sonra da değişiklikyapılandosya.getBytes();
  ı alıp fileoutputstream in write metodunu kullanarak yeni yerine yazabilirsin.

  Benden bu kadar :-) . Umarım işine yarar dostum. Takıldığın ya da anlamadığın birşey olursa
  yardımcı olmaya çalışırım yine. Kolay gelsin.

22 Eylül 2012 Cumartesi

Hudson ve Sonar (Continuous Integration Softwares)

http://yazilimsozluk.com/Default.aspx?KonuId=1579 da bir soruya cevap olarak benim tarafımdan yazılmıştır.


•Bir senaryo üzerinden açıklamaya çalışayım.
Hudson ile başlayayım. Mesela ortada bir tane web projesi var. Büyük bir proje yaklaşık 9 kişi gerçekliyor olsun. Proje elemanları arasındaki hiyerarşik düzen de 1 üst yönetici, 1 takım lideri, onun altında 2 tane tecrübeli eleman, bunun altında da 5 tane junior çalışan olsun. Bunlardan 3 ü client side ta 2 si de server side da çalışıyor olsun. Proje için bir ant task hazırlanmış olsun ve herkes kendi serverına ayrı ayrı deploy ederek çalıştırıyor olsun. Bir tane de test server ı olsun ara ara projenin son halinin buraya deploy edilmesi şart olsun. Şimdi hudson dediğimiz amcaya bir ant task vasıtasıyla bu projenin kurulumunu yaparsın. Projede çalışan elemanları tanıtırsın. Hudson amcam senin belirlediğin zamanlarda(svn e her committe,günlük,haftalık,aylık istediğin periodlarda) bu projeyi svn den çeker, kullandığın ant task ı çalıştırır, projeyi derler, testleri çalıştırır, war haline getirir,server a deploy eder ve kodları sonar a atar(sonar ı aşağıda açıklayacağım). Böylece kodun istediğin zamanlarda en güncel hali server da bulunmuş olur. Diyelim ki birisinin commit tinden sonra kod düzgün çalışmamaya başladı, server a deploy edilemedi ya da testlerden biri patladı. Hudson amcam gider bu developer arkadaşa mail atar. Der ki bak senin şu commmit tinden sonra şu kodlar patladı ya da şu test patladı diye. Ne olur başka birinin ruhu bile duymadan developer o hatayı düzeltebilir. Hatta bir ws aracılığıyla cep telefonuna mesaj bile attırtabilirsin(Henüz denemedim). Ayrıca durumdan yöneticiyi takım liderini ya da her kimi istiyorsan onları da haberdar edebilir. Herşey configurasyona kalmış. Bence yazılım geliştirmede inanılmaz faydalar sağlayan bir amcamızdır.

Gelelim sonar a. Yukarıda bir bölümde dedik ki hudson herşeyi yapar kodları sonar a paslar. Sonar ne yapar? Sonar da alır bu kodları analiz eder. Der ki arkadaş bak senin projende 60000 satır kod var bu kodun şu kadarında comment var, bu kadarında yalnış yazımlar var ,şuralarda türkçe karakter kullanmışsın, buralarda treadsafe olmayan bir operasyon var , bak şu metodunun complexity si fazla bak bu metodda çok fazla satır var, bak arkadaş sen if açmışsın ama içini doldurmamışsın bunu niye açtın, bak burda bir for var boşu boşuna dönüyor bu nedir, arkadaş şu metoda niye bu kadar az comment yazdın ve daha sayamıycağım bir çok noktada developerları uyarıyor ve kod kalitesini inanılmaz ölçüde arttırıyor.
Yani bu 2 yazılımı kullanarak verdiği uyarıları kulak arkası yapmayıp uygun şekilde şekillenirse proje, ileriki zamanlarda bakım işleri de çok kolaylaşıyor ve sağlam bir proje olmak için bir adam öne çıkıyor.

Elimden geldiğince anlatmaya çalıştım. Herkese kolay gelsin..

16 Eylül 2012 Pazar

StringBuilder vs String +=


package deneme;

import java.util.Calendar;

package deneme;

import java.util.Calendar;



/**
 *
 *
 *
 * @author Murat Güzel
 *
 * StringBuilder vs String += operand
 *
 */
public class Deneme {

public static void main(String[] args) {
Calendar calendar1 = Calendar.getInstance();    //1
String s = "";
for (int i = 0; i < 50000; i++) {
s += "asdasd";
}
Calendar calendar2 = Calendar.getInstance();    //2
System.out.println("String += : " + (calendar2.getTimeInMillis()
- calendar1.getTimeInMillis()));

Calendar calendar3 = Calendar.getInstance();
StringBuilder ss = new StringBuilder();
for (int i = 0; i < 50000; i++) {
ss.append("asdase");
}
Calendar calendar4 = Calendar.getInstance();    //3
System.out.println("StringBuilder.append : " + (calendar4.getTimeInMillis()
- calendar3.getTimeInMillis()));
}

}


Output :

String += : 4454
StringBuilder.append : 1

MemoryKullanımı : 
//1 de ki konumlandırılan breakpointte jawaw.exe memory kullanımı 6000K
//2 de ki konumlandırılan breakpointte jawaw.exe memory kullanımı 22576K
//3 de ki konumlandırılan breakpointte jawaw.exe memory kullanımı 22900K


Görüldüğü gibi bu işlem StringBuilder ile çok kısa bir zamanda ve çok daha az memory kullanılarak yapılmaktadır. Bu da bir projede çokça yapılan string operasyonlarında 2 teknik arasında büyük bir fark açığa çıkmasına neden olur.

Web projelerinde string operasyonları

     Mesela diyelim ki bir web projeniz var ve proje bolca string operasyonu yapıyor. Bazı veriler alıyor onları birleştiriyor, parçalıyor ve output olarak ta bir text file oluşturuyor.

     String operasyonları yaparken += operatörünü kullanmaktan kaçınmamız gerekiyor elden geldiğince. Özellikle de döngülerin içinde. Çünkü bu işlem inanılmaz memory yiyor ve cpu yu çok yoruyor. Bunun yerine StringBuilder vb birşey kullanmamız gerekiyor.

     Javadan örnek vermek gerekirse bu yapıya alternatif olarak StringBuilder ve StringBuffer ımız var. Bunların birbirlerinden farkı StringBuilder ın synchronized metodu yoktur yani ThreadSafe değildir. StringBuffer ın ise hemen bütün metodları synchronized tır.Diyelim ki global bir string üzerinde değişiklikler yapıcaksınız, sessionların verileri birbirine karışmaması için StringBuffer kullanmalısınız. Eğer metod içi işlemler varsa StringBuilder işinizi görücektir.Gereksiz yerde StringBuffer kullanımı sistemi inanılmaz yavaşlatır.Tüm metodları synchronized olduğu için bir nevi lock unlock mekanızması vardır ve metodlar üzerinden tek threadden fazlası dolaşamaz.

 Yani kısaca ;

 String s = "";
 for(int i=0;i<100;i++){
    s+="asdasdasd";
}

yerine ;


StringBuilder s = new StringBuilder();
 for(int i=0;i<100;i++){
    s.append("asdasdasd");
}

kullanılmalıdır. Eger bu işlemi bir test ortamında 1000000 kere döndürüp memory ve zaman sonuçlarını karşılaştırırsanız farkı kolaylıkla görebilirsiniz.



8 Ağustos 2012 Çarşamba

mysql tekrarlı kayıtları silme

ben bu şekilde yapıyorum tabloda çok fazla data yoksa. 
CREATE TABLE tekrarlıKayıtlarıSilinmisTablo AS SELECT DISTINCT * FROM asilTablo
verilerin düzgünlüğünden emin isen asilTabloyu silip , tekrarlıKayıtlarıSilinmisTablo adını istediğin gibi değiştirebilirsin.

Yeni tablo create etmek istemiyorsanız

delete from asilTablo where id in (select    geciciTablo .id  from (select asilTablo .id  from asilTablo   where asilTablo .id not in (select asilTablo .id  from asilTablo  group by asilTablo .id  )) as geciciTablo);

gibi birşey işinizi görebilir sanırsam.

5 Ağustos 2012 Pazar

Java email gönderme



package main;

/**
 * @author Murat GUZEL
 * Java ile email yollamaya yarayan classtır.
 * mail.jar ve activation.jar a bağımlılığı vardır.
 *
 */
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Sender {
public static void main(String [] args)
{
/**
* Oncelikle email in yollanacağı adresin
* bilgilerini giriyoruz.
*
*/
String hostAdresi = "smtp.gmail.com";
String gonderimAdresi = "abcdef@gmail.com";
String gonderimAdresiSifresi = "abcdef";
Properties sistemProp = System.getProperties();
sistemProp.put("mail.smtp.starttls.enable", "true");
sistemProp.put("mail.smtp.host", hostAdresi);
sistemProp.put("mail.smtp.user", gonderimAdresi);
sistemProp.put("mail.smtp.password", gonderimAdresiSifresi);
sistemProp.put("mail.smtp.port", "587");
sistemProp.put("mail.smtp.auth", "true");

/**
* Gonderilecek adresileri set ediyoruz.
*
*/
String[] gonderilecekAdresler = {"abcdeff@hotmail.com","defghs@gmail.com"};

Session session = Session.getDefaultInstance(sistemProp, null);
MimeMessage gonderilecekMesaj = new MimeMessage(session);
/**
* yollayıcı adresimize bağlantı tanımlıyoruz.
*
*/
try {
gonderilecekMesaj.setFrom(new InternetAddress(gonderimAdresi));
} catch (AddressException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
} catch (MessagingException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
}

InternetAddress[] gonderilecekEmailAdresleri = new InternetAddress[gonderilecekAdresler.length];

/**
* Gonderilecek adresleri string array den
* internet adreslerine dönüştürüyoruz.
*
*/
for( int i=0; i < gonderilecekAdresler.length; i++ ) { // changed from a while loop
try {
gonderilecekEmailAdresleri[i] = new InternetAddress(gonderilecekAdresler[i]);
} catch (AddressException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* tanımladığımız bağlantıya gönderilecek adresleri
* ekliyoruz.
*
*/
for( int i=0; i < gonderilecekEmailAdresleri.length; i++) { // changed from a while loop
try {
gonderilecekMesaj.addRecipient(Message.RecipientType.TO, gonderilecekEmailAdresleri[i]);
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
gonderilecekMesaj.setSubject("E-mail deneme.");
} catch (MessagingException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
/**
* Mesajı set ediyoruz.
*
*/
try {
gonderilecekMesaj.setText("Burası mesaj bölümüdür.");
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Transport transport = null;
try {
transport = session.getTransport("smtp");
} catch (NoSuchProviderException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
/**
* connection açıyoruz.
*
*/
try {
transport.connect(hostAdresi, gonderimAdresi, gonderimAdresiSifresi);
} catch (MessagingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
/**
* mesajı yolluyoruz.
*
*/
try {
transport.sendMessage(gonderilecekMesaj, gonderilecekMesaj.getAllRecipients());
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

/**
*
* connection kapatıyoruz.
*/
try {
transport.close();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


8 Haziran 2012 Cuma

ant task java version hatası

Eclipse üzerinde çalışan anttask ın istediği java versiyonuna ulaşamadığı için bu hata ortaya çıkmaktadır. Bunun  için çalıştırmak istediğiniz ant taska sağ tıklayıp, runas/externaltoolconfigurations,jre den  biraz eski bir java sürümünü buraya vererek problemi aşabilirrsiniz.Yalnız bendeki ant jarı java 7 ile çalışmadı, 1.6.29 ile çalıştırıyorum.Biraz eski bir java versiyonunuz bir köşede bulunsa sizin iiçin faydalı olur.