• Sonuç bulunamadı

Agvent Sınıfının Yapısı

Kayıtçı Tarafı

5.4. ABDES Sisteminin Bileşenleri

5.5.1. Agvent Sınıfının Yapısı

Şekil 5.9 : Agvent Sınıfının UML Diyagramı

UML diyagramı Şekil 5.9’daki gibi olan agvent sınıfının çalışmasını tam anlayabilmek için, bu sınıfın temel bazı özelliklerini ve davranışlarını açıklamakta fayda vardır.

5.5.1.1. Agvent Sınıfının Temel Özellikleri

Agvent Sınıfının geliştirilmesinde kullanılan ve bütün agvent örneklerinde bulunması istenen özellikler (attributes) ve bu özelliklerin işlevleri şunlardır:

protected String ownerID; ile Agventin üreticisinin tanımlayıcısı

saklanmaktadır. Bu bilgiden filtreleme ve yönlendirme işlemlerinde faydalanılmaktadır.

abstract class Agvent

(from agvent) protected String ownerID private String senderID private long identifier protected Vector forbiddenList protected HashSet targetList = null private String forwardID

protected String[] talkParameters=null private String controlSQL

private int executeID=0 public Agvent() public Object clone() public void setSenderID() public void setForwardID() public void setExecuteID() public void setTargetList() public void setControlSQL() public void setOwnerID() public void setIdentifier() public String getOwnerID() public String getSenderID() public String getForwardID() public int getExecuteID() public HashSet getTargetList() public String getControlSQL() public final void forward () public boolean checkValue() public String[] getTalkParameters() public long getIdentifier()

public abstract void setTalkParameters() public abstract String[] Talk()

public abstract void runFirstAgventServer() public abstract void runLastAgventServer() public abstract void runSubscriber()

private String senderID; Bir agventin, AS’lar arasında yönlendirilmesi

sırasında, agventin hangi AS’dan (veya Yayımcıdan) geldiğinin bilinmesi gerekmektedir. Eğer bir agventin senderID si ile ownerID si aynı ise bu agvent sisteme yeni gönderilmiş ve ilk AS üzerinde olduğunu göstermektedir. Bu nedenle aktif hale getirilmeli ve ilk AS’su üzerinde yapması gereken eylemleri yerine getirmelidir.

protected Vector forbiddenList; Yayımcı bir agventi üreterek sisteme

gönderdiği zaman, geçmiş tecrübelerinden de faydalanarak bazı kullanıcılara bu agventin gönderilmemesini isteyebilir. Bu durumda gönderilmemesini istediği Kayıtçıların adreslerini forbiddenList e kaydederek agventin bu kullanıcılara gönderilmesini engellemektedir.

protected HashSet targetList; Üretilen agventin sistemde yönlendirilmesi

sırasında, hangi hedef makinelere gönderileceği bir liste yapısında tutulmakta ve yönlendirme işlemlerinde gerek agventin kendisi, gerekse AS’lar bu listeden faydalanmaktadırlar.

private String forwardID; agventlerin yönlendirme işlemi sırasında, agventin

gönderileceği AS veya Kayıtçının adresinin tutulduğu kısımdır. Agvent Dağıtıcı, agventi forwardID adresine göndermekle yükümlüdür.

private String controlSQL; Agventin sistem üzerinde dağıtımı sırasında

kendi filtrelemesi için kullandığı iki farklı kontrol yapısı vardır. Birisi yukarıda bahsedildiği gibi adres/tanımlayıcı üzerinden filtreleme, diğeri de ölçütler üzerinden filtreleme. Ölçütler üzerinden filtrelemenin sağlanabilmesi için Yayımcı agventin içine test edilmesini istediği ölçütü/ölçütleri SQL formatında yükler. Agventte ilgili AS’ya ulaştığında nesne veri tabanında bu kontrol komutunu çalıştırarak, kendisini yönlendireceği Kayıtçıları seçer. • private int executeID=0; Agventin üç farklı çalışma mekanizması vardır.

Bunlar ilk AS üzerinde, son AS üzerinde ve Kayıtçı üzerinde. Bir agvent aktif hale gelirken hangi metotları çalıştıracağını belirtmek için executeID özelliğinden faydalanılır ve ilgili metotları aktif hale getirilir.

protected String[] talkParameters; Kayıtçı üzerine ulaşan agventin, sahip

olduğu nitelikler ve davranışlar neticesinde, agvent ile Kayıtçı arasında haberleşmede kullanılacak parametreleri ve açıklamaları saklar.

5.5.1.2. Agvent Sınıfının Temel Davranışları/Metotları

ABDES Sisteminde yayımlanacak farklı agvent tiplerinin, belirli davranışlarının standart olması gerekmektedir. Bunun için bir üst sınıf olarak tanımlanan “Agvent”

sınıfında bazı sabit metotlar tanımlanmış olup, bu metotlardan agventin sistem üzerinde yayımı sırasında değişik aşamalarda faydalanılmaktadır. Bu metotlar ve işlevleri şu şekildedir.

checkValue Metodu: ABDES Sisteminin önemli bir aşaması da değerlerin karşılaştırılmasının sağlandığı aşamadır. Agventin geliştirme amacına uygun olarak gerek özellikler, gerekse davranışlar farklı tiplerde olabilmektedirler. Bir Kayıtçı, bir agventin her hangi bir özelliği veya davranışı üzerinde filtreleme yapılmasını istediğinde bu karşılaştırma işlemlerinin yapılması için adaş metotlar olarak

