Thursday, January 21, 2016

Java'da Yerelleştirme

Java'da karakter katarı, zaman ve para birimleri ile çalışırken yerelleştirmeye ihtiyaç duyuyoruz. Örneğin "izmir" karakter katarını ekrana büyük harflerle yazmak istersek aşağıdaki kod "IZMIR" olarak yazacaktır: 
String city= "izmir";
System.out.println(city.toUpperCase());
Neyse ki String sınıfını yazanlar toUpperCase metodunun farklı diller için çalışan versiyonunu kodlamışlar:
String city= "izmir";
Locale tr= new Locale("tr","TR");
System.out.println(city.toUpperCase(tr));
Şimdi artık uygulamayı çalıştırdığımızda, ekranda olması gerektiği gibi "İZMİR" görüyoruz. toUpperCase metoduna parametre olarak Locale sınıfından yarattığımız ve Türkçe'yi ("tr") ve Türkiye'yi ("TR") tanımlayan bir nesne veriyoruz. 
Yerelleştirmeye zaman ile çalışırken de ihtiyaç duyuyoruz:
ZonedDateTime birthDate = ZonedDateTime.now();
Locale tr = new Locale("tr", "TR");
DateTimeFormatter dtf = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL).withLocale(tr);
System.out.println(dtf.format(birthDate));
Yerelleştirmeye ihtiyaç duyduğumuz diğer bir alan para birimleri:
double money= 12_345.67;
Locale tr= new Locale("tr","TR");
DecimalFormat nf= (DecimalFormat) DecimalFormat.getCurrencyInstance(tr);
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(tr);
dfs.setCurrencySymbol("\u20BA");
nf.setDecimalFormatSymbols(dfs);
System.out.println(nf.format(money));
Bu uygulamayı çalıştırdığımızda ekranda aşağıdaki çıktıyı göreceğiz:
12.345,67 ₺
Ekranda kullanıcıya gösterdiğimiz iletilerin de yerelleştirmesi gerekir. Örneğin, ekrana rapor üreten bir kodun, rapor üretim tarihini içeren iletisini, yerelleştirmeye çalışalım. Bunun için öncelikle, yerelleştirme desteği vermek istediğimiz her dil için bir metin dosyası oluşturuyoruz:
messages_tr.properties:
label.generate.time=Bu rapor {0} tarihinde üretilmiştir.
messages_en.properties:
label.generate.time=This report is generated at {0}.
Dosya adı iki parçadan oluşuyor: temel ad (örneğimizde messages) ve yerelleştirmek istediğimiz dilin ISO2 standardındaki kodu (tr ya da en gibi). Bu iki parça arasına alt çizgi (_) yerleştiriyoruz. Dosyanın uzantısını ise properties olarak veriyoruz. Dosyanın içeriği ise anahtar ve değer ikilisinden oluşuyor. Anahtar ile değer arasına eşitlik (=) sembolü atıyoruz. Anahtar (örneğimizde "label.generate.time") tüm yerelleştirme dosyalarında aynı olmalı, değer kısmı ise yerelleştirdiğimiz dile göre bir dosyadan diğerine değişecektir. Kodda ise bir dil dosyasından diğerine değişmeyen anahtar kelimeyi kullanıyoruz:
String BUNDLE_BASENAME = "messages";
Locale tr_TR = new Locale("tr", "TR");
ResourceBundle bundle = ResourceBundle.getBundle(BUNDLE_BASENAME, locale);
DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, locale);
Date now = new Date();
MessageFormat formatter = new MessageFormat(bundle.getString("label.generate.time"), locale);
System.out.println(formatter.format(new Object[] { df.format(now) }));
Değer kısmı, örneğimizde olduğu gibi parametrik olabilir. Parametreleri kıvırcık parantez  ({}) içinde parametre numarası vererek tanımlıyoruz: {0}, {1} gibi.



Sunday, January 10, 2016

Oracle Soa Suite 12c Cluster Kurulumu

