Giriş

 

Up

 

Bu griş bölümünde, önce kitabımızın kısa tarihçesi sunulacaktır. Daha sonra kitabın yapısı tanıtılacak ve kitaptaki konular özetlenecektir. En son olarak kitabın Internet desteği hakkında bilgi verilecektir.

Halûk Gümüşkaya’nın Gözüyle Kitabın Tarihçesi

Bu kitabın ortaya çıkması, 1997 yılının Mayıs ayının sonunda Uludağ Üniversitesi Elektronik Mühendisliği Bölümü’nden ayrılıp Gebze’deki TÜBİTAK-Ulusal Elektronik ve Kriptoloji Araştırma Enstitüsünde (UEKAE) Uzman Araştırmacı olarak göreve başladığım tarih ile başlamaktadır. Yeni görevimde benden istenen, Türkiye’yi kapsayan özel bir geniş alan ağında çalışacak bir ağ yazılımı için bir yazılım grubu oluşturmamdı. PC/Windows ve Sun Ultra/Solaris-UNIX gibi farklı bilgisayarlar ve platformlarda, grafik kullanıcı arabirimi ve bilgisayarlar arası haberleşmeyi sağlamamız ilk isteklerdi. Yazılımların diğer önemli bir temel özelliği, eşzamanlı (concurrent) çalışacak ve onlar, belki yüzler mertebesinde işi ele alabilecek sunucu yapılarını içermesiydi. Sistem nesneye yönelik bir mimari ile tasarlanmalıydı. Yazılım en üst düzeyde güvenlik yapılarına sahip olacaktı. Yazılımların önemli bir kısmı platform bağımlı olmamalıydı, yani PC’lerde geliştirilen ve çalışan programlar Sun Ultra makinelerinde de çalışabilmeliydi.

Bu temel gereklerle 1997 Haziran ayında UEKAE’de yoğun olarak çalışmalarıma ve araştırmalarıma başladım. UNIX altında o zamanki yaygın olan C/C++ dilleri, geliştirme ortamları ve mevcut insan gücümüz ile bu işin ne kadar zor olduğunu biliyordum. Yeni teknoloji arayışlarına başladım. Dünyada 1995’te duyurulan bir Java rüzgarı esmeye başlamıştı. Java konusunda yaptığım araştırmalarımla ve yazdığım basit soket tabanlı ağ programları sayesinde Java ile bu büyük projenin altından kalkabileceğimize çok güçlü olarak inandım. Sun firmasının tanımına göre Java “basit, nesne-yönelimli, sağlam, güvenli, mimari-bağımsız ve taşınabilir, yüksek-performanslı, yorumlanan, çok-thread’li ve dinamik” bir dildi ve projemizde bir enterprise ağ yazılımı için istenen bütün en temel gerekleri sağlamaktaydı. Java “basit” olduğu için çok uzmanlık da gerektirmiyordu. Programcıdan birçok ayrıntıyı gizliyordu. Bilgisayar mühendisliği eğitimi almamış elektronik mühendisleri veya başka dallardaki mühendislerle bile ciddi ağ yazılımlarını hızlı ve güvenli olarak geliştirmek mümkün idi. Başladığımızda proje grubumuzda tek bir bilgisayar mühendisi yoktu. Uludağ Üniversitesi Elektronik Mühendisliğinden yeni mezun kabiliyetli 3 öğrencimle yola çıkmıştık. Daha sonra katılan ilk programcılar da elektronik temelliydi.

1997 yılının Temmuz ayında Java’yı projemizde kullanmaya karar vermiştim. Her yeniliğe ilk önceleri gelen tepki UEKAE’de Java’ya da geldi. Java için geliştirme ortamı yok, Java yavaş, Java … deniliyordu. Ama başta ben ve o zaman bana ve Java’ya inanan, ileriyi gören çok az sayıdaki programcı arkadaş, Java kararımızda ısrar ederek, Java’ya yapmış olduğumuz yatırımlara devam ettik. Çünkü o tarihte, yukarıda sayılan Java’nın temel özelliklerinden dolayı Java’nın parlak geleceğini görmüştük… UEKAE’deki son yılıma doğru UEKAE çalışanlarına dışarıdan getirilen bir eğitimciyle özel Java dersleri verildi ve onlarca programcı bu eğitime katıldı… Ben 2002 Temmuz’unda ayrılırken UEKAE’de birçok projede, özellikle ağ projelerinde, Java artık tartışmasız ve alternatifsiz tek seçim olarak kullanılıyordu… UEKAE’deki projelerimizde Java’nın yeni olması ve gelişmesinden dolayı sıkıntılar yaşamıştık ama genel olarak bakıldığında, büyük ve zor projelerimizi Java kolaylaştırmıştı.

UEKAE’deki projelerimizde Java’yı kullanmaya yönelik çalışmalarımın yanında, 1997 yılının Eylül ayında Marmara Üniversitesi Bilgisayar Mühendisliği Bölümü’nde Open Systems Networking adı altında, dışarıdan öğretim elemanı olarak, bir yüksek lisans dersi vermeye başladım. Dersi son sınıf öğrencileri de alıyordu ve derse ilgi çoktu. Dersin resmi olmayan adını Network Programming with Java olarak koymuştum. Marmara’da aynı adla 3 yıl o dersi verdim. Ayrıca bir dönem (1998, ilkbahar) Distributed Systems adındaki dersimde de Java’yı kullandım. Marmara’da yürütmüş olduğum bir yüksek lisans tezinde ve yaptırmış olduğum çeşitli lisans tezlerinde Java teknolojilerini kullandırdım. Üniversitedeki derslerim ve yaptırdığım öğrenci projelerim, UEKAE’deki projelerimin bazı kısımlarının alt yapılarını hazırladı. UEKAE ile Marmara Bilgisayar Mühendisliği Bölümü arasında güzel bir bağ oluşmuştu.

Java’yı UEKAE’deki projelerimde ve Marmara Bilgisayar Mühendisliği Bölümü’nde derslerimin yanında akademik çalışmalarımda da kullandım ve bu konuda 10 tane ulusal ve uluslararası konferansta sunulan çalışmamız oldu.

Java konusunda bir kitap yazma düşüncem 1997 yılında başlamıştı, ama Java özellikle o yıllarda çok süratli hareket eden bir hedefti (moving target), yani sürekli değişmekteydi ve büyümekteydi. Java bir dilin dışında bir platform, enterprise ve mobil cihazların da alt yapısı olduğu için çok değişik yönlerde gelişmekteydi. Hem bu konuda çok kitap yazılıyordu ve sayısız Internet kaynağı vardı. Bununla beraber kitaplar ve Internet kaynakları kısa sürede eskiyordu. Türkçe bir kitap yazmak, bir çok açıdan anlamlı ve cazip değildi ve ayrıca çok zorlukları da vardı. Bütün bunlara rağmen yaklaşık son 6 yılımda yaşadığım tecrübemi kitaplaştırmak ve bunları paylaşmak istiyordum. Java ile ağ programcılığı uzayına bir pusula mahiyetinde bir çalışma ile UEKAE’deki geçmişime ait önemli bir hatırayı vücuda getirmek istiyordum.

Bu isteğimin gerçekleşmesindeki ortağım, kitabın diğer yazarı Ömer Boyacı ile daha liseden başlayan irtibatım, biz farkında olmadan kitabın alt yapısını hazırlıyordu. Ömer, 1999 yılında Bursa Özel Nilüfer Fen Lisesi’ni bitirdikten sonra Bilkent Bilgisayar Mühendisliği’ni kazanmıştı. Bilkent ülkemizde Java’yı erken gören üniversitelerdendi ve Ömer daha birinci sınıftan itibaren Java’yı öğrenmeye başladı. Java, ağ programcılığı, bilgisayar ağları ve diğer konularda bana çeşitli sorular soruyordu. Bu şekilde sürekli e-posta ile irtibatımız devam ediyordu. Sonunda 2001 Ağustos’unda ortak kitap yazma işine karar verdik. Bu konudaki kitaplar genellikle birçok yazarla, 2, 3, 4 hatta 11 [Darby 2001 (D1.8)] kişilik bir takımla yazılabiliyordu. Çünkü çok geniş bir konu yelpazesinde (temel Java, bilgisayar ağları ve TCP/IP, temel Web kavramları, applet’ler, ağ yazılımları haberleşme modelleri, thread’ler, Java I/O, TCP/UDP soket programcılığı, JDBC, RMI, Servlet’ler/JSP ile Web programcılığı) yazıyorsunuz. Ben ve Ömer 11 kişi kuvvetinde, büyük bir sinerji ile çalışarak bu eseri ortaya çıkardık.

2002 Ağustos ayında Fatih Üniversitesi Bilgisayar Mühendisliği Bölümü’nde Doçent olarak göreve başladım ve sonbahar döneminde vermiş olduğum CENG 463 Network Programming ve CENG 217 Object Oriented Programming derslerinde Java’yı kullandım. 2003 bahar dönemindeki CENG 102 Computer Programming II dersinde temel Java’yı öğrettim ve CENG 302 Software Engineering dersinde de Java dersin programlama diliydi. Kitabımızın son çalışmalarını Nisan 2003’te tamamladık.

Özetle kitabımız aşağıda sıralananlar ile yaklaşık son 6 yılımın bir özeti olmuştur:

1.    TUBİTAK-UEKAE’deki 5 yıllık ağ projeleri tecrübem

2.    Marmara Üniversitesi Bilgisayar Mühendisliği Bölümü’nde 3 yıllık ders verme tecrübem

3.    Java temelli akademik araştırmalarım ve 10 tane konferans yayınım

4.    Fatih Üniversitesi Bilgisayar Mühendisliği Bölümü’ndeki tecrübem

Ömer Boyacı’nın Gözüyle Kitabın Tarihçesi

Öncelikle bu kitabı satın aldığınız için (eğer almadıysanız okuduğunuz için ;-) ) teşekkür ederim. Elinizde bulunan kitap çok dikkatli, titiz ve yorucu bir çalışmanın ürünüdür. Bu kitap projesine başladığımda ne kadar zor bir işe giriştiğimin farkında değildim. Kitapta bulunacak olan bölümlerin listesini hazırlamıştık ve bu bölümleri yazmak bana hiç de zor gibi görünmüyordu. Çünkü, bütün konuları biliyordum, daha doğrusu öyle zannediyordum. Bölümleri yazmaya başlayınca şunu gördüm, bir konuyu bilip uygulamak ile o konuyu anlatabilmek tamamen farklı iki olaymış. JSP’yi bilebilir ve JSP ile oldukça gelişmiş uygulamalar yazabilirsiniz ama JSP’yi anlatmaya kalktığınız zaman mesele tamamen değişiyor. Öncelikle, konuya tam olarak hakim olmanız, en küçük ayrıntıyı bile bilmeniz gerekiyor. Ayrıca, konuyu anlatırken basit fakat çarpıcı ve konunun özünü verebilen örnekler bulmanız gerekiyor. Burada şunu açıkça belirtmek istiyorum, Bilkent Bilgisayar Mühendisliği’nden mezun olabilmem için gereken bitirme projesini 2 günde yaptığım halde, bu kitaptaki bazı örnekleri bulmak için bir haftadan fazla düşündüm, araştırdım ve çeşitli denemeler yaptım.

Peki, niçin bu kadar zorluğa girdim. Bu kadar ciddi çalışmanın arkasında eski acı bir hatıra yatıyor. Lise birinci sınıfta programcılığa merak saldığım zaman bir Delphi kitabı almıştım ve heyecanla okumaya başlamıştım. Bilgisayar programcılığına ilk defa giren birisi için bilgisayara bir şeyler yaptırmak gerçekten son derece heyecan verici bir duyguydu. Ne var ki, iki yıl sonra Bilkent’e geldiğimde Java dilini öğrenmeye başladık ve ben birçok yabancı kaynak okudum. Bu okuduğum eserlerin ışığında lisede okuduğum Delphi kitabının ne kadar basit, uluslararası standart ve kaliteden yoksun, yanlışlarla dolu ve öğreticilikten uzak olduğunu fark ettim. Eğer benim elime lisede uluslararası kalite ve standartlarda bir kitap geçmiş olsaydı, yazılım tasarım ve geliştirme konusunda çok daha hızlı ilerleyebilecektim. Ben bu acı hatırayı hatırladıkça, kitabımızın kesinlikle ama kesinlikle dünyadaki benzerlerinden çok daha iyi, en azından onlar kadar kaliteli olması gerektiğine inanıyordum. Kısacası, bu kitaba çok emek sarf ettik ve ben şunu rahatlılıkla söyleyebilirim ki, bu kitap ele aldığı konuları doğru ve tam olarak anlatmaktadır. İnşallah, sizin de işinize yarayacak ve yeni konuları öğrenmenizde bir vesile olacaktır.

Bu kitabın ortaya çıkmasında emeğe geçen insanların hepsine teşekkürlerimi sunuyorum. Başta Halûk Hoca’ma, beni bu tür bir kitap projesine motive ettiği ve bu işi yapabileceğime yüreklendirdiği için teşekkür ederim. Daha sonra, kendilerinden ders aldığım Bilkent Üniversitesi öğretim üyelerinden Sayın Prof. Dr. Halil Altay Güvenir, Dr. Uğur Doğrusöz, Dr. Ali Aydın Selçuk, Dr. Bedir Tekinerdoğan, Dr. David Davenport, William Sawyer ve Prof. Dr. Özgür Ulusoy beylere teşekkürlerimi iletirim. Bu kitaptaki konuların bir kısmını yazarken derslerinden istifade ettiğim Dr. İbrahim Körpeoğlu beye (Computer Network Programming ve Mobile and Wireless Networking) ve Dr. Ezhan Karaşan beye (Computer Networks) de teşekkürlerimi sunarım. Ayrıca, Dr. Hakan Ferhatosmanoğlu beye 2002 yaz döneminde Ohio State Üniversitesinde veritabanı konusunda araştırmalar yapmama imkan sağladığı için teşekkür ederim.

Kitabın Yapısı ve Konular

Kitaptaki konular genel olarak 5 kısma ayrılmaktadır. Birinci kısımda (Bölüm 1 ile Bölüm 8 arasındaki 8 bölüm) Java ağ programcılığı için gereken temel konular sunulmaktadır. Bu konular, Java programlama dili, bilgisayar ağları ve TCP/IP, applet’ler, temel Web kavramları ve teknolojileri, ağ yazılımları haberleşme modelleri, Java thread’leri ve çok thread’li yazılım tasarımı ve Java stream’leridir.

İkinci kısımda (Bölüm 9 ile Bölüm 12 arasındaki 4 bölüm) Java ağ programlarının temel yapıları verilmektedir. İkinci kısmın başlangıcı olan Bölüm 9’da önce Java ağ paketi (java.net) ve yüksek seviyeli sınıflar ile ağ programcılığına bir giriş yapılmaktadır. Daha sonra TCP ve UDP soket programcılığı sunulmaktadır. TCP veya UPD soketleri bütün ağ programlarının kullandıkları en temel yapı bloklarıdır. İkinci kısımda son olarak Bölüm 12’de multicast haberleşme modeli ve multicast soketler sunulmaktadır.

Üçüncü kısımda (Bölüm 13 ile Bölüm 14 arasındaki 2 bölüm) Java ile üst seviyeli ağ programları yazmak için iki konu sunulmaktadır. Bölüm 13’te sunulan JDBC profesyonel programlarda bir veri tabanına bağlanmak ve işlemler yapmak için Java’nın sunmuş olduğu önemli bir teknolojidir. Soketler ile ağ programları yazmanın diğer önemli bir alternatifi olan RMI Bölüm 14’te anlatılmaktadır.

Dördüncü kısımda (Bölüm 15 ile Bölüm 17 arasındaki 3 bölüm) Java Web programcılığında kullanılan teknolojiler sunulmaktadır. Java ile Web programları geliştirmede günümüzde çok yaygın olarak kullanılan Servlet’ler ve JSP bu kısımda anlatılmaktadır.

Beşinci kısım olan Ekler’de, önce Ek A’da kısaca UML hakkında bilgi verilmektedir. Ek B’de kitaptaki semboller, Ek C’de Türkçe-İngilizce sözlük ve Ek D’de kaynaklar bulunmaktadır.

Bu kitaptaki ilk 8 bölüm, Java ve ağ programcılığı için temel giriş konularını içermektedir. Bu bölümlerde sunulan konular ve kavramlar Java ağ programcılığına başlamadan önce hakim olunması gerekmektedir. Bu temel konular öğrenildikten sonra Java ile ağ uygulamaları yazmak kolaylaşmaktadır. Bölüm 9’da Java ağ paketinin (java.net) tanıtılması ile Java ile TCP/IP protokolünü kullanan ve bir ağ (Internet, Intranet gibi) üzerinde çalışacak uygulamalar geliştirilmesi öğretilmeye başlanmaktadır.

Bu ilk bölümlerdeki konulara hakimiyet oranında daha kolay Java ağ uygulamaları geliştirilir. Bununla beraber bazı konularda sınırlı bilgi ile bile Java ağ uygulamaları yazmak mümkündür. Örneğin, sadece bir Web sunucusundaki bir HTTP prosesi ile iletişim kuracak Java applet’leri yazmak istersek, Bölüm 5’te kısaca sunulan ve daha sonra Bölüm 9’da ayrıntılı olarak anlatılan üst seviyeli bağlantı sağlayan URL ve URLConnection sınıflarını öğrenmek yeterli olacaktır. Ancak daha alt düzeyde bir iletişim yapmak istersek, Bölüm 10’da sunulan soket programcılığına yönelmek gerekecektir. Eğer dağıtık nesnelerden oluşan bir ağa sahip isek, Bölüm 14’te anlatılan RMI teknolojisini kullanmak daha iyi bir çözüm olacaktır.

Aşağıda kitaptaki bölümler kısaca özetlenmektedir.

KISIM 1: JAVA AĞ PROGRAMCILIĞININ TEMELLERİ

n     Bölüm 1, Java’ya Giriş’te, önce, Sun firmasının tanımına göre “basit, nesne-yönelimli, sağlam, güvenli, mimari-bağımsız ve taşınabilir, yüksek-performanslı, yorumlanan, çok-thread’li ve dinamik bir dil olan Java’nın bu özellikleri açıklanmaktadır. Daha sonra Web ve uygulama programlama dili olarak Java ele alınmaktadır. Ardından Java’ya elektronik cihazlar dili olarak bakılmaktadır. Son olarak Java’da gelişmekte olan yeni özelliklerden bazıları sunulmaktadır.

n       Bölüm 2, Java Programlama Dili’nde, Java dilinin temel özellikleri özetlenmektedir. Java programlama dilinin, ağ programcılığı için gereken konularından önemli bir bölümü kitabımızda anlatılmaktadır. Bununla beraber okuyucunun, bazı temel Java konularını başka kaynaklardan çok daha ayrıntılı olarak öğrenmesi gerekebilir. Bu bölümdeki konular: Derlenen, Yorumlanan Diller ve Java, Java ile Program Geliştirmeye Giriş, Temel Java Bileşenleri ve Java ile Nesne-Yönelimli Programcılık’tır.

n       Bölüm 3, Bilgisayar Ağları ve TCP/IP’de, Java’nın ağ programcılığı için sunmuş olduğu yapıları kullanmadan önce, bilgisayar ağları konularına ve TPC/IP modelindeki kavramlara ve terminolojiye yakın olmakta, özellikle uzman ağ programcılığı açısından faydalar bulunmaktadır. Bölüm 3, bilgisayar ağları ve TCP/IP’nin temellerini ağ programcılarına kısaca sunmaktadır. Bu bölümdeki konular: Internet ve Bilgisayar Ağları, Protokol Katmanları ve Açık Sistem Mimarisi, Ağ Protokol Katmanları, TCP/IP Protokol Katmanları, Internet Protokol Adresi, Temel TCP/IP Protokolleri, Gelecek: IPv6, RFC Dokümanları.

n       Bölüm 4, Temel Web Kavramları ve Teknolojileri’nde, Internet’i kullananların büyük bir kısmı çok teknik olmasa da birçok temel Web kavramlarını ve terminolojisi ile Java applet’lerini bilir. Bölüm 4’te, URL, Internet sunucuları ve istemcileri, HTTP, MIME, HTML, XML, CGI ve dinamik sunucu sayfaları gibi temel Web kavramları ve teknolojileri sunulmaktadır.

n       Bölüm 5, Applet’ler ile Ağ Programcılığına Giriş’te, Web sayfalarına, bir sunucudan küçük Java programcıkları olan applet’lerin nasıl yüklendiği, Web programcılığında applet’lerin yeri gibi Java applet’leri ile Java Web programcılığının ilk temel konusu anlatılmaktadır. Bölüm 16 ve Bölüm 17’de Servlet’ler ve JSP gibi daha yeni Java Web teknolojileri sunulmaktadır.

n       Bölüm 6, Ağ Yazılımları Haberleşme Modelleri, kitabın ileriki bölümlerinde ayrıntılı olarak Java program örnekleri ile anlatılan, ağ yazılımlarındaki temel haberleşme yapılarını ve yaygın haberleşme modellerini toplu olarak sunmaktadır. Günümüzde yaygın olarak kullanılan istemci/sunucu modelline bu bölümde bir giriş yapılmaktadır. Ayrıca Grup Multicast Haberleşme Modeli, P2P Haberleşme Modeli ve Gezgin Etmen Haberleşme Modeli gibi diğer modeller de sunulmaktadır. Ağ sistem geliştiricilerinin istemci/sunucu mimarilerinde yaygın olarak kullandıkları, iki katmanlı (two-tier) mimari, üç-katmanlı (three-tier) mimari ve çok-katmanlı (multi-tier) mimari yapılar tanıtılmaktadır.

