24 Şubat 2013 Pazar

Java Adaptör Tasarım Deseni Örneği

Date(tarih) değerini göndererek bize formatını getiren Adapter tasarım deseni örneğini yapacağız.
Bu örnekte Date değerinin Web Servis,Veritabanı vb. yoluyla gelen bir değer olarak düşünebiliriz.
Gelen date değerinin formatı elde edebiliriz.

Nesnelerimiz SimpleDateFormat nesnelerinin aldığı constructor parametresiyle oluşturduk.
Örneğin
-1.nesne dd.MM.yyyy parametreli
-2.nesne dd/MM/yyyy parametreli
-3.nesne dd:MM:yyyy parametreli

import java.util.Date;
import java.text.SimpleDateFormat;


class DateFormatAdapter{
private SimpleDateFormat dt=null;
private String format1="dd.MM.yyyy";
private String format2="dd/MM/yyyy";
private String format3="dd:MM:yyyy";
public String getFormat(Date d){
try {
dt=new SimpleDateFormat(format1);
dt.format(d);
return format1;
} catch (Exception e) {
try {
dt=new SimpleDateFormat(format2);
dt.format(d);
return format2;
} catch (Exception e2) {
try {
dt=new SimpleDateFormat(format3);
dt.format(d);
return format3;
} catch (Exception e3) {
return "";
}
}
}
}
}


Adapter nesnemizin testi aşağıdaki gibidir.

import java.util.Date;
import java.text.SimpleDateFormat;

public class TestClass {
public static void main(String[] args) throws Exception{
DateFormatAdapter adapter=new DateFormatAdapter();

Date d=new Date(); //Tarihi elle tanımladığımızda varsayılan formatı ekranı yazdıracaktır.
  //Format dd.MM.yyyy olacaktır.
System.out.println(adapter.getFormat(d));
}
}

21 Şubat 2013 Perşembe

Oracle tablo döndüren fonksiyon

Aşağıdaki adımları sırayla uygulayacağız.


1.Oracle Type oluşturma
create or replace type ornekType as object (
i number,
n varchar2(30)
);

2.Oracle Nested Type oluşturma
create or replace type Ornek_nested_table as table of ornekType;
3.Fonksiyon oluşturma
create or replace function ornekFonksiyon return Ornek_nested_table as
  temp_tab   Ornek_nested_table;
begin
  temp_tab:= Ornek_nested_table();
  temp_tab.extend;
  temp_tab (temp_tab.count) := ornekType(1, 'Ahmet');
  temp_tab.extend;
  temp_tab (temp_tab.count) := ornekType(2, 'Ayşe');
  temp_tab.extend;
  temp_tab (temp_tab.count) := ornekType(3, 'Hasan');
  return temp_tab;
end ornekFonksiyon;
4.Oluşturulan tabloyu sql içerisinde kullanmak
select * from table(ornekFonksiyon);
sql sonucu
1 Ahmet
2 Ayşe
3 Hasan



Fonksiyonun parametreli hali.Fonksiyona kaydın id’si parametre ile verilerek kaydın getirilmesi
create or replace function ornekFonksiyon2(
  personel_id in number
)
return Ornek_nested_table as
  temp_tab Ornek_nested_table;
begin
  select 
  cast(
  multiset(
    select 
      id, name
    from 
      personel
    where id= personel_id)
    into
      temp_tab
    from 
      dual;
  return temp_tab;
  
end ornekFonksiyon2;
Sql'i bu şekilde olur.Sonucu "1 Ahmet"
select * from table(ornekFonksiyon2(1));

15 Şubat 2013 Cuma

Veritabanından Blob veya Clob Veri Türlerini Java ile okutmak

Veritabanınlarıda veri tipi Blob veya Clob olan

datayı aşağıdaki metodlara parametre olarak

gönderip Metin olarak elde edebiliriz.

Clob için
----------------------------------------------------------------
public String readClob(Clob data) throws Exception
{
StringBuilder sb = new StringBuilder();
try {
Reader reader = data.getCharacterStream();
BufferedReader br = new BufferedReader(reader);

String line;
while(null != (line = br.readLine())) {
sb.append(line);
}
br.close();
} catch (SQLException e) {
// handle this exception
} catch (IOException e) {
// handle this exception
}
return sb.toString();
}


Blob için
----------------------------------------------------------------


public String readBlob(Object clob1) throws Exception
{
Blob clob=(Blob) clob1;
InputStream is = clob.getBinaryStream();
StringBuffer sb = new StringBuffer();

int readedBytes;
int bufferSize = 4096;

do {
byte[] bytes = new byte[bufferSize];

readedBytes = is.read(bytes);

if (readedBytes > 0) {
String readed = new String(bytes, 0, readedBytes, "UTF-16");
sb.append(readed);
}
} while (readedBytes == bufferSize);

is.close();
return sb.toString();
}

13 Şubat 2013 Çarşamba

Oracle sql sorgusunu xml e çevirmek

Veritabanı tablolarımızda bazen hiyerarşik veriye ihtiyaç duyarız.
Aşağıda daha önce verdiğim bir örnek üzerinde gidelim.
----------------------------------
Örnek Tablo=Personel
tablo sütunları sırasıyla
Personel_id,Personel_adi,Bagli_Personel_id

Veriler
-------------------------------------------------------------
0 'Üst personel' -1
1 'Murat' 0
2 'Ahmet' 1
3 'Mehmet' 1
4 'Duygu' 1
5 'Ayşe' 4
6 'Ali' 4


Bu tablodan da gördüğümüz gibi Murat personeline bağlı 3 personel var.Bu 3 personelden Duygu ya bağlı 2 personel var.Bu bilgileri hiyerarşik olarak getirmek
istiyorsanız aşağıdaki oracle sql yazıyoruz.

select Personel_adi
from personel start with personel_id=1
connect by prior personel_id=Bagli_Personel_id

Sqlden gelen sonucu xml le çevirmek istiyorsak aşağıdaki gibi yazabilirsiniz.

select xmlelement("PERSONEL_LISTESI",
(select dbms_xmlgen.getxmltype(dbms_xmlgen.newcontextFromHierarchy('
select LEVEL,xmlelement("Personel_adi",xmlelement("Personel_adi",Personel_adi ))
from personel start with personel_id=1
connect by prior personel_id=Bagli_Personel_id
order siblings by Personel_adi
'))
from dual)
) xmldoc
from dual

10 Şubat 2013 Pazar

Java Tabanlı Web Uygulamaların Genel Mantığı

Java Tabanlı Web Uygulamaların Genel Mantığı
Java web uygulamalarında genel olarak 2 dizin mevcuttur.
Dizinler
*.Src
*.WebContent
1.Src dizininde java kaynak kodları bulunmaktadır. Bu dizinde yazılan kodlar mevcuttur.
Dilerseniz dizin altında farklı dizinler oluşturabilirsiniz. Farklı dizinler projenin kaynak kodlarının düzenli olmasını sağlar.
2. WebContent dizini sunucu tarafında çalışan kısımdır. Bu dizin altında standard olarak WEB-INF dizini mevcuttur. WEB-INF dizini altında sabit olarak oluşan dizinler ve dosyalar mevcuttur.
-classes dizini
Src dizini altında yazdığınız kodların derlenmiş dosyaları oluşur.Yani uzantısı java olan her sınıfın
bu dizin altında class uzantısı oluşur. Src dizini altında yazdığınız kodların derlenmiş kodları oluşmamış ise programı oluşturduğunuz ortamda derlemeniz gerekmektedir.Örneğin Eclipse ortamında Project—>Build All şeklinde yapabilirsiniz.
-lib dizini
Bu dizin altında farklı frameworkler(Spring vb.) kullanmış veya 3.parti uygulama kullanıyor iseniz kütüphanelerini burada tutabilirsiniz. Kütüphaneler jar uzantılıdır. Uygulama ile gelen kütüphaneler mevcuttur ve bu kütüphanelerin jar dosyalarını bulundurmanız gerekmeyebilir.Ör:jre
-web.xml dizini
Java web uygulamalarında olması gereken bir dosyadır. Sunucu uygulamalarınızı çalıştırdığında bu kısımdaki adımları çalıştırır.
Bu dosya içeriğinde genel olarak aşağıdaki aşamalar mevcuttur.
**Servletler
**Welcome page (Açılacak ilk sayfayı belirtiyorsunuz)
**Context içerik(Sunucu ile başlaması gereken java nesnelerinin konfigürasyonu yapar.)
**Filter içerik(Servletlerin filtrelemesini sağlar.Örneğin login olmamış kullanıcının belli dosyalara erişmesine izin verilmesi)
**Listener içerik (Sayfanızı dinler.Örneğin oturum düşmüşse başka sayfa yönlendir.)
**Servletlerin destekleği uzantılar.(Servlet Mapping Ör: .html,.jsp vb.)
**Servletlerin destekleyebileceği uzantılar.(Mime Mapping Örneğin uzantısı doc dosyaları indirmek)
Java tabanlı Web uygulamaların içeriği genel olarak bu şekildedir. İyi günler dilerim.

22 Ağustos 2012 Çarşamba

ZK FRAMEWORK ILE SUNUCUYA  DOSYA YÜKLEME (FILE UPLOAD TO SERVER WITH ZK FRAMEWORK)

Merhaba arkadaşlar.
Ftp kullanmadan sunucuya dosya yükleme yapacağız.
Kullanılan web framework   =Zk Framework
Kullanılan Programlama dili = Java
2 tane kod parçası işimisi görecektir.
Zk
<?xml version="1.0" encoding="UTF-8"?>
<zk xmlns="http://www.zkoss.org/2005/zul" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd">
       <window id="dosyayukleme" use="DosyaYukleme"
             border="none" height="100%" width="100%"  >
                                                  
             <hbox>
                    <button id="upload" label="Dosya Ekle" onClick="dosyayukleme.upload()"
                           upload="true"
                           style="background-color:#f3f3f3">
                    </button>
                   
              </hbox>     
       </window>
</zk>
Java
public class DosyaYukleme extends Window {
       private int sayac=0; //Bu değişkeni oluşturmamızın nedeni bir dosyayı 2 yuklenmesini engellemektir.
      
       public void upload() throws Exception {
            
             Button upload = (Button) getFellowIfAny("upload");
            
             upload.addEventListener("onUpload", new EventListener() {
                   
                    public void onEvent(Event event) throws Exception {
                           w.setSayac(w.getSayac()+1);
                           ServletContext context = (ServletContext) Executions
                                        .getCurrent().getDesktop().getWebApp()
                                        .getNativeContext();
                           String prefix = context.getRealPath("/");
                           String path = prefix + "\\documents\\";
                          
                           Media media = ((UploadEvent) event).getMedia();
                           try {
                                  Files.copy(new File(path +media.getName()),media.getStreamData());
                           } catch (Exception e) {
                                  try {
                                        Files.copy(new File(path + media.getName()),null, media.getStringData());
                                  } catch (Exception e2) {
                                        if(w.getSayac()<2){
                                               File f=new File(path+media.getName());
                                               f.delete();
                                               Messagebox.show("Yükleme Başarısız");
                                               w.setSayac(2);
                                        }
                                       
                                  }
                                 
                           }
                          
                          
                    }
             });
            
             w.setSayac(0);
       }
       public int getSayac() {
             return sayac;
       }
       public void setSayac(int sayac) {
             this.sayac = sayac;
       }
}

2 Haziran 2012 Cumartesi

Tomcat sunucularda context root ayarı

Merhaba arkadaşlar. Apache Tomcat yuklendikten sonra bilgisayarınızın bir dizinine kaydediyorsunuz.
Tomcat portu 8080 dir.Dilerseniz degistirebilirsiniz.
Tomcat çalıştırdıktan sonra "http://localhost:8080" adresinden tomcat portalı acılacaktır.
Şimdi bir örnek üzerinde işlemi gerçekleştirelim.Uygulamamızın adı DENEME olsun.Ve bu web uygulamasınız çıktısını(war dosyası)
Tomcat dizini altında webapps klasörü altına kopyalıyorsunuz.Uygulamaya erişmek için bu sefer yazacaığımız adres
"http://localhost:8080/DENEME" olacaktır. Bizim burda istediğimiz durum "http://localhost:8080" adresinden kendi uygulamamızın çalışmasını sağlamak.
Yani uygulama adresi sonundaki 'DENEME'
yazısını kaldırmaktır.
Aşağıdaki gibi gerçekleştiriyoruz.
Tomcat dizini altında conf/server.xml dosyasını not defteriyle açın. < Host > taglarini buluyorsunuz.
Genelde dosyanın aşağıda kısımlarında oluyor.
" < Host > " taglarinin arasına aşağıdaki komutu yazmanız yeterli olacaktır.
< Context docBase="DENEME" path="" / >
Böylece uygulamanıza sadece ip ve port yazarak acabilirsiniz. (http://localhost:8080)