Jar İmzalama (Signed Jar)

Applet ve JWS uygulamalarında kullanıcının bilgisayarında güvenlik nedeniyle, uygulamanızın güvenli çalıştığını doğrulamak ve bu tip izinleri alabilmek için jar dosyanızı imzalamanız gerekir. Böylece kullanıcının onaylaması ile bilgisayarında bulunan dosyalara,portlara erişebilirsiniz.

Jar dosyası oluştuktan sonra yapmamız gereken bu jar dosyasını imzalamaktır. İmzalamadan önce kendi imzamızı oluşturmamız gerekiyor. Bunu yapmak için bir tane komut istemcisi açıyoruz. Komut istemcisinde Jar dosyasının bulunduğu dizine gidiyoruz. Daha sonra o dizinde iken aşağıdaki komutu çalıştırarak anahtar dosyamızı oluşturuyoruz.

keytool -genkey -keystore notdefteri.key -alias NotDefteri -validity 365

Komut sonucu yukarıdakine benzer bir pencere elde etmeniz gerekiyor. Bu komutun anlamı NotDefteri aliasina sahip ve 365 gün geçerli olan notdefteri.key anahtarını oluşturdur.

Anahtar dosyamızı sadece bir kere oluşturmamız yeter. Aynı anahtar dosyasını bütün projelerimizde kullanabiliriz. Ya da isterseniz her projeniz için ayrı ayrı anahtar dosyaları oluşturabilirsiniz.

Daha sonra bu anahtar dosyasını kullanarak jar dosyamızı imzalayalım.

jarsigner -keystore notdefteri.key -storepass notdefteri notdefteri.jar NotDefteri
jarsigner -verify notdefteri.jar

İlk satırda notdefteri.jar dosyasını notdefteri.key anahtarıyla tanımladığımız şifreyi ve anahtar aliasını girerek imzalıyoruz. Daha sonra jar dosyasını doğruluyoruz.

Komutlar sonucu yukarıdakine benzer bir pencere elde etmeniz gerekiyor.

Bu konunun neden gerektiği ve daha ayrıntılı bilgilere şu adresten ulaşabilirsiniz.

Çalıştırılabilir JAR dosyası oluşturma (Executable Jar)

Java projenizi yazdınız, ancak bu Java projenizi bir uygulama şeklinde nasıl sunacağınız konusunda ikileme düştünüz. Bunu yapmak için 3 yöntem var. Eğer bir web sunucunuz varsa bu uygulamanızı Applet veya JWS uygulaması olarak sunabilirsiniz, ancak böyle bir sunucunuz yoksa bunu Java Archive File (JAR) olarak sunmanız gerecektir. Kullanacak olan kişinin sınıf dosyalarıyla uğraşmadan dosyaya tıklayarak çalıştırmasını istiyorsanız çalıştırılabilir bir JAR oluşturmanız gerekecektir.

Bu işin iki yöntemi var. Ben Eclipse kullanan biri olduğum için bu çalıştırılabilir JAR oluşturma işini Eclipse'te export yardımıyla yapıyorum.

1. Projeye sağ tıklıyoruz
2. Export'a tıklıyoruz
3. Runnable JAR File seçiyoruz
4. Yeni ekranda oluşacak jar için konum bilgisi giriyoruz. Launch Configuration seçeneği altında çalışacak olan ana sınıfı seçiyoruz. Eğer kullandığımız kütüphaneler varsa Package required libraries into generated JAR seçeneğini seçmeyi unutmuyoruz. (Bkz. yukarıdaki resim)
7. Finish ile sonlandırıp jarımızı oluşturuyoruz.

Diğer yöntem komut satırından bu işi yapmaktır. Ve kullanıcıya bu oluşan JAR'ı sunmaktır. Aşama aşama şu şekilde yapılmaktadır.

1. Kaynak dosyalarını derliyoruz (javac -classpath . net/kodveus/jws/*.java)
2. Manifesto dosyasını oluşturuyoruz
İçeriği:
Manifest-Version: 1.0 Sealed: true
Main-Class: net.kodveus.jws.NotDefteri
3. Daha sonra JAR dosyasını, hazırladığımız manifesto dosyasıyla birlikte oluşturuyoruz (jar cvmf MANIFEST.MF NotDefteri.jar net)

Eğer kaynak kodların JAR dosyasında olmamasını istiyorsak 3. komutu çalıştırmadan önce .java uzantılı dosyaların hepsini siliyoruz.

Bütün bu aşamalar başarılı bir şekilde yapılırsa aşağıdaki ekrandaki gibi birşeyler görmeniz gerekiyor. (MANIFEST.MF dosyasını copy con komutu yerine Notepad ile de oluşturup ilgili dizine atabilirsiniz)

JAR dosyamızı oluşturduk. Peki bu jar dosyası nasıl çalışacak?

Eğer kullanıcı bu dosyayı başka bir araçla (örneğin winrar) açmaya ayarlamamış ise yapması gereken bu jar dosyasına çift tıklamaktan ibarettir. Ancak siz buna güvenemem derseniz o zaman bu dosya ile birlikte bir bat dosyası (veya linux için sh dosyası) vermelisiniz. O dosyanın içeriği şu şekilde tek satırlık bir şey olacaktır:

java -jar NotDefteri.jar

Peki herşey bu kadar kolay mı? Hayır değil. Eğer kullanıcı java.exe'nin bulunduğu dizini (Java ev dizini - JAVA_HOME diye geçer çoğu kaynakta :-) ) path'e eklememişse bu komutu çalıştırmadan önce eklemesi gerekiyor. Bunu nasıl mı yapacak? Windows için:

1. Bilgisayarım'a sağ tıklıyoruz
2. Gelişmiş sekmesinde Ortam değişkenlerini açıyoruz
3. Sistem değişkenleri altına JAVA_HOME (bu kullanıcının jre'yi kurmuş olduğu dizini gösterecek)'u ekliyoruz. (Bu genellikle C:\Program Files\Java\jre1.5.0_02 şeklinde birşeyler olabilir)
4. Daha sonra Sistem değişkenleri altındaki PATH değişkeninin sonuna ;%JAVA_HOME%\bin ekliyoruz.
5. Ve şimdi artık java komutu sorunsuz çalışıyor olmalı.

GNU/Linux'te bash shell: export PATH=$PATH:java_evi/bin
tcsh veya csh: set PATH = ($PATH java_evi/bin)

GNU/Linux'te fazla ayrıntıya girmiyorum. Zaten GNU/Linux kullanan kişi bunu nasıl yapacağını benden iyi biliyordur.

Path ayarları tamamlandıktan sonra jarımız çalışacaktır.

Daha Fazla Bilgi:
https://docs.oracle.com/javase/1.5.0/docs/guide/jar/index.html
https://docs.oracle.com/javase/tutorial/deployment/jar/

VRML Nedir?

VRML, ilk ciddi Web3D teknolojisidir ve 1994 yılından bu yana yoğun olarak kullanılmıştır. ISO (International Standards Organization) tarafından uluslararası standart olarak kabul edilmiştir. VRML, etkileşimli üç boyutlu nesne ve ortamları tanımlamayı sağlayan basit metinsel bir dildir. VRML dosyalarının uzantısı .wrl’dir. VRML-NG yani X3D, 1999 yılında, üç boyutu her ortama taşıma çabaları sonucunda ortaya çıkmıştır. VRML’in XML (Extensible Markup Language) ile temsil edilmesini sağlamanın yanında NURBS yüzeylerinde ve Desen Kaplamada yenilikler getirmiştir. (Bkz: Coreweb3d)

VRML dosyası dört bileşenden oluşur:
a)VRML Başlığı,
b)Prototip (“Prototype”), şekil (“Shape”), interpolator (“Interpolator”), algılayıcılar (“Sensor”)
c) Betimler (“Script”)
d) Rotalar (“Route”).

Bir VRML dosyasında mutlaka olması gereken tek şey başlık bilgisidir. Bu bilgi # işareti ile başlamaktadır. Ve genellikle #VRML V2.0 utf8 şeklindedir. Bu ifade bu dosyanın bir VRML 2.0 kodu içerdiğini ve karakter standardı olarak utf8 kullandığını belirtmektedir. (Kod 1)

VRML, dosyalar, şekiller ve VRML dünyasının özelliklerini tanımlayan düğümler (node) içerebilir. Her bir düğüm, şekilleri, renkleri, bakış noktalarını, dönüşümleri vb. özellikleri tanımlar. Düğümler zorunlu olarak düğüm tipi ve ek olarak düğümün özelliklerini belirten ek sahalar içerir. En çok kullanılan düğümlere örnek olarak “Shape”, ”PointSet”, “IndexedLineSet”, “IndexedFaceSet”, “Material”, “Color”, “Text”, “Transform”, “PixelTexture”, “Normal” düğümlerini gösterebiliriz (Ayrıntılı bir liste için bkz. Node Reference).
VRML’in son sürümleriyle birlikte kazandığı en önemli avantaj EAI (“External Authoring Interface”) standart tanımlaması yardımıyla VRML tarayıcılarının Javascript ve Java dilleri ile yazılmış programlarla etkileşimli olarak çalışmasıdır. Bu kodlar VRML’in veya tarayıcının kendi API’ler yardımıyla ve “Script” düğümü sayesinde VRML kodu içine gömülebilmekte veya kodun içinden çağrılabilmektedir.


Kod 1 : Basit bir kırmızı renkte silindir oluşturan VRML kodu
#VRML V2.0 utf8
DEF dad_Cylinder1 Transform {
translation -.02635 0 0
children [ DEF Cylinder1 Shape {
appearance Appearance {
material DEF Red_mat Material {
ambientIntensity 0.200
shininess 0.200
diffuseColor 1 0 0
}
}
geometry Cylinder {
height 2.000
radius 1.000
}
}
]
}
Bu kodu *.wrl uzantılı bir dosya içine kaydedip çalıştırabilirsiniz. Ancak çalıştırabilmek için VRML eklentisine ihtiyacınız var. Bu eklentiler hakkında daha fazla bilgiyi ve tarayıcınızda eklenti olup olmadığını şuradan öğrenebilirsiniz. Eklentiyi yükledikten sonra bu kodu yazdığınız dosyayı tarayıcınızla açıp oluşan görüntüyü inceleyebilirsiniz. Aşağıdaki resimde benim bilgisayarımda bu kodun oluşturduğu görüntü vardır:

Bu görüntü B S C o n t a c t V R M L / X 3 D eklentisi kullanılarak alınmıştır. Eklentiyi siteden indirip kurabilirsiniz. Ancak sağ tarafında (eğer satın almazsanız) şirket adı görülmektedir.

VRML gelişip X3D halini almıştır. Ancak VRML'in basit metin kodlaması X3D'de de bir kodlama olarak kullanılmaktadır. VRML hakkında daha fazla bilgi için (özellikle öğrenmek için) aşağıdaki ingilizce siteleri dolaşabilirsiniz. Ben VRML konusunda çalışma yapmadığım için bu konuda bundan daha iyi bir öğrence yazmam mümkün olmayabilir. En iyisi siz bu konulara meraklı iseniz benim X3D öğrencemi bekleyin :D

Kaynak: Akademik Bilişim 2005 X3D ile İnternet Üzerinde Üç Boyut yayını

VRML Siteleri:
http://www.programlama.com/sys/c2html/view.php3?DocID=540
http://tecfa.unige.ch/guides/vrml/vrmlman/
http://www.lighthouse3d.com/vrml/tutorial/
Öğrenceler : http://www.web3d.org/x3d/vrml/tutorials/
(Daha fazlası için : http://www.google.com.tr/search?q=VRML+Tutorial)

Örnekler:
http://www.sv.vt.edu/classes/vrml/NCSA_VRML_Tutorial/examples.html
http://yll.hkcampus.net/~yll-tcc/vrml/startup.htm
(Daha fazlası için : http://www.google.com.tr/search?q=vrml+examples)
Kitap:
http://www.wiley.com/legacy/compbooks/vrml2sbk/cover/cover.htm

AOP ye giriş

AOP'YE GİRİŞ

Günümüzde yazılım mühendisliği alanında nesneye dayalı programlama en çok kullanılan ve kabul gören programlama paradigması durumunda. Nesneye dayalı programlamanın bu başarısının ardındaki gerçeklerden biri de şüphesiz karşılaşılan bir problemi soyut davranışları ve verileri bir nesnede toparlayabilmesi, diğerlerinden ayrıca ele almaya izin vermesidir. Nesneye dayalı programlamanın getirdiği bu özellik sayesinde karışıklığı fazla ve büyük uygulamaların gerçekleştirim ve bakım süreçlerinde karşılaşılan sorunları ve zorlukları minimize edilebilmektedir. Bu tür uygulamalara örnek olarak dağıtık uygulamaları ve ya grafiksel kullanıcı arayüzlerini ( GUI ) verebiliriz.

Fakat nesneye dayalı programlama, kavramların ayrıştırılmasında çok yetenekli olmasına rağmen bir program modülünde gerçekleştirilemeyecek, tek bir program modülüne uymayacak özelliklere sahip ve ya birden fazla program modülüyle hemen hemen aynı derece de ilişkili olan kavramları enkapsüle etme de zorluklar yaşamaktadır. Kavramlar, servislerin kalitesi, güvenlik gibi yüksek düzeyli olabileceği gibi, bufferlama, cacheleme gibi düşük seviyeli de olabilmekte, aynı zamanda bir şirketteki iş mantıkları gibi fonksiyonel özellikte ve ya senkronizasyon gibi fonksiyonel olmayan özelliklere sahip olabilir. Bazı kavramlar bir kaç nesne ile couple olabilirler ve yeterince iyi bir cohesion sağlarlar. Örneğin XML Parser’lar vb.. Bazıları ise birbirleriyle çok ilgisiz modüller ile yakından ilişkili olabilirler. Bunlara da örnek olarak log tutulmasını verebiliriz.

Çapraz-kesilen Kavramlar

En son örnekte verilen log tutulması kavramını ele alırsak, bu kavram değişik modüllerin her bir metodunun çağrılmasında gerekebilir. Örneklemek gerekirse bir muhasebe programında o anki kasa modülünde kasa değerini bulan bir metodun içinde de fatura modülünde fatura kesimini gerçekleştiren metodun da içinde log tutulması istenildiğini, işi gerçekleştiren kişinin ve işin yapıldığı saatin tutulması istenildiğini, varsayalım. Bu durumda birbiriyle ilişkili olmayan iki modül de LOG objesine gerek duyacaktır.

Diğer bir örnek vermek gerekirse basit bir figure editörünü ele alırsak, bu editor için iki kavram vardır, ilki her bir figürün pozisyonun izini tutmak (data concern), diğeri ise her hangi bir eleman hareket ettirildiğinde görüntüyü güncellemek (feature concern). Nesneye dayalı programlama, grafiksel elemanları data kavramına göre gayet güzel şekilde enkapsüle edebilirken, feature kavramı her bir hareket metodunda görünmek durumundadır. Tam tersini, yani feature kavramının etrafında yazılımın tasarımını gerçekleştirebiliriz ama bu sefer de data kavramı her hareket sonrası görüntünün güncellemesinde gözükecektir.














Sonuç olarak, kavramlarla ilişkili metodlar kesişiyorsa, bu kavramlar çapraz-kesilen (crosscut) kavramlardır. Figür editöründeki iki kavram tasarım nasıl olursa olsun çapraz olarak kesişmektedir. Sadece ve sadece bir kavram başarıyla içselleştirilip, tam olarak ayrıştırılabilmektedir. Diğer kavram ana modüllerde enkapsüle edilememekte, diğer modüllerle arapsaçına benzer ilişkiler ortaya çıkarmaktadır.

“Crosscut” kavramlar için son örnek olarak dağıtık işletim sistemlerinin istenen özelliklerinden senkronizasyonu verebiliriz. İki eş zamanlı çalışan nesnenin arasındaki senkronizasyonu sağlamak amacıyla eş zamanlı çalışacak nesnelerin içine senkronizasyonu sağlayan nesnelerin tanımlarını gömmek gerekir. Bu da sonuç olarak aspect’e dayalı programlamanın gerekliliğini ortaya çıkaran nedenlerden yönlerin, cephelerin birbirleriyle içi içe geçmesi durumunu ortaya çıkarır.

Aspect-oriented Programlama Nedir?

“Crosscut” kavramların bir modüle enkapsüle edilebilmesi, tam olarak içselleştirilebilmesi için geliştirilen yeni teknoloji “Aspect”e Dayalı Programlama olarak isimlendirilmektedir. “Aspect” ise “crosscut” gerçekleştirimin modüler birimi olarak tanımlanabilir.

“Aspect” yapısı yardımı ile birden fazla sayıda sınıfı etkileyen davranışları tekrar kullanılabilen modüllere enkapsüle etmek mümkündür. Daha once verdiğimiz örneklerden “senkronizasyon” ve “log tutulması” birer “aspect”tir.

“Aspect”e dayalı programlama ile her bir “aspect”, ayrı ve iç içe geçme durumu yaratmadan gerçekleştirilebilir ve bu “aspect”ler bir araya getirilip, en son çalıştırılabilir hale getirilebilirler. “Aspect”lerin bir araya toparlanıp çalıştırılabilir hale getirilmesini “aspect weaver” sağlar.

Weaving iki şekilde olabilir:

  • Static weaving

Aspectler tek bir sınıf içerisine gömülerek birleştirilir (Örn. AspectJ)

  • Dynamic weaving

Aspectler, bir nesneyi dinamik kullanabilen bazı çerçevelerde her zaman ayrı sınıflardır (Örn. AspectWerkz)

Sonuç olarak bir “aspect” değişik sayıda prosedürün, modülün veya nesnenin gerçekleştirimine katılabilir. Bu olay da kodun tekrar kullanılabilirliğini önemli ölçüde arttırır.



AOP dilleri, “crosscutting” kavramları ayrıştırmak için genellikle üç önemli elemana sahiptir. Bunlar;

  • “Join point” model
  • “Join point”leri tanımlayan yapı
  • “Join point”lerde gerçekleştirimi etkileyen yapı

“Join point” model, “crosscutting” kavramların yapılarını tanımlayan genel referans yapısını sağlamakta ve yeni özelliklerin eklendiği bağlantıları tanımlamaktadır.


IBM Websphere MQ nedir, nasıl kurulur?

IBM Websphere MQ nedir?

Farklı fiziksel konuma(farklı ülke,şehir v.s.) ve/veya çalışma ortamına(farklı işletim sistemleri, farklı mimariler) sahip bilgisayar sistemlerinin birbirleriyle kayıpsız, veri transferi yapabilmesi, mesajlabilmesi için
kullanılabilen Websphere MQ, sistemler arasında ortak bir protokol oluşturarak kesilmeler olsa dahi,
mesaj kuyruklarında topladığı verileri karşı bilgisayar sistemine göndermeyi amaçlar.

MQ yapı olarak; sistemler arasındaki mesajlasmayı sağlayan MQ Sunucuları, bu sunucular
üzerinden veri transferi yapan MQ istemcileri, gönderilen mesajları düzenleyen, sıralayan
mesaj kuyrukları, mesaj kuyruklarını yöneten mesaj kuyruğu yöneticileri, kanallar ve
dinleyiciler gibi parçalardan oluşur.

MQ Sunucu tarafı kurulumu istemciye göre biraz daha karışıktır. Bizim yaptığımız kurulum, zaten varolan ve çalışan bir MQ sunucuları kümesine yeni bir sunucu eklemek amacını taşıyordu. Bunun için IBM
xSeries206 makina uzerine Windows Server 2003 işletim sistemi ve onun üstüne de Websphere MQ
6.0 yı kurduk.

Kurulum sırasında:

CD yi takın, autorun özelliği kapalı ise Setup.exe programını çalıştırın.
"Software Prerequisites" a tıklayın ve tümünün sağlanmış olduğundan emin olun. (Java Runtime may be
seçili olmayabilir).

"Network Prerequisites" a gelin ve "No" yu seçin.
"WebSphere MQ Installation" a gelin ve kurulumu başlatın.

"Setup Type panel" de "Typical" ı seçin.
"Prepare WebSphere MQ Wizard panel" e gelene kadar "Next" e tıklayın.
Bu panelde sorulan "Are any of the domain controllers in your network running Windows 2000 server?" sorusuna "No" deyin.
"Completing the Prepare WebSphere MQ Wizard panel" e gelene kadar "Next" e tıklayın.
Hic bir seçeneği seçmeyin.
"Finish" tuşu ile kurulumu bitirin.



Ayarlar:

"WebSphere MQ Explorer (Start / Programs / IBM WebSphere MQ / WebSphere MQ Explorer)" u başlatın.
"Queue Managers" üzerinde sağ tıklayın ve "New / Queue Manager" ı seçin.
"Queue Manager" adı olarak: QMGRNAME gibi bir isim girin.
"Make this the default queue manager" seçeneğini seçin.
"Dead Letter Queue" olarak: SYSTEM.DEAD.LETTER.QUEUE girin.
Next deyin.
Next deyin.
"Start Queue Manager" seçili kalsın.
Next deyin.
"Create listener configured for TCP/IP" seçili kalsın.
"Listen on port number" olarak: 1414 girin.
"Finish" deyin.


Bu ayarlardan sonra alıcı ve gönderici kanalların aktif durumda olmasına dikkat edilmeli.

Yeni makinanın sabit adı ve IP adresini ana MQ sunucu tarafında da tanımlandıktan sonra MQ sunucumuz hazır hale geldi.



İstemci tarafına "MQ Client" ı oluşturan bileşenleri
kurmak ve bazı ayarlar yapmak, sunucular ile bağlantı kurmak için yeterli olacaktır.

Bilgisayarın "Ortam değişkenleri(environment variables)" bölümüne "MQ client" ın eklediği üç girdiye ek olarak:
1) MQCCSID - 819 // (Türkçe desteğini sağlamak amacıyla ekleniyor)
2) MQSERVER - SYSTEM.DEF.SVRCONN/TCP/xx.xx.xx.xx(1414) // (MQ server makinenin hangisi
olduğunu istemcinin anlamasını sağlamak amacıyla ekleniyor)

Bu değişkenleri komut satırında,

SET MQCCSID = 819
SET MQSERVER = SYSTEM.DEF.SVRCONN/TCP/xx.xx.xx.xx(1414)

komutlarını girerek de ekleyebilirsiniz. Burada 1414, MQ sunucunun mesaj alım port unu,

xx.xx.xx.xx de MQ sunucunun IP adresini göstermektedir.