18 Ağustos 2013 Pazar

JSR 181

Giriş

JAX-WS ile JSR 181 ile kullanılması kararlaştırılan anotasyonlar kullanılıyor. Bu anotasyonlardan bazıları
@WebService, @WebMethod, @WebParam vs. Anotasyonlar javax.jws paketinde mevcut.

JSR 181 Anotasyonları

javax.jws.WebService ve serviceName

Eğer bir web servisine aşağıdaki gibi isim verilirse 
@WebService(name = "myService")
üretilen wsdl dosyasında aşağıdaki gibi bir XML üretiliyor

<service name="myService">
    <port name="myServicePort" binding="tns:myServicePortBinding">
    <soap:address location="http://localhost:8080/myApp/webservice"/>
    </port>
</service>
Burada kullanılan servis ismine ?wsdl eklenip sorgulama yapılırsa XML çıktısı görülebilir.

Bazen wsdl dosyasında wsdl: şeklinde kullanım da görülebilir. O zaman XML aşağıdaki gibi olacaktı.

<wsdl:service name="myService">
    <wsdl:port name="myServicePort" binding="tns:myServicePortBinding">
    <soap:address location="http://localhost:8080/myApp/webservice"/>
    </wsdl:port>
</wsdl:service>
Eğer serviceName atanmazsa, JAX-WS sınıfın ismine "Service" kelimesini ekliyor. Örnek:
Bu sınıf için wsdl dosyasını adresi aşağıdaki gibidir.Sınıfın ismine yapılan ektentiye dikkat.
http://localhost:9080/service/ServiceImplService?wsdl
javax.jws.WebService ve portName
Eğer WebService'e portName vererek aynı arayüzden türeyen ancak farklı çalışan sınıflar yazabiliriz. Örnek:
Üretilen wsdl aşağıdaki gibi olacaktır.

javax.jws.WebMethod

Eğer bir metodun dışarıya açılmasını istemiyorsak aşağıdaki gibi yapıyoruz.
@WebMethod(exclude = true)
javax.jws.OneWay

Eğer bir metodun geriye döneceği bir cevap yoksa onu OneWay olarak işaretlersek WSDL dosyasında port'a bağlı olan output tagleri üretilmez. Örnek:
@WebMethod
@OneWay
public void myCall ()...

Linux Dosya Distemi

Bu yazıyla ilgili olarak TTY ve Devpts , Per Process File Table ve INode ve ls komutu başlıklı yazıları okuyabilirsiniz.

HAL
Hardware Abstraction Layer (HAL) ile fstab arasındaki bağlantıyı gösteren bir şekili buradan aldım.

Mount
Mount komutu yazısına taşıdım.

Virtual File System (VFS)

fstab veya mount ile bağlanan diskler farklı dosya sistemelerini kullanıyor olabilirler. Aradaki farkları ortadan kaldırmak için VFS sistemi kullanılır. VFS sistemini gösteren bir şekli buradan aldım.


Path'i bilinen bir dosyayı açmak için VFS path'ten yukarı doğru çıkıyor ve mount edilmiş dosya sistemini buluyor.


Örneğin /proc altındaki bir dosya okunmak istenirse istek önce VFS sistemine geliyor. Sistem isteği procfs dosya sistemine geçiyor ve gelen cevabı da uygulamaya gönderiyor. Akışı gösteren bir şekili aşağıda bulabilirsiniz.



Böylece procfs aslında diskte bulunmadığı halde VFS sayesinde diskin bir parçasıymış gibi kullanılabiliyor.

The "Virtual File System" in Linux başlıklı yazıda VFS ana kısımlara bölünmüş. Bunlar :
  1. super-block : Her mount edilmiş dosya sistemi hakkında bilgiyi tutar
  2. inode  : Bir dosyanın ismi ve gerçek verisi hariç geri kalan herşeyi tutar
  3. directory : Dosya isimleri ile inode yapısını eşleştirir
  4. file  : Dosya ile inode yapısını eşleştirir. Eşleşmeyi daha iyi anlamak için Per Process File Table ve INode başlıklı yazıyı okuyabilirsiniz.
şeklinde açıklanmış.

Index Node (inode)


Linux dosya sisteminin temelinde inode (index node) yapısı bulunmakta. Bu yapıyı gösteren bir kaç şekli aşağıya ekledim.
İlk şekli buradan aldım.


Ext2 dosya sistemini gösteren bir diğer şekli ise buradan aldım.
inode ve programlama
inode verisi C dilinde ino_t ile temsil edilir. inot_t aslında çoğunlukla long gibi bir şeye typedef'dir.

inode ve  reference count
Her inode yapısının içinde bir sayaç bulunuyor. Bu sayaç inode'a hard link ile bağlı olan dosyaların sayısını tutuyor. Eğer sayaç sıfır olursa inode silinebiliyor.

inode ve block yapısı
Tüm şekiller hemen hemen aynı çalışma yöntemini işaret ediyor. Bir inode yapısı içinde diskteki blokların adresleri tutuluyor. Aslında Unix ve diğer işletim sistemleri dosya erişimini byte-stream mantığı üzerine oturtmuş durumdalar ancak sabit diskler bloklar ve sektörler şeklinde çalışıyor. Dolayısıyla inode yapısı içinde blok büyüklüğü ve stream içindeki örneğin 100. byte'ın aslında hangi sektörde olduğu bilgisi bulunuyor.
inode veri yapısı ile dosyanın sahibi, grubu, erişim hakları ve erişim zamanı gibi bilgileri sakladığını söylemiştik.
Yani inode yapısında dosya sistemine ait metadata bilgisi de mevcut.

Bu bilgileri gösteren bir şekle bakmak için ls komutu başlıklı yazıya göz atabilirsiniz.


inode veriyapısı tarafından desteklemesi gereken işlemleri örnekleyen bir şekil ise aşağıda.
Bu işlemler birer virtual function gibi düşünülürse, her dosya sisteminin nasıl olup ta aynı arayüz üzerinden farklı medyalara farklı formatlarda yazabildikleri daha rahat anlaşılır.

Does folders in windows have IDs? or GUIDs? sorusunda Windows üzerinde inode numarası gibi bir numara üretilmesini sağlayan ilginç bir yöntem gördüm. Kod aşağıdaki gibi



Linux üzerinde bir dosyanın inode numarasını görmek için ls komutu başlıklı yazıdaki inode numarası bölümüne bakabilirsiniz.

inotify
inotify dizin izleme yazısına taşıdım.