checkValue metodu aşağıda gösterildiği gibi geliştirilmiştir.

public boolean checkValue(int var1, String str, String op) { } public boolean checkValue(float var1, String str, String op) { } public boolean checkValue(double var1, String str, String op) { } public boolean checkValue(boolean var1, String str, String op) { } public boolean checkValue(String var1, String str, String op) { }

Bu adaş metotların yardımıyla Tablo 5.1’de gösterilen tiplerin karşılaştırılmalarına olanak sağlanmıştır. ABDES Sistemi, ihtiyaç duyulması halinde bunların haricindeki tiplerdeki (hatta bunlar basit veri tipinden olmayıp, nesne tipinden de olabilir) verilerin karşılaştırılmalarına da olanak sağlayacak şekilde geliştirilebilir.

Tablo 5.1. ABDES Sistemi Tarafından Desteklenen Özellik ve Davranış Tipleri Tipler int float double boolean String

Geliştirilen bu adaş metotlar, sistem tarafından tanımlanmış olan operatörleri desteklemektedir. ABDES Sisteminin desteklediği operatörler sabit olarak belirlenmiş olup bunlar Tablo 5.2’de gösterilmektedir.

Tablo 5.2. ABDES Sistemi Tarafından Desteklenen Karşılaştırma Operatörleri Operatörler > >= < =< != <> =

Bunların haricinde agvent sınıfında, sistemin nasıl çalıştığını gösteren davranışlar/metotlar da şunlardır:

public final void forward(): Agventin hedef listesindeki makinelere agventin

gönderilmesini sağlayan metottur. Sistemin yapısı gereği dağıtım aşamasında bir agventin kopyaları çıkarılarak sistem üzerinde yayımlanmaktadır. Agvent kendi üretilme amacına göre hedef listesini belirler ve bu hedef listesine yönlendirmelerin hangi AS’lar üzerinden olacağını hesaplar. Agvent kaç farklı AS üzerinden dağıtılacak ise o kadar farklı agvent klonlanır (kopyası çıkarılır). Bu iş için yönlendirme aşamasında AS üzerindeki Agvent Dağıtıcıdan faydalanılır.

public abstract void runFirstAgventServer(): Yayımcı tarafından sisteme

gönderilen bir agventin ulaştığı ilk AS üzerinde nasıl bir davranış sergileyeceğinin tanımlandığı metot çağrısıdır. Agvent ulaştığı ilk AS üzerinde, sisteme daha önce kayıt olan Kayıtçıların kayıt ölçütlerini kontrol ederek, kendisini bu ölçütlere uygun Kayıtçılara doğru yönlendirir. Bu metot agventin yönlendirileceği Kayıtçıların seçildiği ve yönlendirme işleminin başlatıldığı metot çağrısıdır.

public abstract void runLastAgventServer(): Bir agventin, ABDES Sistemi

üzerinde dolaşarak ilgili Kayıtçıya ulaşması gerekmektedir. Agvent, Kayıtçının bağlı bulunduğu AS’ya ulaştığı zaman, Kayıtçının özelliklerini inceleyerek, bu özelliklere göre kendisini ilgili Kayıtçıya doğru yönlendirip yönlendirmemeye karar verdiği metot çağrısıdır.

public abstract void runSubscriber(): Agventin üretim amacına göre, Kayıtçı

üzerinde yapması gereken işlemlerin tanımlandığı metot çağrısıdır.

public final void run(): Thread sınıfının bir alt sınıfı olarak geliştirilen Agvent

sınıfında agventin aktif hale getirilmesi sırasında çalıştırılacak metot çağrısıdır. Agvent aktif hale geldiğinde bulunduğu makinenin özelliğine göre ilgili metotları çağırarak kendine yüklenen görevleri yerine getirir.

public String[] getTalkParameters(); Kayıtçı, kendine ulaşan agventle

haberleşmesi sırasında, faydalanabileceği bilgileri ve bunları hangi parametrelerle nasıl çağırabileceğini öğrendiği metot çağrısıdır.

public abstract void setTalkParameters(); Agvent sınıfının altsınıfı olarak

üretilen her farklı agvent tipi için, haberleşme parametrelerinin tanımlandığı metot çağrısıdır. Her agvent tipinin haberleşme parametreleri farklı olacağı için bu metodun ayrı ayrı gerçeklemesi gerekmektedir. Bu nedenle metot soyut olarak tanımlanmıştır.

public abstract String[] Talk(String question, String parameter); Kayıtçı ile

agvent arasında haberleşmenin sağlandığı temel metoddur. Kayıtçı

getTalkParameters metot çağrısı ile elde ettiği bilgileri kullanarak, kendine

ulaşan agventten bazı ek bilgileri isteyerek ona göre belirli işlemleri yapmaya karar verebilir. Agvent kendisinden talep edilen bir isteği amacına uygun olarak değerlendirerek cevap verir. Bu cevabında, Kayıtçının bazı ölçütlerini de dikkate alarak ona göre davranışını düzenleyebilir. Her agventin konuşma işlemi farklı olacağından bu metot soyut olarak tanımlanmış olup, agvente özel olarak gerçeklenmesi sağlanmıştır.