ΠΠΎΠ²ΠΎΡΡ ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Ρ ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ Π½Π΅ ΡΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΡΡΠ°Π²Π½ΠΈΠΌΠΎΠΉ Ρ CORBA ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ Π½ΠΎΠΌΠ΅Π½ΠΊΠ»Π°ΡΡΡΡ ΡΠ»ΡΠΆΠ± ΠΈ ΡΡΠ΅Π΄ΡΡΠ²[80], ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ ΡΠ°ΠΌΠΈΠΌ Π½Π°Π΄ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π½Π°Π΄ ΡΡΠΈΠΌ Π±Π°Π·ΠΈΡΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΈΠ· ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π±ΡΠ»ΠΎ Π΄Π°ΠΆΠ΅ Π² ΡΠ°ΠΌΠΎΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ CORBA.
ΠΠ΅Π±, ΡΠΎΡΠ½Π΅Π΅, Π΅Π³ΠΎ ΠΎΡΠ½ΠΎΠ²Π°, HTTP β ΡΡΠ΅Π΄Π° Π±Π΅Π· ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΡΠ΅ΡΡΠΈΠΉ. Π ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΌ ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅ ΡΠ°ΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π²ΡΠ·Π²Π°Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ Π½Π°Π³ΡΡΠ·ΠΊΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π²Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ Π²ΡΠ΅Ρ ΡΡΡΡΠΎΠΉΡΡΠ² Π² ΡΠ΅ΡΠΈ. Π ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΆΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° ΡΠ»ΡΠΆΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ (ΠΈ Π½ΡΠΆΠ½ΠΎ) ΡΠ°ΡΡΡΠΈΡΠ°ΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΠΎΡΠ½Π΅Π΅. Π ΠΈΡΠΎΠ³Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ, Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΌ Ρ Π²Π΅Π±-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ Π΄Π»Ρ ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°, ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π²ΠΎΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ ΡΡΠ΅Π΄ΡΡΠ² ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ²Π΅ΡΡ Π½Π΅Π³ΠΎ ΠΊΠΎΡΡΡΠ»Π΅ΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π³ΠΎΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΡ ΠΈΠ»ΠΈ ΡΠΈΠΌΡΠ»ΠΈΡΡΡ ΡΠ΅ΡΡΠΈΠΈ ΠΏΠΎ ΡΠ°ΠΉΠΌ-Π°ΡΡΡ.
Π CORBA ΡΠ΅ΡΡΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π»ΠΈΡΡ ΡΡΠ΅Π΄ΠΎΠΉ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠΈΠ»ΠΈΠΉ. ΠΡΠ»ΠΈ Π² ΡΠ°ΡΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ Π²ΠΎΠΏΡΠΎΡΡ Π½Π°Π³ΡΡΠ·ΠΊΠΈ Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ ΠΏΡΠΈ Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², ΠΎΠ½ΠΈ ΡΠ΅ΡΠ°Π»ΠΈΡΡ ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ, ΠΊΠ°ΠΊ ΠΈ Π² ΡΡΠ΅Π΄Π΅ Π‘Π£ΠΠ: ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ»ΠΎΡΡ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² ΠΏΠ°ΠΊΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ². ΠΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π½Π΅ΡΡΡΠ΄Π½ΠΎ Π±ΡΠ»ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° ΠΏΠ°ΡΡΠΈΠ²Π½ΠΎΡΡΠΈ. ΠΠΎ Π΄Π»Ρ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΡΠ»ΡΠΆΠ±Ρ, Π½Π°ΠΏΠΎΠΌΠ½Ρ, ΡΠ΅ΡΡ ΠΈΠ΄ΡΡ ΠΎΠ±ΡΡΠ½ΠΎ ΠΎ Π΄Π΅ΡΡΡΠΊΠ°Ρ ΠΈ ΡΠΎΡΠ½ΡΡ Π°ΠΊΡΠΈΠ²Π½ΡΡ ΡΠ΅ΡΡΠΈΠΉ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΊΠΎΡΠΎΡΡΡ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ΅ΡΡΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ².
ΠΠ΅ΠΏΡΠΈΡΡΠ½ΡΠΌ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ΠΌ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ ΡΠ΅ΡΡΠΈΠΉ ΡΡΠ°Π»Π° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π²Π΅Π±-ΡΠ»ΡΠΆΠ±Π°ΠΌΠΈ. ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΠΠ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΡΠ°Π±Π»ΠΎΠ½ Β«ΠΠ΄ΠΈΠ½ΠΈΡΠ° ΡΠ°Π±ΠΎΡΡΒ» (unit of work), ΡΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π² ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π²Π΅Π±-ΡΠ»ΡΠΆΠ±Π΅ ΡΡΠ°Π·Ρ Π²ΡΠ΅Π³ΠΎ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°ΡΠΈΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π² ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΉ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ.
Π ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ°Π±Π»ΠΎΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π΄Π»Ρ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π‘Π£ΠΠ ΡΠΈΠΊΠ²Π΅Π»-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΠ°ΡΠΊΠ°ΠΌΠΈ. ΠΠΎ Π΅ΡΠ»ΠΈ ΡΠ°Π½ΡΡΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π±ΡΠ» ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΈΠ·Π±Π°Π²Π»Π΅Π½ΠΈΡ ΠΎΡ ΡΠΎΠ»ΡΡΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ, ΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅Π³Π΄Π°, Π²ΠΌΠ΅ΡΡΠΎ Π»ΡΠ±ΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π²ΠΎΠΎΠ±ΡΠ΅.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΡΠ°Π²Π½ΠΈΠΌ Π±Π»ΠΈΠ·ΠΊΠΈΠΉ ΠΊ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌΡ ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄ Π½Π° ΡΡΠΎΡΠΎΠ½Π°Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π² ΡΠ°ΠΌΠΊΠ°Ρ CORBA Ρ ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄ΠΎΠΌ Π² ΡΡΠ΅Π΄Π΅ Π²Π΅Π±-ΡΠ»ΡΠΆΠ±. ΠΡΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΡΠ΅ΡΡΠΈΠΈ Π²ΡΠ΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ ΠΈ Π½Π΅ Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ .
ΠΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π² ΡΡΠ΅Π΄Π΅ CORBA
CosTransactions.Current current = CosTransactions.CurrentHelper.Narrow(
orb.ResolveInitialReferences("TransactionCurrent"));
current.Begin();
try
{
store1.Remove(product, quantity);
store2.Append(product, quantity);
current.Commit();
}
catch (Exception e)
{
current.Rollback();
ShowError("ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ: " + e.toString());
}
Π ΡΡΠ΅Π΄Π΅ Π²Π΅Π±-ΡΠ»ΡΠΆΠ± Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅-ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π½Π°Π΄ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ DTO[81]. Π Π² ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π‘Π£ΠΠ ΠΈΠ»ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΎΠΌ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΊΠΎΠ΄ Ρ ΡΠ°ΡΠΊΡΡΡΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ° β Π΅Π΄ΠΈΠ½ΠΈΡΡ ΡΠ°Π±ΠΎΡΡ (unit of work) Π² ΡΠ΅Π°Π»ΡΠ½ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ.
ΠΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π² ΡΡΠ΅Π΄Π΅ Π²Π΅Π±-ΡΠ»ΡΠΆΠ±
StoreServiceClient storeServiceClient = new StoreServiceClient(url);
StoreOperationDTO operation1 = storeServiceClient.CreateOperation(store1.Id);
operation1.Type = StoreOperations.Remove;
operation1.ProductId = product.Id;
operation1.Quantity = quantity;
StoreOperationDTO operation2 = storeServiceClient.CreateOperation(store2.Id);
operation2.Type = StoreOperations.Append;
operation2.ProductId = product.Id;
operation2.Quantity = quantity;
UnitOfWork uow = new UnitOfWork();
uof.RegisterDirty(operation1);
uof.RegisterDirty(operation2);
try
{
storeServiceClient.ProcessOperations(uow);
}
catch (Exception e)
{
ShowError("ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ: " + e.toString());
}
ΠΡΠΎΡΡΠΌ Β«ΡΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅ΠΌΒ» ΡΡΠ°Π» ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΎΡ ΠΏΠΎΠ½ΡΡΠ½ΡΡ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΡΠ»ΡΠΆΠ± Π½Π° ΡΠ·ΡΠΊΠ΅ IDL[82] ΠΊ WSDL[83] β ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΠΌ, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ, ΠΏΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠΌ. Π‘ΡΠ°Π²Π½ΠΈΠΌ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ ΡΠΊΠ»Π°Π΄ΡΠΊΠΎΠΉ ΡΠ»ΡΠΆΠ±Ρ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ΅ΠΉ ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ²Π°ΡΠ½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΉ.
ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡ ΡΠ»ΡΠΆΠ±Ρ Π² CORBA IDL
module StockServices
{
typedef float CurrentQuantity;
struct QuantityRequest
{
string stockSymbol;
};
interface StockInventoryService
{
CurrentQuantity getCurrent(in QuantityRequest request);
};
};
ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡ ΡΠ»ΡΠΆΠ±Ρ Π² WSDL
<?xml version="1.0" encoding="utf-8"?>
<definitions name="StockInventoryService"
xmlns: sqs="http://mycompany.com/stockinventoryservice.wsdl"
xmlns: sqsxsd="http://mycompany.com/stockinventoryservice.xsd"
xmlns: soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns: wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns: xsd="http://www.w3.org/2000/10/XMLSchema">
<wsdl: types>
<xsd: element name="CurrentQuantity">
<xsd: complexType>
<xsd: all>
<xsd: element name="stockSymbol" type="string"/>
</xsd: all>
</xsd: complexType>
</xsd: element>
<xsd: element name="CurrentQuantity">
<xsd: complexType>
<xsd: all>
<xsd: element name="quantity" type="float"/>
</xsd: all>
</xsd: complexType>
</xsd: element>
</wsdl: types>
<xsd: element name="CurrentQuantity">
<xsd: complexType>
<xsd: all>
<xsd: element name="quantity" type="float"/>
</xsd: all>
</xsd: complexType>
</xsd: element>
</wsdl: types>
<wsdl: message name="getCurrentInput">
<wsdl: part name="body" element="sqsxsd: CurrentQuantity"/>
</wsdl: message>
<wsdl: message name="getCurrentOutput">
<wsdl: part name="body" element="sqsxsd: CurrentQuantity"/>
</wsdl: message>
<wsdl: portType name="StockInventoryServicePortType">
<wsdl: operation name="getCurrent">
<wsdl: input message="sqs: getCurrentInput"/>
<wsdl: output message="sqs: getCurrentOutput"/>
</wsdl: operation>
</wsdl: portType>
<wsdl: binding name="StockInventoryServiceSoapBinding"
type="sqs: StockInventoryServicePortType">
<soap: binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl: operation name="getCurrent">
<soap: operation soapAction="http://mycompany.com/getCurrent"/>
<wsdl: input>
<soap: body use="literal"/>
</wsdl: input>
<wsdl: output>
<soap: body use="literal"/>
</wsdl: output>
</wsdl: operation>
</wsdl: binding>
<wsdl: service name="StockInventoryService">
<wsdl: port name="StockInventoryServicePort"
binding="sqs: StockInventoryServiceBinding">
<soap: address location="http://mycompany.com/StockInventoryService"/>
</wsdl: port>
</wsdl: service>
</definitions>
Π’ΡΠ΅ΡΡΠΈΠΌ Β«ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌΒ» ΡΡΠ°Π» ΠΎΡΠΊΠ°Π· ΠΎΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠΎΠ΄Π³ΡΡΠ·ΠΊΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²[84] Π² ΠΏΠΎΠ»ΡΠ·Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ.
Π CORBA ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ Π·Π°Π³Π»ΡΡΠΊΠ° (stub). Π’ΠΎ Π΅ΡΡΡ Π²Ρ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠ΅ΡΠΎΠ΄, Π° Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ, Π²ΡΠ·ΠΎΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ Π²ΠΎΠ·Π²ΡΠ°Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΠ»Π΅ΠΉ Π·Π°Π³Π»ΡΡΠΊΠΈ. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°: ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎΠ΄Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΡΡ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π²ΠΌΠ΅ΡΠΈΠ²Π°ΡΡΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π½ΠΎ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ Π·Π½Π°ΡΡ, ΡΡΠΎ ΡΡΠΎΠΈΡ Π·Π° ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΡΠΌΠΈ Ρ Π·Π°Π³Π»ΡΡΠΊΠΎΠΉ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ±Π»Π°Π·Π½ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ»ΡΠΆΠ±Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅, Π±Π»Π°Π³ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π»Π΅Π³ΠΊΠΎ. Π’ΠΎΠ³Π΄Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΡΠΈΠΊΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΡΠΉ ΠΎΠ±ΠΌΠ΅Π½ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΡΠ·ΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° Π² ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠ»ΠΎΡ ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π°ΠΏΡΡΠΌΡΡ Ρ Π‘Π£ΠΠ.
Π ΡΡΠ΅Π΄Π΅ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π²ΠΎΠΏΡΠΎΡ Ρ Β«Π½Π΅ΡΠ°Π΄ΠΈΠ²ΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠΌΒ» ΡΠ΅ΡΠΈΠ»ΠΈ ΡΠ°Π΄ΠΈΠΊΠ°Π»ΡΠ½ΠΎ β ΠΎΡΠΌΠ΅Π½ΠΎΠΉ ΡΠ°ΠΌΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ ΡΡΠΎ Π² 80 % ΡΠ»ΡΡΠ°Π΅Π² ΠΈΠΌΠ΅Π²ΡΠ°ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° Π±ΡΠ»Π° ΡΠΌΠ΅ΡΡΠ½ΠΎΠΉ ΠΈ Π·Π΄ΠΎΡΠΎΠ²ΠΎ ΡΠΎΠΊΡΠ°ΡΠ°Π»Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ°ΠΊ ΡΠ±Π΅ΡΠ΅ΡΡ ΠΊΡΠΊΡΡΡΠ·Ρ ΠΎΡ Π½Π°ΡΠ΅ΠΊΠΎΠΌΡΡ -Π²ΡΠ΅Π΄ΠΈΡΠ΅Π»Π΅ΠΉ? ΠΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ: Π²ΡΠΊΠΎΡΠΈΡΡ Π΅Ρ Π²ΡΡ, ΠΊ ΡΠ΅ΡΡΡΠΌ. ΠΡΠ΅Π΄ΠΈΡΠ΅Π»ΠΈ ΠΏΡΠΈΠ΄ΡΡ, Π° ΠΊΡΡΠ°ΡΡ Π½Π΅ΡΠ΅Π³ΠΎ.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π²Π΅Π±-ΡΠ»ΡΠΆΠ±Π°ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΌΠΈ Π·Π° ΠΈΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ΠΌ. ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅. ΠΠ±ΠΌΠ΅Π½ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΠΈ Π² ΠΎΠ±ΡΡΠ½ΠΎΠΉ Π²Π΅Π±-ΡΡΠ΅Π΄Π΅: Π·Π°ΠΏΡΠΎΡ β ΠΎΡΠ²Π΅Ρ Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΠ΅ΡΡΠΈΠΈ. ΠΠ±ΡΠ΅ΡΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ DTO Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. ΠΠΎ DTO Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΡΡΠ»ΠΎΠΊ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΡΠΎΠΌΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ . ΠΠ³ΠΎ ΡΡΡΡΠΊΡΡΡΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ ΡΠΊΠ°Π»ΡΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ², ΡΠ°Π·ΡΠ΅ΡΡΠ½Π½ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ, Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ². Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄Π³ΡΡΠ·ΠΈΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ΄ΡΡΡΡ ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ»ΡΠΆΠ±Ρ.
ΠΡΠΎΠ·ΡΠ°ΡΠ½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΌ CORBA-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ
BookGroup group = catalog.getBookCategory("ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅");
Book[] books = group.getItems(); // ΠΎΠ΄ΠΈΠ½ Π²ΡΠ·ΠΎΠ² ΡΠ΅ΡΠ²Π΅ΡΠ°
foreach(Book book in books)
{
ShowInfo(book.Name +": ");
ShowInfo(book.getPopularity(). getVotesCount()); // Π΄Π²Π° Π²ΡΠ·ΠΎΠ²Π°
}
Π Π°Π±ΠΎΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ DTO Π² ΡΡΠ΅Π΄Π΅ Π²Π΅Π±-ΡΠ»ΡΠΆΠ±
BookGroupServiceClient groupClient = new BookGroupServiceClient(url1);
BookGroupDTO group = groupClient.GetBookCategory("ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅");