Distribuované systémy a výpočty
Transkript
Distribuované systémy a výpočty X36DSV Jan Janeček Peter Macejko CORBA Common Object Request Broker Architecture - konsorcium OMG (Object Management Group) - standard pro podporu komunikace v DS - pouze specifikace X36DSV - Distribuované systémy a výpočty (5 v1.2) 2 CORBA Common Object Request Broker Architecture - procedurální komunikace - programová sběrnice - objektový přístup - podpora složitějších forem chování serveru X36DSV - Distribuované systémy a výpočty (5 v1.2) 3 CORBA - architektura ORB – Object Request Broker DII/DSI – Dynamic Invocation Interface / Dynamic Skeleton Interface IR/IMR – Interface Repository / Implementation Repository OA – Object Adapters IIOP – Internet Inter-ORB Protocol X36DSV - Distribuované systémy a výpočty (5 v1.2) 4 CORBA - architektura X36DSV - Distribuované systémy a výpočty (5 v1.2) 5 CORBA - architektura X36DSV - Distribuované systémy a výpočty (5 v1.2) 6 CORBA broker – klient - server X36DSV - Distribuované systémy a výpočty (5 v1.2) 7 CORBA registrace serveru X36DSV - Distribuované systémy a výpočty (5 v1.2) 8 CORBA komunikace klient - server X36DSV - Distribuované systémy a výpočty (5 v1.2) 9 CORBA komunikace X36DSV - Distribuované systémy a výpočty (5 v1.2) 10 CORBA komunikace X36DSV - Distribuované systémy a výpočty (5 v1.2) 11 CORBA - IDL module StockObjects { struct Quote { string symbol; long at_time; double price; long volume; }; exception Unknown{}; interface Stock { Quote get_quote() raises(Unknown); void set_quote(in Quote stock_quote); readonly attribute string description; }; interface StockFactory { Stock create_stock( in string symbol, in string description ); }; }; X36DSV - Distribuované systémy a výpočty (5 v1.2) 12 CORBA - příklad Pro IONA Orbix – průmyslový CORBA standard Definice rozhraní interface Hello { string sayHello(); }; a jeho překlad idl Hello.idl; X36DSV - Distribuované systémy a výpočty (5 v1.2) 13 CORBA - příklad Hello.java - rozhraní klienta _HelloStub.java - stub klienta _HelloSkeleton.java - stub serveru HelloPackage/ - definice typů definovaných rozhraním _HelloImplBase.java - základ pro implementaci serveru ... X36DSV - Distribuované systémy a výpočty (5 v1.2) 14 CORBA - příklad Hello.java - přeložené rozhraní klienta public interface Hello extends org.omg.CORBA.Object { public String sayHello() ; public java.lang.Object _deref() ; } X36DSV - Distribuované systémy a výpočty (5 v1.2) 15 CORBA - příklad _HelloImplBase.java - základní objekt pro implementaci serveru import IE.Iona.OrbixWeb._OrbixWeb; public abstract class _HelloImplBase extends _HelloSkeleton implements Hello { public _HelloImplBase() { org.omg.CORBA.ORB.init().connect(this); } ... public java.lang.Object _deref() { return this; } } X36DSV - Distribuované systémy a výpočty (5 v1.2) 16 CORBA - příklad Kód metod serveru public class HelloImplementation extends _HelloImplBase { public String sayHello() { return "Hello World"; } } a konečně samotný server . . . X36DSV - Distribuované systémy a výpočty (5 v1.2) 17 CORBA - příklad import IE.Iona.OrbixWeb._CORBA; import IE.Iona.OrbixWeb.CORBA.ORB; public class HelloServer { public static void main (String args[]) { org.omg.CORBA.ORB ord = org.omg.CORBA.ORB.init(); try { Hello server = new HelloImplementation(); _CORBA.Orbix.impl_is_ready( "HelloServer" ); System.out.println("Server going Down"); } catch ( org.omg.CORBA.SystemException corbaError) { System.out.println("Exception " + corbaError); } } } X36DSV - Distribuované systémy a výpočty (5 v1.2) 18 CORBA - příklad Překlad kódů serveru Hello.java _HelloSkeleton.java _HelloImplBase.java HelloImplementation.java HelloServer.java Start name servisu orbixdj -textConsole registrace serveru putit HelloServer -java HelloServer spuštění serveru java HelloServer X36DSV - Distribuované systémy a výpočty (5 v1.2) 19 CORBA - příklad Kód klienta import IE.Iona.OrbixWeb._CORBA; import org.omg.CORBA.ORB; public class HelloClient { public static void main(String args[]) { ORB.init(); String hostname = "eli.sdsu.edu"; String serverLabel = ":HelloServer"; Hello server = HelloHelper.bind( serverLabel, hostname); System.out.println( server.sayHello() ); } } X36DSV - Distribuované systémy a výpočty (5 v1.2) 20 CORBA - příklad Překlad souborů klienta _HelloStub.java HelloClient.java a jeho spuštění java HelloClient X36DSV - Distribuované systémy a výpočty (5 v1.2) 21 JMS Java Messaging Service Předávání zpráv - vyšší pružnost - vyšší složitost - podpora Java, J2EE servers Mechanismy - asynchronní point-to-point - synchronní point-to-point - Publish / Subscribe X36DSV - Distribuované systémy a výpočty (5 v1.2) 22 JMS architektura X36DSV - Distribuované systémy a výpočty (5 v1.2) 23 JMS point-to-point komunikace X36DSV - Distribuované systémy a výpočty (5 v1.2) 24 JMS publish/subscribe komunikace X36DSV - Distribuované systémy a výpočty (5 v1.2) 25 JMS Java Messaging Service API X36DSV - Distribuované systémy a výpočty (5 v1.2) 26 JMS – point-to-point sender import javax.jms.*; import javax.naming.*; public class SimpleQueueSender { public static void main(String[] args) { String queueName = null; Context jndiContext = null; QueueConnectionFactory queueConnectionFactory = null; QueueConnection queueConnection = null; QueueSession queueSession = null; Queue queue = null; QueueSender queueSender = null; TextMessage message = null; final int NUM_MSGS; X36DSV - Distribuované systémy a výpočty (5 v1.2) 27 JMS – point-to-point sender if ( (args.length < 1) || (args.length > 2) ) { System.out.println("Usage: java SimpleQueueSender " + "<queue-name> [<number-of-messages>]"); System.exit(1); } queueName = new String(args[0]); System.out.println("Queue name is " + queueName); if (args.length == 2){ NUM_MSGS = (new Integer(args[1])).intValue(); } else { NUM_MSGS = 1; } X36DSV - Distribuované systémy a výpočty (5 v1.2) 28 JMS – point-to-point sender /* Create a JNDI API InitialContext object if none exists yet. */ try { jndiContext = new InitialContext(); } catch (NamingException e) { System.out.println("Could not create JNDI API " + "context: " + e.toString()); System.exit(1); } /* Look up connection factory and queue. */ try { queueConnectionFactory = (QueueConnectionFactory) jndiContext.lookup("QueueConnectionFactory"); queue = (Queue) jndiContext.lookup(queueName); } catch (NamingException e) { System.out.println("JNDI API lookup failed: " + e.toString()); System.exit(1); } X36DSV - Distribuované systémy a výpočty (5 v1.2) 29 JMS – point-to-point sender try { queueConnection = queueConnectionFactory.createQueueConnection(); queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); queueSender = queueSession.createSender(queue); message = queueSession.createTextMessage(); for (int i = 0; i < NUM_MSGS; i++) { message.setText("This is message " + (i + 1)); System.out.println("Sending message: " + message.getText()); queueSender.send(message); } X36DSV - Distribuované systémy a výpočty (5 v1.2) 30 JMS – point-to-point sender } } /* Send a non-text control message indicating end */ queueSender.send(queueSession.createMessage()); } catch (JMSException e) { System.out.println("Exception occurred: " + e.toString()); } finally { if (queueConnection != null) { try { queueConnection.close(); } catch (JMSException e) {} } } X36DSV - Distribuované systémy a výpočty (5 v1.2) 31 JMS – point-to-point receiver import javax.jms.*; import javax.naming.*; public class SimpleQueueReceiver { public static void main(String[] args) { String queueName = null; Context jndiContext = null; QueueConnectionFactory queueConnectionFactory = null; QueueConnection queueConnection = null; QueueSession queueSession = null; Queue queue = null; QueueReceiver queueReceiver = null; TextMessage message = null; X36DSV - Distribuované systémy a výpočty (5 v1.2) 32 JMS – point-to-point receiver if (args.length != 1) { System.out.println("Usage: java " + "SimpleQueueReceiver <queue-name>"); System.exit(1); } queueName = new String(args[0]); System.out.println("Queue name is " + queueName); X36DSV - Distribuované systémy a výpočty (5 v1.2) 33 JMS – point-to-point receiver /* Create a JNDI API InitialContext object if none exists. */ try { jndiContext = new InitialContext(); } catch (NamingException e) { System.out.println("Could not create JNDI API " + "context: " + e.toString()); System.exit(1); } /* Look up connection factory and queue. */ try { queueConnectionFactory = (QueueConnectionFactory) jndiContext.lookup("QueueConnectionFactory"); queue = (Queue) jndiContext.lookup(queueName); } catch (NamingException e) { System.out.println("JNDI API lookup failed: " + e.toString()); System.exit(1); } X36DSV - Distribuované systémy a výpočty (5 v1.2) 34 JMS – point-to-point receiver try { queueConnection = queueConnectionFactory.createQueueConnection(); queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); queueReceiver = queueSession.createReceiver(queue); queueConnection.start(); while (true) { Message m = queueReceiver.receive(1); if (m != null) { if (m instanceof TextMessage) { message = (TextMessage) m; System.out.println("Reading message: " + message.getText()); } else { break; } } } X36DSV - Distribuované systémy a výpočty (5 v1.2) 35 JMS – point-to-point receiver } } } catch (JMSException e) { System.out.println("Exception occurred: " + e.toString()); } finally { if (queueConnection != null) { try { queueConnection.close(); } catch (JMSException e) {} } } X36DSV - Distribuované systémy a výpočty (5 v1.2) 36
Podobné dokumenty
zde - DSN
Mechanismus RMI zajišťuje komunikaci mezi klientem (klientskou částí aplikace), kterým může být
libovolný objekt jazyka Java (přesněji vlákno výpočtu, které interpretuje kód nějakého objektu) a
ser...
Applet Architektura Java EE - 4 vrstvá CGI
- beana je klasická POJO (Plain Old Java Object) – třída má prázdný konstruktor, gettery a settery
- Anotace říkají kontejneru jak s ní zacházet
– na rozdíl od dřívějšího přístupu, kdy se muselo im...
Distribuované systémy a výpočty
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="h...
Prezentace ke stažení [PDF - 837 kB]
• Nečeká
eče á se na
a kompletní
o p e zpracování
p aco á
zprávy ☺
• Odesílatel zprávy
prá nem
nemusí
sí znát
nát ((všechny)
šechn )
příjemce ☺ - Motivace pro použití
zprostředkované komunikace
• R...