n       Bölüm 7, Java Thread’leri ve Çok-Thread’li Yazılım Tasarımı, Java Thread’lerini ve çok-thread’li program geliştirmenin temellerini sunmaktadır. Günümüzde sunucular gibi birçok ağ uygulaması, eşzamanlı istekleri karşılayacak şekilde programlanmalıdır. Çünkü birçok istemci bir tek veya sınırlı protokol port’u üzerinden sunucularla haberleşir. Bu durumda sunucunun bu isteklere cevap verebilmesi için her bağlantı isteğine bir haberleşme kanalı açması, yani bir thread (veya proses) ataması gerekir. Bu yüzden dolayı ağ uygulamaları ve aynı zamanda birçok diğer günümüz uygulaması için, eşzamanlılığı doğru ve etkin olarak kullanmak çok önemlidir.

n       Bölüm 8, Ağ Programlarının Yapı Blokları: Java Stream’ler, TCP protokolünü kullanan ağ yazılımlarının yapı blokları olan ve java.io paketinde bulunan, Java giriş/çıkış stream’lerini tanıtmaktadır. Bir ağ yazılımında düşük seviyeli sınıflar kullanılarak oluşturulan bir ağ bağlantısında, iki bilgisayar veya thread arasında, java.io. InputStream, java.io.OutputStream veya bu sınıfların diğer alt sınıflarından oluşturulan Java giriş/çıkış nesneleri, iki uç nokta arasındaki veri iletişiminde kullanılır. Java I/O stream’ler Java runtime ortamının sunduğu çok temel ve önemli haberleşme ve ağ kütüphaneleridir. Stream’ler, veriyi, istemci ile sunucu makineler, farklı thread’ler, dosyalar ve benzeri yapılar arasında iletmek için kullanılan temel yapılardır.

            KISIM 2: JAVA AĞ PROGRAMLARININ TEMEL YAPILARI

n    Bölüm 9, Java Ağ Paketi ve Yüksek Seviyeli Sınıflar ile Ağ Programcılığına Giriş’te, önce java.net paketinde bulunan, kitapta ayrıntılı olarak öğretilen bazı önemli sınıflar toplu olarak kısaca tanıtılmaktadır. Daha sonra Java ağ programlarında çok sık kullanılan, java.net paketindeki en temel sınıflardan biri olan InetAddress sunulmaktadır. Bu bölümde ayrıca Java ağ paketindeki üst seviyeli sınıflardan URL, URLConnection ve URLEncoder ve Java Mail API kullanılarak hızlı olarak basit ağ uygulamaları geliştirilmesi örnek programlarla anlatılmaktadır.

n  Bölüm 10, TCP Soket Programcılığı’nda, ağ programcılığının en önemli yapılarından olan TCP soketleri sunulmaktadır. Java’da TCP soketleri Socket ve ServerSocket sınıflarıyla sağlanmaktadır. Soket programcılığı ağ programcılığında çok temeldir ve RMI, CORBA, Servlet’ler, JSP gibi diğer üst seviyeli haberleşme yapıları da aşağı katmanlarında TCP soketlerini kullanır. Soket programcılığı, bahsedilen yapılardaki programcılığa göre daha zordur ve ağ programcılığının “assembly” programcılığı olarak belirtilebilir. Bu bölümde, istemci/sunucu soketleri, önemli soket metotları ve soket ayarları, sıralı ve eşzamanlı sunucu yapıları, sıralı ve eşzamanlı istemci/sunucu uygulamaları gibi konular sunulmaktadır.

n    Bölüm 11, UDP Soket Programcılığı’nda, önce DatagramPacket ve DatagramSocket sınıfları tanıtılmaktadır. Daha sonra UDP tabanlı istemci/sunucu tasarımı anlatılmakta ve örnek UDP uygulamaları verilmektedir. Ayrıca UDP uygulama alanları hakkında bilgi de sunulmaktadır. TCP/IP protokol yığınında aktarım katmanında bulunan ikinci protokol UDP IP üzerinden verileri hızlı, fakat güvensiz bir şekilde göndermek için diğer bir alternatiftir. UDP protokolü, uygulamaların datagram olarak adlandırılan veri paketlerini birbirlerine gönderdiği, ikinci bir ağ haberleşme yöntemi sağlar. Java ağ paketi, UDP datagram’ları kullanan sistem-bağımsız Java programları yazmayı sağlamak için üç sınıfa sahiptir: DatagramSocket, DatagramPacket ve MulticastSocket. UDP protokolünü kullanan bir ağ uygulaması, diğer bir ağ uygulamasına göndermek istediği veri paketlerini içeren DatagramPacket’lerini bir DatagramSocket yoluyla gönderir. Alma durumunda olan ağ uygulaması da yine bir DatagramSocket kullanarak ağ verisini bir DatagramPacket kullanarak alır. DatagramPacket’ler ayrıca bir MulticastSocket dinleyen birçok alıcıya da gönderilebilir.