Oracle kurumsal ihtiyaçlar için geliştirdiği çözümlerin tamamını orta katman mimarisine taşıyarak hem yönetim hem de geliştirme sürecini basitleştirmeyi başarmıştır. Bu çözümlerden biri de Servis Odaklı Mimari'ye uygun olarak uygulama geliştirmeye olanak sağlayan Oracle SOA Suite ürünüdür. Servis Odaklı Mimari (SOM) uygulamayı tekrar kullanılabilir, tek başına katma şirket için bir katma değer yaratan, açık standartlar üzerine kurulu ve biri biri ile gevşek bağlı servisler olarak inşa etmemizi tavsiye ediyor. Her mimari kalıpta olduğu gibi burada da SOM servislerin nasıl gerçeklenmesi gerektiği konusunda herhangi bir yönerge içermiyor. Ancak günümüzde SOM'un servislerini, SOAP/XML web servisleri olarak gerçekleştiriyoruz. XML Web servislerinde servisin arayüzü WSDL (Web Services Description Language)  dokümanında XML ve XML Schema kullanarak, herhangi bir programlama dilinden ya da platformdan bağımsız olarak tanımlanır. WSDL servisin tanımını iki bölüme ayırır:
  • Soyut arayüz
Soyut arayüz, servis tarafından desteklenen işlemler ve parametreleri, soyut veri tipleri gibi servise ilişkin genel özellikleri tanımlar. Bu tanımlamalar ağ adresi, ağ protokolü, veri gösterimi gibi bilgisayar ağ parametrelerinden tamamen bağımsızdır.

  • Katı gerçekleme
Gerçeklemeye ilişkin tanımlamalar, soyut arayüz tanımlarını gerçek ağ adresi, ağ protokolü ve gerçek veri tipleri ile eşleştirir. Hem soyut arayüz hem de katı gerçekleme tanımları XML elemanları aracılığı ile verilir. Sonuç olarak, WSDL dokümanı, http://schemas.xmlsoap.org/wsdl isim uzayında tanımlı XML Schema dokümanında tanımlı elemanlar kullanılarak oluşturulmuş bir XML dokümanıdır. XML Web servislerinde servisi çağıran istemci ile servisi gerçekleyen servis sağlayıcı arasında bir sözleşme işlevi görüyor. İstemci ile servis sağlayıcı arasındaki iletişim XML tabanlı bir mesajlaşma protokolü olan SOAP (Simple Object Access Protocol) aracılığı ile gerçekleşmektedir.
WSDL dokümanındaki XML Schema bu XML mesajın içeriğinin geçerliliğini sınamak için bir dizi kısıt içermektedir. Servis sağlayıcı WSDL ile soyut olarak tanımlanan servis arayüzünü herhangi bir platformda herhangi bir programlama dili kullanılarak gerçeklenebilir: Java EE, Spring WS, .Net. Servis sağlayıcı istemcinin servise ulaşabilmesi için WSDL dokümanını bir kayıt sunucusu olan UDDI sunucusuna kaydeder. İstemci de UDDI  (Universal Description, Discovery, and Integration) üzerinde servisin arayüzünün tanımına, WSDL dokümanına ulaşır. UDDI, WSDL kayıtlarını tutmak dışında sarı sayfalara benzer şekilde, şirket sınıflandırması, şirket bilgileri gibi bir çok farklı türde bilgiyi saklamak üzere tasarlanmış, olgun, kendini ispat etmiş bir teknolojidir. Ancak ağır sıklet bir çözüm sunmaktadır.  İstemci, Servis Sağlayıcı ve Kayıt Sunucusu arasındaki tüm haberleşme SOAP protokolü tarafından düzenlenir. 
Son yıllarda web uygulamalarında servislere erişim akıllı telefonlar ve tablet gibi mobil cihazlardan gerçekleşmektedir. Yine Nesnelerin İnterneti (Internet of Things, IoT) uygulamaları için daha ölçeklenebilir ve hafif sıklet bir mimari çözüme ihtiyaç bulunmaktadır. Bu amaçla uygulamaları tümleştirmek için SOAP Web Servislerine alternatif bir çözüm olarak REST mimarisinde servisler gerçekleştiriyoruz. REST mimarisinde kaynak farklı şekillerde kodlanabilir. Hatta aynı kaynağa erişen farklı iki istemciye farklı formatta sunum yapılabilir: birine JavaScript Object Notation (JSON), diğerine XML gibi. Oracle SOA Suite 12c'de servisler istenirse REST Web Servisi istenirse de SOAP Web Servisi olarak tasarlanabilir. Benzer şekilde SOA tümleşik uygulamaları REST ve SOAP Web Servislerini tüketebilirler.

Kuruluma Hazırlık

Kurulum için öncelikli olarak gerekli olan kurulum dosyalarını Oracle'ın web sitesinden indirmemiz gerekiyor. İndireceğimiz kurulum dosyaları üretim ortamı için olan sürümleri kapsayacaktır:
  • fmw_12.1.3.0.0_infrastructure.jar
  • fmw_12.1.3.0.0_soa.jar
Bu nedenle dosyaları https://edelivery.oracle.com adresli Oracle'ın web sitesinden indireceğiz:
https://edelivery.oracle.com
Kullanıcı adı ve parola girdikten sonra onaylamanız gereken yasal uyarı
Oracle SOA Suite for Oracle Middleware ürününü Linux x86-64 platformun için seçin
Oracle SOA Suite for Oracle Middleware 12.1.3 sürümünü seçin
Lisans şartlarını sonuna kadar okuyup, onaylayın!
V44416-01.zip ve V44420-01.zip
SOA kurulumu için uygulamanın verilerini kalıcı olarak saklamak üzere Oracle 12c, MS SQL, DB2 ya da MySQL  veritabanlarından birine ihtiyaç var. Üretim ortamı için Oracle 12c veritabanını kullanmanız uygun olur.

Orta Katman Altyapı Kurulumu

Önce Weblogic 12c kurulumunu gerçekleştiriyoruz:
/home/oracle>java -version
java version "1.7.0_55"
Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode)
/home/oracle>cd /install/soa/
/install/soa>ls
fmw_12.1.3.0.0_infrastructure.jar  fmw_12.1.3.0.0_soa.jar
/install/soa>hostname 
host01.example.com
/install/soa>java -d64 -jar fmw_12.1.3.0.0_infrastructure.jar 
Launcher log file is /tmp/OraInstall2016-01-06_12-14-30AM/launcher2016-01-06_12-14-30AM.log.
Extracting files....................................................................
Starting Oracle Universal Installer

Checking if CPU speed is above 300 MHz.   Actual 2992.654 MHz    Passed
Checking monitor: must be configured to display at least 256 colors.   Actual 16777216    Passed
Checking swap space: must be greater than 512 MB.   Actual 10479056 MB    Passed
Checking if this platform requires a 64-bit JVM.   Actual 64    Passed (64-bit not required)
Checking temp space: must be greater than 300 MB.   Actual 4400 MB    Passed


Preparing to launch the Oracle Universal Installer from /tmp/OraInstall2016-01-06_12-14-30AM
Log: /tmp/OraInstall2016-01-06_12-14-30AM/install2016-01-06_12-14-30AM.log
Kurulum karşılama ekranı
Oracle Home dizininin seçimi yapılır. Oracle Home yazılımın hangi dizine kurulacağını tanımlar.
Üretim ortamı için örnek uygulamalara ihtiyaç bulunmuyor.
Kurulum yapılacak platformun minimum şartları sağlayıp sağlamadığının kontrolü yapılıyor.
Oracle Support hesabı varsa tanımı burada yapılır.
Bu örnek kurulumda Oracle Support hesabı tanımı yapılmayacak.
Oracle Support hesabı tanımı yapılmadığı uyarısı alındı.
Sessiz kurulum için tüm bu seçimleri bir dosyaya almak uygun olur.
Seçimler bir dosyada saklanır: install_fmw_infra.rsp
Kurulum başladı
Kurulum ilerliyor.
Kurulum tamamlanmak üzere.
Kurulum tamamlandı
8. Adım: kurulum rapor ekranı

SOA Suite 12c Kurulumu

Şimdi SOA Suite kurulumunu gerçekleştiriyoruz:
/home/oracle>hostname
host01.example.com
/home/oracle>cd /install/soa/
/install/soa>ls
fmw_12.1.3.0.0_infrastructure.jar  fmw_12.1.3.0.0_soa.jar  install_fmw_infra.rsp
/install/soa>java -d64 -jar fmw_12.1.3.0.0_soa.jar 
Launcher log file is /tmp/OraInstall2016-01-06_01-07-09AM/launcher2016-01-06_01-07-09AM.log.
Extracting files....................................................
Starting Oracle Universal Installer

