Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés



Hasonló dokumentumok
Tartalom. Történeti áttekintés. Történeti áttekintés Architektúra DCOM vs CORBA. Szoftvertechnológia

DCOM Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Ficsor Lajos DCOM /1

Osztott alkalmazások fejlesztési technológiái Áttekintés

eseményvezérelt megoldások Vizuális programozás 5. előadás

Komponens modellek. 3. Előadás (első fele)

Programozás II gyakorlat. 6. Polimorfizmus

Osztott Objektumarchitektúrák

CORBA Áttekintés. Mi a CORBA? OMG and OMA. Ficsor Lajos. Miskolci Egyetem Általános Informatikai Tanszék

Objektumorientált programozás C# nyelven III.

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

117. AA Megoldó Alfréd AA 117.

CORBA bevezetés. Paller Gábor Internet és mobil rendszerek menedzselése

Kommunikáció. 3. előadás

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Osztott rendszerek (Distributed

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Osztott rendszerek (Distributed. systems) Bevezetés. Tartalom. Ficsor Lajos. Miskolci Egyetem Általános Informatikai Tanszék

Bánsághi Anna

Objektumorientált programozás C# nyelven

Access adatbázis elérése OLE DB-n keresztül

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Szoftvertechnológia alapjai Java előadások

Hardver modellezés SystemC-vel és SDL grafikus könyvtárral Visual Stúdió alatt

Programozás C++ -ban 2007/4

ISA szimulátor objektum-orientált modell (C++)

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

Adatbázis-kezelés ODBC driverrel

OOP: Java 8.Gy: Abstract osztályok, interfészek

Programozás C++ -ban

Programozási nyelvek Java

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérlıkkel - 1

Segédanyag: Java alkalmazások gyakorlat

4. Öröklődés. Programozás II

1. Alapok. Programozás II

Pénzügyi algoritmusok

Programozás II gyakorlat. 4. Öröklődés

C#, OOP. Osztályok tervezése C#-ban

Programozási nyelvek Java

Java. Java Message Service. ANTAL Margit. JMS API technológia. ANTAL Margit. Sapientia - EMTE

Objektumorientált programozás C# nyelven III.

3. Osztályok II. Programozás II

Bevezető. Servlet alapgondolatok

Programozás II. ATM példa Dr. Iványi Péter

Osztott rendszerek. Krizsán Zoltán 1 Ficsór Lajos 1. Webalkalmazások fejlesztése tananyag. Miskolci Egyetem. Bevezetés A múlt - történelem A jelen

Osztály és objektum fogalma

Globális operátor overloading

Operációs rendszerek. A Windows NT felépítése

Java Programozás 11. Ea: MVC modell

Konkurens TCP Szerver

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Adatbázis rendszerek II. Adatbázis elérése C# kliens programból ADO.NET API-n keresztül

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

Kivételek, kivételkezelés a C++ nyelvben

RPC Remote Procedure Call Távoli eljárás hívás

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

A SZOFTVERTECHNOLÓGIA ALAPJAI

Programozás II. 2. Dr. Iványi Péter

Komponens alapú fejlesztés

Segédanyag: Java alkalmazások gyakorlat

Kommunikáció. Folyamatok közötti kommunikáció. Minden elosztott rendszer alapja

JNDI - alapok. Java Naming and Directory Interface

Bevezetés, a C++ osztályok. Pere László

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Alkalmazás technológiai frissítés migrációs és üzemeltetési tapasztalatok

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Kommunikáció. Távoli eljáráshívás. RPC kommunikáció menete DCE RPC (1) RPC - paraméterátadás. 3. előadás Protokollok. 2. rész

Felhasználó által definiált adattípus

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

A WEB programozása - JSP1 dr.gál Tibor őszi félév

OOP és UML Áttekintés

Objektumorientált programozás C# nyelven

Számítógépes munkakörnyezet II. Szoftver

OOP #14 (referencia-elv)

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

RIA Rich Internet Application

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Programozás II. 4. Dr. Iványi Péter

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Kivételkezelés a C++ nyelvben Bevezetés

C++ programok fordítása

Alprogramok, paraméterátadás

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

VB C++ C# JScript J# Common Language Specification. ADO.NET and XML. Base Class Library. Common Language Runtime. Operating System

C++ programozási nyelv Konstruktorok-destruktorok

Rétegezett architektúra HTTP. A hálózatfejlesztés motorját a hálózati alkalmazások képezik. TCP/IP protokoll készlet

API tervezése mobil környezetbe. gyakorlat

Excel ODBC-ADO API. Tevékenységpontok: - DBMS telepítés. - ODBC driver telepítése. - DSN létrehozatala. -Excel-ben ADO bevonása

Stateless Session Bean

Osztályok. 4. gyakorlat

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7

Átírás:

Tartalom D Szoftvertechnológia elıadás Architektúra D vs CORBA Példá 2 1987 Dynamic Data Exchange (DDE) Windows 2.0-ban Windows alkalmazások közötti adatcsere Ma is használatos (pl. vágólap) NetDDE NetBIOS protokol felett Windows XP-ig használatos (pl. Fekete Macska) A Windows Vista már nem tartalmazza 1990 Object Linking and Embedding (OLE 1.0) Üzenetek helyett dokumentum-megosztás (Virtual Function Table VTBL) Windows 3.0 1993 Component Object Model () Folyamatok közötti kommunikáció Dinamikus objektum-készítés Objektumok nyelv-független megvalósítása 1997-ig nem használták a elnevezést 3 4 1993 OLE 2.0 alapú implementáció Windows 3.1 1994 OLE Custom Controls OLE 2.0-t támogató tárolókba ágyazhatók 1996-tól ActiveX Hálózati megosztása a dokumentumoknak + Windows NT SP 4.0 Új esemény-modell 1997 Distributed Component Object Model (D) Eredeti neve Network OLE Válasz a CORBA-ra RPC-t használ Alternatív implementációk is léteznek Más (nem Windows) rendszerek is támogatják 5 6 1

D Platform-független Minden olyan operációs rendszerben mőködik, amely nyújt D támogatást Windows, Unix, Macintosh Nyelv-független C++, VJ++, Delphi Átviteli mód-független TCP/IP, UDP. IPX/SPX, NetBIOS, AppleTalk Objektum-model Interfész Platform-független Nyelv-független Microsoft Interface Definition Language (IDL) Lefordítható a szükséges programozási nyelvre Platform-specifikus Számos nyelven készülhet (C, C++, Delphi stb.) 7 8 Használat (folyamaton belül) 1. Megosztandó objektum elkészítése Interfész(ek) Proxy 2. Proxy objektum és az interfészek eljuttatása a felhasználói oldalra 3. Proxy és interfészek regisztrációja Regisztrációs adatbázisban (registry) A innen olvassa ki az objektum elérhetıségét (a tároló szerver címét) 4. Az interfész lefordítása a használt nyelvre 5. Az objektum felhasználása a programunkban Hatékony Nincs szükség az ORB-re Nincs hálózati kommunikáció 9 10 (folyamatok között) (távolról) LPC LPC Stabil Local Procedure Call (LPC) technológiával Hálózat 11 12 2

(D) D vs CORBA Registry OLE SCM D network protocol SCM Registry D Egy objektumnak több interfésze is lehet Az interfészeket IDL nyelven írja le A kliens egy interfészére mutató referencián keresztül használja az objektumot RPC alapú kliensszerver kommunikáció CORBA Többszörös öröklıdés az interfészek között Az interfészeket IDL nyelven írja le A kliens a klienscsonkon keresztül használja az objektumot RPC alapú kliensszerver kommunikáció 13 14 SCM: Service Control Modul Példa Interfészek (IMatrix1) Mátrix szerver Egész mátrix (kétdimenziós tömb) Nézetek: 1. Matrix1 Set() és Get() mőveletekkel állítható/lekérdezhetı a mezık tartalma 2. Matrix2 Reset() mővelettel megadott értékkel tölthetı fel a teljes mátrix [object, uuid(3cfdb283-ccc5-11d0-ba0b-00a0c90df8bc), helpstring("imatrix1 Interface"), pointer_default(unique)] interface IMatrix1 : IUnknown import "unknwn.idl"; ; HRESULT get([in] SHORT n, [in] SHORT m, [out] LONG *value); HRESULT set([in] SHORT n, [in] SHORT m, [in] LONG value); 15 16 Interfészek Type Library [object, uuid(3cfdb284-ccc5-11d0-ba0b-00a0c90df8bc), helpstring("imatrix2 Interface"), pointer_default(unique)] interface IMatrix2 : IUnknown import "unknwn.idl"; ; HRESULT reset([in] LONG value); [uuid(3cfdb281-ccc5-11d0-ba0b-00a0c90df8bc), version(1.0), helpstring( matrix 1.0 Type Library)] library MATRIXLib importlib("stdole32.tlb"); ; [uuid(3cfdb287-ccc5-11d0-ba0b-00a0c90df8bc), helpstring("matrix Class")] coclass CMatrix [default] interface IMatrix1; interface IMatrix2; ; 17 18 3

Osztálydefiníció (cmatrix.h) Impementáció #include matrix.h // IDL-bıl generál header class CMatrix : public IMatrix1, public IMatrix2 public: // IUnknown STDMETHODIMP QueryInterface(REFIID riid, void** ppv); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // IMatrix1 STDMETHODIMP get(in SHORT n, IN SHORT m, OUT LONG *value); STDMETHODIMP set(in SHORT n, IN SHORT m, IN LONG value); // IMatrix2 STDMETHODIMP reset(in LONG value); #include "cmatrix.h" STDMETHODIMP CMatrix::QueryInterface(REFIID riid, void** ppv) if (riid == IID_IUnknown riid == IID_IMatrix1) *ppv = (IMatrix1*) this; else if (riid == IID_IMatrix2) *ppv = (IMatrix2*) this; else *ppv = NULL; return E_NOINTERFACE; AddRef(); return S_OK; ; // create/destroy mőveletek és privát deklarációk 19 20 Implementáció Implementáció STDMETHODIMP_(ULONG) AddRef(void) return InterlockedIncrement(&m_cRef); STDMETHODIMP_(ULONG) Release(void) if (InterlockedDecrement(&m_cRef) == 0) delete this; return 0; return 1; STDMETHODIMP CMatrix::get(IN SHORT n, IN SHORT m, OUT LONG* value) *value = m_a[n][m]; return S_OK; // többi mővelet extern HANDLE hevtdone; CMatrix::~CMatrix() for (int i=0; i < m_height; i++) delete[] m_a[i]; delete[] m_a; SetEvent(hevtDone); 21 22 Szerver HANDLE hevtdone; void main() hevtdone = CreateEvent(NULL, FALSE, FALSE, NULL); // esemény hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); CClassFactory* pcf = new CClassFactory; hr = CoRegisterClassObject(CLSID_CMatrix, pcf, CLSCTX_SERVER, REGCLS_MULTIPLEUSE, &dwregister); WaitForSingleObject(hevtDone, INFINITE); CloseHandle(hevtDone); CoUninitialize(); // várakozás az eseményre #include matrix.h" void main(int argc, char**argv) IMatrix1 *pimatrix1; IMatrix2 *pimatrix2; LONG value; CoInitialize(NULL); CoCreateInstance(CLSID_CMatrix, NULL, CLSCTX_SERVER, IID_IMatrx1, (void**) &pimatrix1); pimatrix1->get(0, 0, &value); pimatrix1->queryinterface(iid_imatrix2, (void**) &pimatrix2); pimatrix1->release(); pimatrix2->reset(value + 1); pimatrix2->release(); 23 CoUninitialize(); 24 4

CORBA (Interfészek) CORBA (Osztálydefiníció) interface matrix1 long get(in short n, in short m); void set(in short n, in short m, in long value); ; interface matrix2 void reset(in long value); ; interface matrix : matrix1, matrix2 ; 25 #include matrix.h // IDL-bıl generált header class matrix_i : public MatrixBOAImpl public: virtual CORBA::Long get(corba::short n, CORBA::Short m, CORBA::Environment &env); virtual void set(corba::short n, CORBA::Short m, CORBA::Long value, CORBA::Environment &env); virtual void reset(corba::long value, CORBA::Environment &env); matrix_i(corba::short h, CORBA::Short w); virtual ~martix_i(); private: CORBA::Long **m_a; CORBA::Short m_height, m_width; ; 26 CORBA (Implementáció) CORBA (Szerver) #include matrix_i.h CORBA::Long matrix_i::get(corba::short n, CORBA::Short m, CORBA::Environment &) return m_a[n][m]; void matrix_i::reset(corba::long value, CORBA::Environment &) short n, m; for (n = 0; n < m_height; n++) for (m = 0; m < m_width; m++) m_a[n][m]=value; return; int main() matrix_i ourmatrix(100,100); try CORBA::Orbix.impl_is_ready( matrix"); catch (...) cout << "Unexpected exception" << endl; exit(1); // egyéb mőveletek 27 28 CORBA () Irodalom #include matrix.h" void main (int argc, char **argv) matrix_var matrixvar; CORBA::Long value; matrixvar = matrix::_bind(":matrix"); value = matrixvar->get(0, 0); matrixvar->reset(value + 1); http://www.wikipedia.org http://msdn2.microsoft.com/enus/library/ms809340.aspx http://www.infosys.tuwien.ac.at/staff/tg/teac hing/unizh/cbse/slides/lecture11.pdf http://lass.cs.umass.edu/~shenoy/courses/s pring07/lectures/lec25.pdf data.uta.edu/~ramesh/cse5306/dcom parison.ppt 29 30 5