n    Bölüm 12, Multicast Haberleşme Modeli ve Programcılığı’nda, multicasting denilen gönderilen bir mesajın birden çok kişiye ulaştırılmasını sağlayan haberleşme modeli incelenmektedir. Unicast ile multicast haberleşme modelleri arasındaki benzer ve farklı yönler ele alınmakta, multicast haberleşme modelinin hangi tür uygulamalarda kullanılabileceği sunulmaktadır. Daha sonra MBONE denilen ve birbirlerine multicast destekli yönlendiriciler ile bağlı olan altyapı hakkında bilgi verilmektedir. Multicast haberleşme modeli hakkında gereken bilgiyi verdikten sonra Java’nın multicast desteği incelenmekte ve multicast haberleşme modelini kullanan çeşitli Java uygulamaları sunulmaktadır.

             KISIM 3: AĞ VERİSİ VE DAĞITIK NESNELER

n    Bölüm 13, JDBC ile Ağ Verilerine Erişim’de, Java’nın JDBC (Java Database Connectivity) API’si vasıtasıyla veritabanlarına erişim ve veritabanları üzerinde yapılan işlemler anlatılmaktadır. Veritabanı uygulamaları ağ yazılım tasarımlarında önemli bir konudur. Java ile veritabanlarına erişmek ve veritabanı uygulamaları geliştirmek oldukça kolaydır. JDBC sayesinde değişik veritabanı yönetim sistemlerine aynı kodlar ile erişilir. JDBC değişik ürünler için gereken farklı komutları programcıdan gizlemiştir. Bu sayede Java ile geliştirilen bir program, her türlü veritabanı yönetim sistemine bağlanabilir. Bu bölümde, ilk olarak ilişkisel veritabanları hakkında bilgi verilmekte ve veritabanlarının genel yapıları tanıtılmaktadır. Daha sonra veritabanını oluşturmak ve sorgulamak için gereken komutlar ve bu komutların bütününü oluşturan SQL (Structured Query Language) yapısal sorgu dili anlatılmaktadır. Ardından Java ile veritabanlarına nasıl bağlanıldığı ve nasıl sorgu yapıldığı sunulmaktadır. Ayrıca Java’nın veritabanları ile ilgili API’si JDBC’nin içinde bulunan sınıf ve ara yüzler tanıtılmaktadır. Bu sınıf ve ara yüzlerin kullanımı örnek programlarla açıklanmaktadır.

n    Bölüm 14, RMI ile Dağıtık Uygulamalar’da, Java RMI (Remote Method Invocation) teknolojisi ve örnek uygulamaları sunulmaktadır. RMI bir ağ üzerindeki bir Java nesnesinin diğer bir Java nesnesindeki bir metodu çağırması için, çok az bir programcılık ile, oldukça kolay bir yöntem sağlamaktadır. RMI teknolojisi kullanan dağıtık uygulamalarda n-katmanlı (n-tier) nesne-tabanlı Java sınıfları, ağ üzerine dağılır; bu tür programcılık “distributed object computing” olarak adlandırılır. RMI, parametreleri almada ve göndermede nesne serileme (object serialization) yöntemini kullanır. Bir Java istemcisi, sunucu tarafındaki bir Java nesnesi ile, sunucu bilgisini alarak ve kendi bilgisini ona geçirerek haberleşebilir. Bu tür haberleşme yapısı P2P (peer-to-peer) modeli olarak adlandırılır. RMI kavramsal olarak OMG (Object Management Group) tarafından geliştirilen CORBA/IDL modeline benzemektedir. RMI’in en önemli farklarından biri, RMI’ın homojen bir ortamda çalışır olup bütün dağıtık nesnelerin sadece Java dilinde olmasıdır. CORBA farklı dillerde yazılmış nesnelerin haberleşmelerini mümkün kılar. Farklı makinelerde bulunan Java nesnelerinin haberleşmesi için RMI en kolay ve etkin bir yoldur. Bu bölümde önce RMI sistem mimarisi sunulmaktadır. Daha sonra bir RMI uygulaması geliştirmedeki adımlar basit bir örnek programla beraber anlatılmaktadır. Ardından RMI’ın kullanımını değişik yönlerden sunan üç tane uzun RMI uygulaması verilmektedir.

              KISIM 4: JAVA WEB PROGRAMCILIĞI

