Distribuované systémy a výpočty

Transkript

Distribuované systémy a výpočty
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

pr.11

pr.11 Plná replikace (read one / write all)

Více

zde - DSN

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...

Více

pr.10

pr.10 X36DSV - Distribuované systémy a výpočty (10) - v1.7

Více

Applet Architektura Java EE - 4 vrstvá CGI

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...

Více

Distribuované systémy a výpočty

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...

Více

Prezentace ke stažení [PDF - 837 kB]

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...

Více

dodatek

dodatek LDAP (Lightweight Directory Access Protocol)

Více