Java SE 6 RMI-CORBA       Eğitimi   Mehmet Sinan Şahin
Konu Başlıkları•   Ön Çalışma     –    ClassLoader (Yerel dosya, Ağ)     –    Socket, Serialization•   RMI     –    RMI Mi...
Giriş• Örnek Uygulamalar Eclipse/Netbeans  Uygulama geliştirme aracıyla yapılacaktır.• Web server (RMI dynamic class loadi...
Kısaltmalar, AçıklamalarJVM                           Java Virtual MachineIDL                           Interface Definiti...
Ön Çalışma• ClassLoader  – Java, gerekli olan sınıfları yükler,    bytecode’ları jvm çalıştırır.  – Java applet’lerde, ağd...
ClassLoader URL-tabanlı Sınıf         Yükleme                                        ClassLoader                          ...
RMI Açıklama•   Dağıtık nesne modelleri:     – JVM1  JVM2 (RMI)     – Birlikte çalışabilirklik (Interoperability)     – ...
RMI transient naming• RMI kayıt defteri• Uzak nesnelerin, istemciler tarafından  kullanılması için, kendilerini bir regist...
RMI bootstrap• RMI istemcinin uzak metodu çalıştıracak  stub’ı alması için gerekli olan mekanizma  – RMI Registry  – LDAP ...
RMI Mimari•   Uygulama Katmanı: Sunucu programı ve    istemci programı.•   Stub ve Skeleton Katmanı: İstemcide, uzak    ne...
RMI Mimari           Uzak Sınıf yükleme                      Uzak Sınıf yüklemeİstemci                   2. Servis ara (lo...
RMI MimariRMI çalışma zamanında olanlar•   RMI registry başlatılır ve servis kaydedilir.•   İstemci servisi rmi registry’d...
RMI serialization• Serialization, java’nın özelliklerinden biridir.  Nesnenin (Serializable arayüzünü gerçekletiren  sınıf...
Dynamic RMI• ClassLoader (CLASSPATH, Ağ)• Sınıf dosyaları (.class, jar) ağ’da biryerde  olabilir. ClassLoader yardımıyla s...
Java codebase• JVM’ye sınıf tanımlarının yüklendiği yer• JVM codebase’den sınıf tanımlarını  (özellikle uzak sınıflar) yük...
Örnek RMI uygulama - Giriş• Compute Engine uygulaması• Arayüzler tanımlanacak   – Compute.java• Sunucu tasarlanacak   – Co...
Örnek RMI uygulama - Sunucu• Arayüz (rmi-interfaces)   public interface Compute extends Remote { <T> T executeTask(Task<T>...
Örnek RMI uygulama – Sunucu                (main)•   Sunucu main metot.     if (System.getSecurityManager() == null) {    ...
Örnek RMI uygulama - İstemci• Hangi Task?  Pi’nin hesaplanması(rmi-client)  public class Pi implements Task<BigDecimal>, ...
Örnek RMI uygulama – İstemci             (main)• İstemci main metot.  //ya da VM parametresi  -Djava.security.manager  if...
Derleme ve Çalıştırma• Derlerme    – Eclipse çalışma ortamında üç proje var; interfaces, server, client.         • server ...
RMI Güvenlik (java 1.2 +)• SecurityManager  if (System.getSecurityManager() == null) {    System.setSecurityManager(new Se...
CORBA vs RMICORBA ve RMI teknolojilerini karşılaştırmak, corba, rmi’dan iyidir demek gerçekçibir yöntem olmayacaktır. Onun...
CORBA vs RMI          CORBA Olumlu Yönler                          CORBA Olumsuz YönlerServisler birden çok programlama di...
Muhtemel Hatalar java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:            ...
Kaynakça• http://docs.oracle.com/javase/tutorial/rmi/index.html• http://www.omg.org• http://docs.oracle.com/javase/1.4.2/d...
• Proxy[Compute,RemoteObjectInvocationH  andler[UnicastRef [liveRef: [endpoint:  [10.251.100.80:50156](remote),objID:  [49...
Upcoming SlideShare
Loading in …5
×

java 6 (rmi-corba) education

1,042 views

Published on

Java 6 rmi education in Turkish

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,042
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

java 6 (rmi-corba) education

  1. 1. Java SE 6 RMI-CORBA Eğitimi Mehmet Sinan Şahin
  2. 2. Konu Başlıkları• Ön Çalışma – ClassLoader (Yerel dosya, Ağ) – Socket, Serialization• RMI – RMI Mimari – RMI transient naming – RMI bootstrap – RMI serialization – Dynamic RMI (http://docs.oracle.com/javase/1.4.2/docs/guide/rmi/codebase.html ) – Örnek RMI uygulama - sunucu tarafı giriş – Örnek RMI uygulama - istemci tarafı giriş – Örnek RMI uygulama - sunucu tarafı – Örnek RMI uygulama - istemci tarafı – Örnek RMI uygulama• CORBA vs RMI• CORBA – CORBA services – RMI ve CORBA güvenlik – Gözden geçirme – Örnek CORBA uygulama - sunucu tarafı giriş – Örnek CORBA uygulama - istemci tarafı giriş – Örnek CORBA uygulama - sunucu tarafı – Örnek CORBA uygulama - istemci tarafı – Örnek CORBA uygulam• Kaynakça
  3. 3. Giriş• Örnek Uygulamalar Eclipse/Netbeans Uygulama geliştirme aracıyla yapılacaktır.• Web server (RMI dynamic class loading)• RMI eğitimi ve örnek uygulamalar http://docs.oracle.com/javase/tutorial/rmi/index deki açıklamalara göre yapılacaktır.
  4. 4. Kısaltmalar, AçıklamalarJVM Java Virtual MachineIDL Interface Definition LanguageRRM (Remote Reference Manager) Ağ iletişimi, soket bağlantıları ve uzak işlem uzaylarının iletişimini yönetir.RRL Remote Reference LayerRPC Remote Procedure Call (Uzak yordam çağrısı)Sunucu (RMI server) Uzak Sanal makinada (JVM) koşan işlemİstemci (RMI client) Uzak sanal makinaya rmi ile bağlanıp, uzaktan nesne üzerinde metod çağrısı yapan program.Kayıt Defteri (rmiregistry) RMI sunucu nesnelerinin kaydolduğu yer.Skeleton Sunucuda uzak nesne metot çağrılarını yapar.Stub İstemcide uzak nesne için proxy görevi görür.IIOP Internet InterOperable Protocol, CORBA’nın iletişim protokolü.ORB Object Request BrokerRMI-IIOP Programcı’nın OMG-IDL bilmeden CORBA yazmasını sağlar.
  5. 5. Ön Çalışma• ClassLoader – Java, gerekli olan sınıfları yükler, bytecode’ları jvm çalıştırır. – Java applet’lerde, ağdan sınıf yükleme özelliği kullanılır. – RMI kapsamında, dynamic loading ‘i ağdan sınıf yüklemeye benzetebiliriz.
  6. 6. ClassLoader URL-tabanlı Sınıf Yükleme ClassLoader •defineClass •resolveClass StreamClassLoader URLClassLoader •Hashtable classCache •InputStream source •URL classURL •InputStream classStream •parseClassName •initStream •readClass •loadClass
  7. 7. RMI Açıklama• Dağıtık nesne modelleri: – JVM1  JVM2 (RMI) – Birlikte çalışabilirklik (Interoperability) – Transparency: Java’nın bütün özellikleri (nesne, kalıtım, çok biçimlilik, referanslar, aykırı durumlar) kullanılır.• RMI Sun (Oracle) tarafından geliştirilmiş dağıtık nesne modelidir.• RMI Özellikleri – ORB • Uygulama Arayüzlerini tanımlar • Uygulamaları ağda arar ve bulur • Uygulamların mesaj göndermesini ve sonucun alınmasını sağlar. – Adlandırma Servisi (Naming Servis) • Geçici ve hiyerarşisi olmayan bir tablo işlevi görür. Tabloda uzak nesnelerin isimleri ve referansları bulunur: rmiregistry – Arayüz Tanım Dili (IDL) • interface java.rmi.Remote – Dinamik sınıf yükleme• RMI, java’nın “built-in native” ORB’sidir.
  8. 8. RMI transient naming• RMI kayıt defteri• Uzak nesnelerin, istemciler tarafından kullanılması için, kendilerini bir registry’ye kaydetmeleri gerekiyor.• Kaydetme isim ve referans şeklinde bir map’e (registry) kaydediliyor.• Registry erişilebilir olmadığı durumlar kayıtlı bütün uzak nesneler tekrar kaydedilmeli.
  9. 9. RMI bootstrap• RMI istemcinin uzak metodu çalıştıracak stub’ı alması için gerekli olan mekanizma – RMI Registry – LDAP sunucu (JNDI), LDAP sağlayıcı kullanarak• RMI Registry, uzaktaki nesnenin kaydını tutuyor (isim, ip, stub). İstemci registry’yi isme göre sorgulayarak stub’ı alıyor.
  10. 10. RMI Mimari• Uygulama Katmanı: Sunucu programı ve istemci programı.• Stub ve Skeleton Katmanı: İstemcide, uzak nesne çağrılarını RRL’nin anlayacağı şekilde yorumlar. (Proxy)• RRL: İstemci ve sunucu’da bulunur. Bağlantıyı yönetir, nesne çağrılarını gönderir veya alır.• İletim (Transport) Katmanı: Ağdaki TCP/IP bağlantıları.
  11. 11. RMI Mimari Uzak Sınıf yükleme Uzak Sınıf yüklemeİstemci 2. Servis ara (lookup) Sunucu RMI registry / JNDI İstemci 3. Stub nesneleri Sunucu 1. Stub yükle nesneleri 4. Uzak nesnelerin metod çağrısı Stub Skeleton 5. Sonuçlar veya Aykırı durum RRM RRM ~SerializationRMI Transport Katmanı RMI Transport Katmanı
  12. 12. RMI MimariRMI çalışma zamanında olanlar• RMI registry başlatılır ve servis kaydedilir.• İstemci servisi rmi registry’de arar.• İstemci işlem uzayında servisin stub’ı elde edilir.• İstemci, stub’da metodları çağırır. Stub, sunucu işlem havuzunda RRM yardımıyla Skeletonu çağırır.• Skeleton, uzak nesne üzerinde gerçek metod çağrısını yapar. Sonuç, istemciye Stub ve RRM yardımıyla gönderilir. 4. ve 5. adımlar mantıksal olarak gösterilmiştir. Asıl işlem RRM tarafından gerçekleştirilmektedir. Bu katman ağ iletişimini yönetir ve soket bağlantılarını ele alır.
  13. 13. RMI serialization• Serialization, java’nın özelliklerinden biridir. Nesnenin (Serializable arayüzünü gerçekletiren sınıftan türeyen) bir stream’e (dosya, soket, bellek vb.) yazılmasını sağlar.• Yazılan bir nesne, daha sonra tekrar işlem hazunda bir nesne olarak yaratılabilir. Uzak makinaya parametre olarak gönderilen nesneler serialization işlemi yardımıyla gönderilir ve sonuçlar serialization işlemi yardımıyla alınır.
  14. 14. Dynamic RMI• ClassLoader (CLASSPATH, Ağ)• Sınıf dosyaları (.class, jar) ağ’da biryerde olabilir. ClassLoader yardımıyla sınıflar, işlem havuzuna çalışma zamanında alınabilir.
  15. 15. Java codebase• JVM’ye sınıf tanımlarının yüklendiği yer• JVM codebase’den sınıf tanımlarını (özellikle uzak sınıflar) yükler• CLASSPATH yerel codebase olarak düşünülebilir.
  16. 16. Örnek RMI uygulama - Giriş• Compute Engine uygulaması• Arayüzler tanımlanacak – Compute.java• Sunucu tasarlanacak – ComputeEngine.java• İstemci tasarlanacak – ComputeTask.java• IDE’de üç tane proje tanımlanacak Require Require – rmi-interfaces – rmi-server – rmi-client (Dosya, URL) Sınıf Yükleme SecurityManager
  17. 17. Örnek RMI uygulama - Sunucu• Arayüz (rmi-interfaces) public interface Compute extends Remote { <T> T executeTask(Task<T> t) throws RemoteException; } public interface Task<T> { T execute(); }• Gerçekleştirim (rmi-server) public class ComputeEngine implements Compute { @Override public <T> T executeTask(Task<T> t) throws RemoteException { System.out.println("Executing " + t.name() + " :: " + new Date()); return t.execute(); } }
  18. 18. Örnek RMI uygulama – Sunucu (main)• Sunucu main metot. if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); } int port = Registry.REGISTRY_PORT; if (args.length > 0) {port = Integer.parseInt(args[0]);} try { Compute engine = new ComputeEngine(); Compute stub = (Compute) UnicastRemoteObject.exportObject(engine, 0); Registry registry = LocateRegistry.createRegistry(port); System.out.println(String.format("RMI registry başladı, port: %d", port)); registry.rebind(NAME, stub); for (String string : registry.list()) { Remote remote = registry.lookup(string); System.out.println(remote); } System.out.println("ComputeEngine bağlandı"); } catch (Exception e) { e.printStackTrace(); }
  19. 19. Örnek RMI uygulama - İstemci• Hangi Task?  Pi’nin hesaplanması(rmi-client) public class Pi implements Task<BigDecimal>, Serializable { //ilklendirmeler public BigDecimal execute() { return computePi(digits); } public static BigDecimal computePi(int digits) { … } }
  20. 20. Örnek RMI uygulama – İstemci (main)• İstemci main metot. //ya da VM parametresi  -Djava.security.manager if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); } try { Registry registry = LocateRegistry.getRegistry(args[0]); Compute comp = (Compute) registry.lookup(name); Pi task = new Pi(Integer.parseInt(args[1])); BigDecimal pi = comp.executeTask(task); System.out.println(pi); } catch (Exception e) { e.printStackTrace(); }
  21. 21. Derleme ve Çalıştırma• Derlerme – Eclipse çalışma ortamında üç proje var; interfaces, server, client. • server ve client projeleri interfaces projesini required olarak eklemeliler derlenmesi için. • interfaces projesi ve client projesi için interfaces.jar ve client.jar oluşturup web sunucudaki erişilmesi izne tabi olmayan bir yerde yayınlayalım.• Çalıştırma – VM parametreleri • -Djava.security.policy=server.policy • -Djava.rmi.server.codebase=“http://ip:port/interface.jar http://ip:port/hibernate4/client.jar” • -Djava.rmi.server.hostname=ip• İstemci – VM parametreleri • -Djava.security.policy=server.policy • -Djava.rmi.server.codebase=http://ip:port/interface.jar • -Djava.rmi.server.hostname=ipNOT: Oracle’ın eğitim dokümanlarındaki anlatımlar Eclipse geliştirme aracı olmadan yapılan ve rmi dinamik yüklemesinin aynı sunucu üzerinde dosya sistemi üzerinden yapılan anlatımlardır. Geliştiriciler dokümanlardaki anlatımları yapabilirler.
  22. 22. RMI Güvenlik (java 1.2 +)• SecurityManager if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); } Veya -Djava.security.manager• Policy• Policy dosyaları .policy
  23. 23. CORBA vs RMICORBA ve RMI teknolojilerini karşılaştırmak, corba, rmi’dan iyidir demek gerçekçibir yöntem olmayacaktır. Onun yerine her iki standardın da olumlu ve olumsuzyönlerini tablo şeklinde göstereceğiz. RMI Olumlu Yönler RMI Olumsuz YönlerBirden çok platforma taşınabilir. Platformlarda JVM çalışmalı.Uzak sanal makinelere yeni sınıflar Uzak yordam çağrısında güvenlik kaygısı,yüklenebilir. İki taraf da java olduğu için kullanımı kısıtlıyor.java’nın bütün özellikleri kullanılabilir.Geliştiriciler aşinalar. JDK1.02’den beri RMI deneyimine sahip olmayan geliştiricilerkütüphanede. için öğrenme süreci CORBA ile karşılaştırılabilir.Varolan sistemler RMI kullanabilir. Zaman JVM çalışan sistemlerde kullanılabilir. Javave maliyet kazancı sağlanır. dışında yazılan diğer programlama dilleriyle (C++, Ada, Cobol vd.) çalışan sistemlerle konuşamaz.
  24. 24. CORBA vs RMI CORBA Olumlu Yönler CORBA Olumsuz YönlerServisler birden çok programlama dilinde IDL öğrenilmeli.geliştirilebilir ve “IDL mapping” ile değişik http://www.omg.org/gettingstarted/omg_idl.htmprogramlama diliyle geliştirilen sistemlerdenerişilebilir.IDL yardımıyla arayüzler, geliştirimden IDLKaynak kodu araçları mevcuttur. Bazıtamamen bağımsız hale getirilmiştir. araçlar IDL değişiklikleri uyumlu olmayabilir.Birçok veri yapısını destekler. Parametrik Sistemler arasında nesneler veya kodolarak sistemler arasında iletişimi sağlar. transfer edilmez. Geleceği belirsiz.CORBA sistemleri (nesneler) Eğitim gereklidir. CORBA Belirtimlerikonuşturmanın kolay yoludur. devamlı değişiyor.Performansı yüksektir. Performans gerekmeyen çok durum olabilir. Belki java ile yazılan sistemlerin kullanımının maliyet düşüklüğü daha geçerli olabilir.
  25. 25. Muhtemel Hatalar java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: java.net.SocketException: Connection reset at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:286) at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184) at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322) at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source) at compute.ComputeEngine.main(ComputeEngine.java:29)•rmiregistry başlatılmamış olabilir. LocateRegistry.createRegistry(1099);•İstemci’nin aradığı rmi sunucu bulunamamış olabilir. •RMI sunucu var olabilir fakat remote object kayıtlı değildir. •RMI sunucu, girilen ip ve portta çalışmıyordur. java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is: java.io.EOFException at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:209) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142) at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178) at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132) at $Proxy0.executeTask(Unknown Source) at client.ComputeTask$1.run(ComputeTask.java:47) at java.lang.Thread.run(Thread.java:619) Caused by: java.io.EOFException at java.io.DataInputStream.readByte(DataInputStream.java:250) at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:195)Rmi sunucu’da izin olmayabilir (.policy dosyasındaki permission)
  26. 26. Kaynakça• http://docs.oracle.com/javase/tutorial/rmi/index.html• http://www.omg.org• http://docs.oracle.com/javase/1.4.2/docs/guide/rmi/codebase.html
  27. 27. • Proxy[Compute,RemoteObjectInvocationH andler[UnicastRef [liveRef: [endpoint: [10.251.100.80:50156](remote),objID: [494fa0d7:13af4825ddd:-7fff, -1623847688485003247]]]]]

×