Checking if CPU speed is above 300 MHz.   Actual 2992.654 MHz    Passed
Checking monitor: must be configured to display at least 256 colors.   Actual 16777216    Passed
Checking swap space: must be greater than 512 MB.   Actual 10479056 MB    Passed
Checking if this platform requires a 64-bit JVM.   Actual 64    Passed (64-bit not required)
Checking temp space: must be greater than 300 MB.   Actual 2800 MB    Passed


Preparing to launch the Oracle Universal Installer from /tmp/OraInstall2016-01-06_01-07-09AM
Log: /tmp/OraInstall2016-01-06_01-07-09AM/install2016-01-06_01-07-09AM.log
Kurulum karşılama ekranı
Oracle Home dizininin seçimi yapılır. Oracle Home yazılımın hangi dizine kurulacağını tanımlar.
Sadece SOA Suite kurulumu gerçekleştirmek istiyoruz
BPM Suite kurulumu, SOA Suite kurulumunu kapsar, fazladan BPM bileşenlerini içerir.
Kurulum yapılacak platformun minimum şartları sağlayıp sağlamadığının kontrolü yapılıyor.
Sessiz kurulum için tüm bu seçimleri bir dosyaya almak uygun olur.
Seçimler bir dosyada saklanır: install_soa.rsp
Kurulum başladı
Kurulum ilerliyor
Kurulum tamamlandı
Kurulum rapor ekranı
Cluster'daki Diğer Düğümlerde Kurulum