n    Bölüm 15, Java Web Programcılığı’nda, önce, günümüzde yaygın olarak kullanılan Web programcılık teknikleri ve Java Web teknolojileri kısaca sunulmakta ve karşılaştırılmaktadır. Daha sonra, özellikle Java Web uygulamalarında teknoloji seçimlerindeki bazı önemli kriterler sıralanmakta ve bazı tavsiyeler verilmektedir. Son olarak Web uygulamaları ile dağıtık uygulamalar karşılaştırılmaktadır.

n    Bölüm 16, Servlet'ler ile Web Programcılığı’nda, Java Servlet Web teknolojisi ve programcılığı sunulmaktadır. Web istemcilerinden gelen isteklere servlet’ler sayesinde sunucu tarafında dinamik sayfaları oluşturulmakta ve istemcilere gönderilmektedir. Servlet’ler Java-tabanlı Tomcat gibi bir uygulama sunucusunda çalışır. Uygulama sunucusu, özel bir çeşit Web sunucusudur ve servlet’ler, enterprise bean’ler ve Web uygulamaları için istekleri ele alarak bir Web sunucusunun kabiliyetlerini genişletmektedir. Bu bölümde önce servlet’lerin nasıl çalıştığı anlatılmakta ve uygulama sunucusu Tomcat tanıtılmaktadır. Daha sonra basit servlet örnekleri sunulmakta ve bunlar Tomcat kullanılarak çalıştırılmaktadır. Ayrıca Servlet API’sindeki bazı önemli sınıflar, arabirimler ve metotlar, servlet’ler ile bağlantı oturum takibi ve son olarak servlet’ler ile bir JDBC uygulaması sunulmaktadır.

n    Bölüm 17, JSP ile Web Programcılığı’nda, Java JSP Web teknolojisi ve programcılığı sunulmaktadır. JSP sunucu tarafı programlamada kullanılan oldukça etkili bir yöntemdir. JSP temelde, Servlet mimarisine dayanmaktadır. Servlet’lerin yetersiz kaldığı noktalara çözüm olarak geliştirilmiştir. Bu bölümde ilk olarak JSP sayfasının yapısı ve JSP sayfasından otomatik servlet üretimi sunularak JSP programcılığına bir giriş yapılmaktadır. Daha sonra sırayla, dahili JSP nesneleri, JSP bileşenleri, JSP içinden JavaBean’lerin kullanımı ve JSP ile JDBC kullanımı ve form işleme konuları örnek programlarla ele alınmaktadır.

             KISIM 5: EKLER

n    Ek A, UML’de kitabın bazı yerlerinde kullanılan UML (Unified Modeling Language) hakkında kısa bir bilgi sunulmaktadır. UML günümüzde endüstri standardı olmuş, çok yaygın olarak yazılım geliştirmede ve iş modellemesinde, görselleştirme, tanımlama, inşa etme ve dokümantasyon amaçları için kullanılan bir grafik modelleme dilidir.

n    Ek B, Semboller’de kitapta kullanılan İngilizce sembollerin listesi verilmektedir.

n    Ek C, Türkçe-İngilizce Sözlük’te kitapta kullanılan Türkçe teknik kelimeler ve bunlara karşılık gelen İngilizce kelimeler verilmektedir.

n    Ek D, Kaynaklar’da, Java ve Java ağ programcılığı, bilgisayar ağları ve TCP/IP ve UML, nesne yönelimli analiz ve tasarım konusundaki kitap kaynakları verilmektedir. Internet kaynakları hakkında tanıtıcı bilgiler bölüm sonlarında sunulmaktadır.

Internet Desteği

Bu kitapta yer alan programların kaynak dosyaları kitabımızın Web adresinden alınabilir (http://www.jap2.com). Ayrıca, kitabın Web sitesinde sürekli yenilenecek olan diğer sayfalarla, Java, ağ programcılığı, nesne-yönelimli ağ yazılımları analizi, tasarımı ve programcılığı konularındaki önemli Internet kaynaklarının adresleri ve bu kaynakları tanıtıcı bilgiler de sunulmaktadır. Kitabımızda sunulan konuları destekleyen yeni dokümanlar ve ilerideki bazı güncelleme ve düzeltme bilgileri de sitemizde bulunacaktır.

This site was last updated 03/03/04