Domain'deki diğer düğümlerde sessiz kurulum yapacağız:
/home/oracle>java -version
java version "1.7.0_55"
Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode)
/home/oracle>cd /install/soa/
/install/soa>java -d64 -jar fmw_12.1.3.0.0_infrastructure.jar -silent -responseFile /practices/practice^C
/install/soa>cp /home/oracle/silent/*.rsp .
/install/soa>java -d64 -jar fmw_12.1.3.0.0_infrastructure.jar -silent -responseFile /install/soa/install_fmw_infra.rsp 
Launcher log file is /tmp/OraInstall2016-01-08_10-16-15PM/launcher2016-01-08_10-16-15PM.log.
Extracting files.......................................................................................
Starting Oracle Universal Installer

Checking if CPU speed is above 300 MHz.   Actual 2992.514 MHz    Passed
Checking swap space: must be greater than 512 MB.   Actual 10485752 MB    Passed
Checking if this platform requires a 64-bit JVM.   Actual 64    Passed (64-bit not required)
Checking temp space: must be greater than 300 MB.   Actual 20488 MB    Passed


Preparing to launch the Oracle Universal Installer from /tmp/OraInstall2016-01-08_10-16-15PM
Log: /tmp/OraInstall2016-01-08_10-16-15PM/install2016-01-08_10-16-15PM.log
Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
Reading response file..
Starting check : CertifiedVersions
Expected result: One of enterprise-4,enterprise-5,enterprise-6,redhat-6,redhat-4,redhat-5,SuSE-11
Actual Result: enterprise-6
Check complete. The overall result of this check is: Passed
CertifiedVersions Check: Success.
Starting check : CheckJDKVersion
Expected result: 1.7.0_15
Actual Result: 1.7.0_55
Check complete. The overall result of this check is: Passed
CheckJDKVersion Check: Success.
Validations are enabled for this session.
Verifying data......
Copying Files...
You can find the log of this install session at:
 /tmp/OraInstall2016-01-08_10-16-15PM/install2016-01-08_10-16-15PM.log
-----------20%----------40%----------60%----------80%--------100%

The installation of Oracle Fusion Middleware 12c Infrastructure 12.1.3.0.0 completed successfully.
Logs successfully copied to /u01/app/oraInventory/logs.
/install/soa>java -d64 -jar fmw_12.1.3.0.0_soa.jar -silent -responseFile /install/soa/install_soa.rsp 
Launcher log file is /tmp/OraInstall2016-01-08_10-24-58PM/launcher2016-01-08_10-24-58PM.log.
Extracting files...............................................................
Starting Oracle Universal Installer

Checking if CPU speed is above 300 MHz.   Actual 2992.514 MHz    Passed
Checking swap space: must be greater than 512 MB.   Actual 10485752 MB    Passed
Checking if this platform requires a 64-bit JVM.   Actual 64    Passed (64-bit not required)
Checking temp space: must be greater than 300 MB.   Actual 18890 MB    Passed


Preparing to launch the Oracle Universal Installer from /tmp/OraInstall2016-01-08_10-24-58PM
Log: /tmp/OraInstall2016-01-08_10-24-58PM/install2016-01-08_10-24-58PM.log
Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
Reading response file..
Starting check : CertifiedVersions
Expected result: One of enterprise-4,enterprise-5,enterprise-6,redhat-6,redhat-4,redhat-5,SuSE-11
Actual Result: enterprise-6
Check complete. The overall result of this check is: Passed
CertifiedVersions Check: Success.
Starting check : CheckJDKVersion
Expected result: 1.7.0_15
Actual Result: 1.7.0_55
Check complete. The overall result of this check is: Passed
CheckJDKVersion Check: Success.
Validations are enabled for this session.
Verifying data......
Copying Files...
You can find the log of this install session at:
 /tmp/OraInstall2016-01-08_10-24-58PM/install2016-01-08_10-24-58PM.log
-----------20%----------40%----------60%----------80%--------100%

The installation of Oracle Fusion Middleware 12c SOA Suite and Business Process Management 12.1.3.0.0 completed successfully.
Logs successfully copied to /u01/app/oraInventory/logs.
/install/soa>

RCU Kurulumu

SOA Suite çalışması için gerekli tüm bilgileri veri tabanında tablolarda saklar. Veritabanındaki bu tabloların yaratılması ve ilklendirilmesi için kurulumla birlikte gelen RCU (Repository Creation Unit) yazılımını kullanıyoruz:
/install/soa>hostname
host01.example.com
/install/soa>cd /u01/oracle/product/fmw/oracle_common/bin
/u01/oracle/product/fmw/oracle_common/bin>./rcu
Kurulum karşılama ekranı
Tabloları yaratmak istiyoruz. İstenirse daha sonra veritabanı yöneticisi tarafından kullanılmak üzere tabloları yaratacak ve ilklendirecek betiklerin hazırlanması sağlanabilir. Tabloları silmek için de bu araç kullanılabilir.
Veritabanı bağlantılarının girildiği ekran
Veritabanı sunucusunun gereken şartları sağlayıp sağlamadığının kontrolü yapılıyor
Tablo adlarının EDG ön eki ile yaratılmasını sağladık. Ön ek seçimi ile aynı veritabanında farklı amaçlarla DEV, TEST, PREPROD, PROD repository yaratılabilinir. Hem Weblogic altyapısı hem de SOA Suite için gerekli tüm tablolar seçilir.
Tabloların yaratılabilmesi için gerekli kontroller yapılıyor
Repository kullanıcı parolası veriliyor. Hepsi için aynı parolayı vermeyi tercih ettik. İstenirse her biri için ayrı ayrı parola tanımlanabilir

Yaratılacak Tablo Alanları listeleniyor
Tablo alanları yaratılmadan önce işlemde ne yapılacağının uyarı yapılıyor
Tablo alanları yaratılıyor
Tablo alanları yaratıldı
Tablolar yaratılmadan önceki rapor ekranı
Tablolar yaratılmaya başlandı
Tablolar yaratılıyor, sürecin ortalarındayız
Tablolar yaratılıyor, bitmek üzere!
Son rapor ekranı

Domain Kurulumu

Domain krulumu için config.sh betiğini çalıştırıyoruz:



/u01/oracle/product/fmw/oracle_common/common/bin>./config.sh


Domain dizinini belirliyoruz
Domain'nin hangi yeteneklere sahip olacağını belirliyoruz: SOA Suite, BAM, ESS, EM, Coherence
Bir önceki ekranda seçtiğimiz web uygulamalarının hangi dizine kurulumunun yapılacağına karar veriyoruz
Admin yetkisindeki kullanıcıya ve parolasına karar veriyoruz
Üretim ortamı için kurulum yapılacağının seçimine ve kullanılacak JDK sürümüne karar verdik
RCU ile yaratılan Repository'nin yer aldığı Veri tabanının tanıtımını yapıyoruz
Tanıtımını yaptığımız veritabanı erişimi denetleniyor

RCU ile yaratılan veri tabanı şemaları denetleniyor
Denetim başarı ile tamamlandı
Domain yapılandırmasında hangi başlıkların yapılandırılacağının seçimi yapılıyor 
Her domain'in mutlaka ve en fazla bir tane Admin sunucusu olması gerekir. Bu sunucunun tanımı veriliyor.
Admin sunucusu dışındaki diğer sunucular Yönetilen  Sunucu (Manager Server) olarak isimlendirilir. Bu sunucuları uzaktan yönetmek için Düğüm Yöneticisi (Node Manager) servisi kullanılır. Düğüm Yöneticisi servisleri için kullanıcı ve parola tanımlaması yapılıyor.
Yönetilen Sunucuların tanımlamaları yapılıyor: ess_server, bam_server, soa_server1, soa_server2, lbr_server
Bu örnek domain kurulumunda, ESS sunucusu (ess_server) orta katmanda periyodik olarak çalıştırılması gereken görevlerin çalıştırılması için kullanılacaktır. BAM sunucusu iş süreçlerinin başarımını gerçek zamanlı olarak izlemek için kullanmayı planlıyoruz. İki düğümlü bir SOA kümeleme (=cluster) çözümü kurmayı planlıyoruz. Bu kümenin iki sunucusu soa_server1 ve soa_server2 düğümü olacak. Her kümeleme çözümünde bir yük dengeleyiciye ihtiyaç bulunur. Bu örnek kurulumda, yük dengeleyici olarak bir Weblogic sunucusu kullanacağız: lbr_server. Üretim ortamı için ise donanımsal bir yük dengeleyicisi kullanmak uygun olur. 
Kümeleme tanımı yapılıyor. Yük dengeleyici için adres ve port numaraları tanımlanıyor.
Kümeleme için sunucular seçiliyor: soa_server1 ve soa_server2.
Yük dengeleyici yapılandırılması için sunucu seçimi yapılıyor.
Coherence kümeleme çözümünde Session bilgilerini dağıtık ve her zaman erişilebilir olacak şekilde saklayacak dağıtık cep bellek (Distributed Cache) sunucusu görevini yerine getirecek.
Node Manager tanımlamaları burada yapılıyor. 
Hangi Node Manager'ın hangi sunucuyu yöneteceğinin eşlemesi burada yapılıyor.
Kümelemede son kullanıcıya hangi adres üzerinden hizmet verileceğinin tanımını bu ekrandan yapıyoruz.
JMS sunucuları için mesajların saklanacağı dosyanın dizinlerinin tanımlaması bu ekranda yapılıyor
Domain yaratılmaya başlanmadan için yapılacak işlemlerin  ve tanımlamaların listesi bu ekranda listeleniyor
Domain yaratılıyor: %36
Domain yaratılıyor: %45
Domain yaratılıyor: %55
Domain neredeyse yaratılmak üzere!
Domain yaratıldı
Domain'i diğer makinalara taşıyabilmek için pack.sh komutunu kullanarak önce Domain'in bir şablonunu alacağız. Diğer makinalarda ise unpack.sh komutunu kullanarak Domain'in diğer makinalarda da yaratılmasını sağlamış olacağız:
/u01/oracle/product/fmw/oracle_common/common/bin>./pack.sh -managed=true -domain=/u02/oracle/config/domains/edg_domain -template=~/edgdomain_template.jar -template_name=edgdomain
Diğer makinalarda bu şablondan domain'i oluşturmak için ise aşağıdaki komutu çalıştırıyoruz:
/u01/oracle/product/fmw/oracle_common/common/bin>./unpack.sh -domain=/u01/oracle/config/domains/edg_domain -overwrite_domain=true -template=~/edgdomain_template.jar -log_priority=DEBUG -log=~/edgdomain.log -app_dir=/u02/oracle/config/applications/edg_domain 
Domain'in EM (Enterprise Manager) üzerinden yönetilmesi, başarımının izlenmesi ve en iyilenmesi konularını bir sonraki yazıda inceleyeceğiz.