¹æ¸í·Ï ¿¡ ¼Ò°¨À» ³²°ÜÁֽʽÿä.
¿©·¯ºÐÀÇ ÀǰßÀÌ Ã¥ÀÇ ³»¿ëÀ» ´õ¿í dzºÎÇÏ°Ô ¸¸µé °Í ÀÔ´Ï´Ù.

ÄÚ¾Æ ÄÚ¹ÙÀÇ ¸ðµç ³»¿ëÀº º» ÀúÀÚ¿Í ¿µÇÑ ÃâÆÇ»ç ±×¸®µµ ¿©·¯ ȸ»çµé¿¡ ÀÇÇØ¼­ ¼ÒÀ¯µÇ¾î ÀÖÀ¾´Ï´Ù. º» ÀúÀÚÀÇ Çã¶ô¾øÀÌ ¹«´Ü º¹»ç ¹× ÀοëÀ» ±ÝÇÕ´Ï´Ù. ÀÌ »çÇ×À» À§¹Ý½Ã ¸ðµç ¹ýÀûÀΠåÀÓÀ» Áö¼Å¾ß ÇÕ´Ï´Ù.
[ ´ÙÀ½ | ÀÌÀü ]

¼¼¹øÂ° ¸¶´ç. °´Ã¼ ÇÁ·¹ÀÓ ÇÁ·Î±×·¡¹Ö

4¸· CORBA ÇÁ·Î±×·¡¹Ö

1Àå CORBA IDL

1.1 CORBA ÀÎÅÍÆäÀ̽º¶õ?

CORBA ÀÎÅÍÆäÀ̽º´Â ¸» ±×´ë·Î CORBA Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö ±¸Çö °´Ã¼ »çÀÌÀÇ Ã¢±¸ÀÌ´Ù. ÀÎÅÍÆäÀ̽º´Â [±×¸²4-1]ó·³ CORBA °´Ã¼ ¸ðµ¨¿¡¼­ ¿ÜºÎ¿¡ ÀÚ½ÅÀÇ ¸ð½ÀÀ» º¸¿©ÁÖ´Â ¾ó±¼ ¿ªÇÒÀ» Çϸç, ¼­¹ö ±¸Çö °´Ã¼¿Í Ŭ¶óÀÌ¾ðÆ®¸¦ ±¸ºÐ ¢´Â °æ°è¼±ÀÌ´Ù. ¶ÇÇÑ ÀÎÅÍÆäÀ̽º´Â Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ±¸Çö °´Ã¼°¡ ¾î¶² ¸ð½ÀÀ» Çϰí ÀÖ´ÂÁö(¾î¶² ¸Þ¼Òµå¸¦ Á¦°øÇÏ´Â Áö), ±×¸®°í ¾î¶»°Ô »óÈ£ÀÛ¿ëÀ» ÇÏ´Â Áö¿¡ ´ëÇÑ ³»¿ëÀ» Á¤ÀÇÇϰí ÀÖ´Ù. ´Ù½Ã ¸»Çϸé, ÀÎÅÍÆäÀ̽º´Â Ŭ¶óÀÌ¾ðÆ®¿Í ±¸Çö °´Ã¼ ½Ö¹æ°£¿¡ ¸Î¾îÁø Åë½Å ±ÔÄ¢À̶ó ÇÒ ¼ö ÀÖ´Ù.

¾Õ¿¡¼­ »ìÆìº» °Íó·³ CORBA Ç¥ÁØ¿¡¼­ Á¦°øÇÏ´Â ¸ðµç ¼­ºñ½º¿Í Áö¿ø ±â´ÉµéÀº ¸ðµÎ IDL·Î Ç¥ÇöµÈ´Ù. IDL(Interface Definition Language)Àº ÇØ´ç °´Ã¼ÀÇ ÀÎÅÍÆäÀ̽º¿Í °ü·ÃµÈ ±â´É, Ç¥Çö ÇüÅÂ, °ü·Ã ¼º°Ý µîÀÇ ³»¿ëÀ» ±â¼úÇϰí ÀÖ´Ù. ¾Æ¿ï·¯ CORBA ÀÎÅÍÆäÀ̽º´Â ¿ÀÆÛ·¹À̼Ç(¸Þ¼Òµå), ¼Ó¼º, ±×¸®°í µ¥ÀÌŸ ŸÀÔÀ¸·Î Á¤ÀÇµÈ ÁýÇÕüÀ̸ç, ´Ù¸¥ ÀÎÅÍÆäÀ̽ºµé·Î ºÎÅÍ ¸ðµç ±â´ÉÀ» »ó¼Ó¹ÞÀ» ¼ö ÀÖ´Ù. ÀÌ·± ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ¼­ CORBA´Â ±¸Çö¾ð¾î¿¡ Á߸³ÀûÀ̰í Ç÷¯±×-¾Ø-Ç÷¹À̰¡ °¡´ÉÇÑ ÄÄÆ÷³ÍÆ® ¼ÒÇÁÆ®¿þ¾î ȯ°æÀ» Á¦°øÇϰí ÀÖ´Ù.

[±×¸² 4-1] Ŭ¶óÀÌ¾ðÆ®¿Í ±¸Çö °´Ã¼ÀÇ °ü°è

1.2 CORBA IDL

OMG IDLÀº ±¸Çö °´Ã¼°¡ Á¦°øÇÏ´Â ÀÎÅÍÆäÀ̽º¸¦ ±â¼úÇϱâ À§ÇÑ ¾ð¾îÀÌ´Ù. ÀÌ ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÏ¿© Ŭ¶óÀÌ¾ðÆ®´Â ±¸Çö °´Ã¼ÀÇ ¼­ºñ½º¸¦ È£ÃâÇÑ´Ù. µû¶ó¼­ OMG´Â CORBA °´Ã¼ÀÇ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÒ ¶§ ¹Ýµå½Ã CORBA IDL¾ð¾î¸¦ »ç¿ëÇϵµ·Ï ¿ä±¸Çϰí ÀÖÀ¸¸ç, CORBA Ç¥ÁØ¿¡ IDL·Î ÀÛ¼ºµÈ ÀÎÅÍÆäÀ̽º¸¦ C++°ú °°Àº ±¸Çö ¾ð¾î·Î º¯È¯Çϱâ À§ÇÑ ±ÔÄ¢À» ±â¼úÇϰí ÀÖ´Ù.

OMG IDL·Î Á¤ÀÇµÈ ÀÎÅÍÆäÀ̽º´Â ¿ÀÆÛ·¹À̼Ç, ¿ÀÆÛ·¹À̼ÇÀÇ ¸Å°³º¯¼ö, ±×¸®°í ¿¹¿Ü ó¸® ¿ä¼Ò·Î ±¸¼ºµÈ´Ù. IDLÀÇ ¹®¹ý ±¸Á¶´Â [±×¸²4-2]¿Í °°´Ù. IDL ¹®¹ýÀ» ÀÌ Ã¥ÀÇ ¾ÕºÎºÐ¿¡¼­ »ìÆìº»C++¾ð¾îÀÇ ¹®¹ý°ú ¾ÆÁÖ À¯»çÇÏ´Ù. ¸ÕÀú °¡Àå Å« ¹üÀ§·Î À̸§ ÄÁÅØ½ºÆ®(naming context)°¡ ÀÖ´Ù. À̸§ ÄÁÅØ½ºÆ®´Â ³»ºÎ¿¡ Á¤ÀǵǴ °ÍµéÀ» ÇϳªÀÇ À̸§ °ø°£¿¡ Á¤¸®ÇØ µÎ´Â ¿ªÇÒÀ» ÇÑ´Ù. À̸§ ÄÁÅØ½ºÆ® ³»ºÎ¿¡´Â ´Ù¾çÇÑ º¯¼ö¿Í »ó¼ö¸¦ ¼±¾ðÇÒ ¼ö ÀÖ´Ù. ¾Æ¿ï·¯C++¿¡¼­ Ŭ·¡½º¸¦ ¼±¾ðÇÏ´Â °Íó·³ CORBA°´Ã¼¸¦ ÀÎÅÍÆäÀ̽º Á¤ÀǸ¦ ÅëÇØ ¼±¾ðÇÑ´Ù. ¾Æ¿ï·¯ ÀÎÅÍÆäÀ̽º´Â ³»ºÎ¿¡ º¹ ¼ö °³ÀÇ ¸Þ¼Òµå¸¦ ¼±¾ðÇÒ ¼ö ÀÖ´Ù. ±â¾ïÇÒ °ÍÀº IDLÀº ±¸Çö¾ð¾î°¡ ¾Æ´Ï¶ó Ŭ¶óÀÌ¾ðÆ®¿Í ±¸Çö °´Ã¼»çÀÌÀÇ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÏ´Â ¾ð¾î¶ó´Â »ç½ÇÀÌ´Ù. ÀÌ ¶§¹®¿¡ IDLÀº ÀÎÅÍÆäÀ̽º Á¤ÀǾî¶ó°í ¸í¸íµÇ¾ú´Ù.

[ ±×¸²4-2 ] CORBA IDL ±¸Á¶

ÀÚ! Á¤¸®ÇÏ´Â Â÷¿ø¿¡¼­ ¾Õ¼­ »ìÆìº» IDL ±¸Á¶¸¦ ¹ÙÅÁÀ¸·Î ¿¹Á¦ IDL ÆÄÀÏÀ» ÀÛ¼ºÇØ º¸ÀÚ. ´ÙÀ½Àº vehicle °ú owner¶ó´Â ÀÎÅÍÆäÀ̽º¸¦ »ó¼Ó¹Þ¾Æ automobileÀ̶ó´Â ÀÎÅÍÆäÀ̽º¸¦ ¼±¾ðÇÑ ¿¹ÀÌ´Ù. Àüü À̸§ ÄÁÅØ½ºÆ®´Â MyCarsÀÌ´Ù. MyCars³»ºÎ¿¡´Â typedef¸¦ ÅëÇØ »õ·Î¿î µ¥ÀÌŸ ÇüÀ» ¼±¾ðÇßÀ¸¸ç °ú¼Ó½Ã ¿¹¿Ü»óȲÀ» ¹ß»ý½ÃŰ´Â overspeed ¿¹¿Ü»óȲÀ» Á¤ÀÇÇÏ¿´´Ù. ¶ÇÇÑ vehicle°ú owner¶ó´Â ÀÎÅÍÆäÀ̽ºµµ ¼±¾ðÇÏ¿´´Ù. °ü½ÉÀ» ²ô´Â ºÎºÐÀº automobile ÀÎÅÍÆäÀ̽ºÀÇ ¼±¾ðÀÌ´Ù. automobile ÀÎÅÍÆäÀ̽º´Â vehicle°ú owner ÀÎÅÍÆäÀ̽º¸¦ ´ÙÁß»ó¼Ó ¹Þ´Â´Ù. ´Ù½Ã ¸»ÇØ, vehicle°ú owner ÀÎÅÍÆäÀ̽º¿¡ Á¤ÀÇµÈ ¸ðµç °ÍµéÀ» ¼±¾ð¾øÀÌ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ Àý¿¡¼­ IDL ¹®¹ý¿¡ ´ëÇØ »ìÆìº¸¸é º¸´Ù Á¤È®È÷ ´ÙÀ½ ¿¹Á¦¸¦ ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

module MyCars{

typedef string Indentifier;

exception overspeed(short currentspeed);

interface vehicle { }

interface owner {

attribute integer age;

attribute string name;

...

}

interface automobile : vehicle , owner {

attribute string car;

void go (in int speed) raises(overspeed);

void turn_right() raises(overspeed);

void turn_right(in int speed) raises(overspeed);

...

}

}

[ ¿¹Á¦ 4-1 ] IDL ÀÛ¼º ¿¹

IDLÀº C, C++, ½º¸ôÅå, ÀÚ¹Ù °°Àº ±¸Çö ¾ð¾î¿¡ Á߸³ÀûÀÌ´Ù. ±×·¯³ª IDL ¹®¹ýÀº ANSI C++ ¹× ÀÚ¹Ù ¾ð¾îÀÇ ¹®¹ý°ú ¾ÆÁÖ À¯»çÇÏ´Ù. ½ÇÁ¦ ÀÚ¹Ù ¹®¹ýÀÌC++º¸´Ù IDL¿¡ ´õ À¯»çÇÏ´Ù. ÀÌ Ã¥¿¡¼­´Â ÀÚ¹Ù ¾ð¾î¿¡ ´ëÇØ ÀÚ¼¼È÷ ´Ù·çÁö ¾ÊÁö¸¸ ¿©·¯ºÐÀº ÀÌ Ã¥ÀÇ ´ÙÀ½ ÆÇ¿¡¼­ ÀÚ¹Ù ¾ð¾î¸¦ »ç¿ëÇÏ¿© CORBA¸¦ ´Ù·ç´Â ¹æ¹ý¿¡ ´ëÇØ ¾òÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù.

ÀÏ´Ü ÀÛ¼ºµÈ IDLÀº IDL ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ ½ÇÁ¦ ÇÁ·Î±×·¡¸Ó°¡ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥ ¾ð¾î·Î º¯È¯µÈ´Ù. À̶§ º¯È¯ °¡´ÉÇÑ ¾ð¾î·Î´Â ÇöÀç±îÁö C, C++, ½º¸ôÅåÀÌ ÀÖÀ¸¸ç, ÇöÀç Ada¿Í COBOL , ÀÚ¹Ù º¯È¯ ±ÔÄ¢À» Á¦Á¤ÇÏ´Â ÀÛ¾÷À» ÁøÇàÇϰí ÀÖÀ¸¸ç °ÅÀÇ ¸¶¹«¸® µÇ¾ú´Ù. ±×·¯³ª ½ÇÁ¦ ÀÚ¹Ù ¾ð¾îÀÇ ±¤¹üÀ§ÇÑ È®»ê°ú ¾Æ¿ï·¯ ¸¹Àº Á¦Ç°µéÀÌ ÀÌ¹Ì ÀÚ¹Ù º¯È¯ ±â´ÉÀ» Á¦°øÇϰí ÀÖ´Ù.

1.3 CORBA IDL ¹®¹ý

¾Õ¼­ ¾ð±ÞÇÑ °Íó·³ CORBA IDL ¹®¹ýÀº C++°ú ¾ÆÁÖ À¯»çÇÏ´Ù. ¸¸¾à ¹Ì¸® C++À» ¾Ë°í Àְųª 1¸·¿¡¼­ÀÇ ³»¿ëÀ» ÀÍÇû´Ù¸é ¼Õ½±°Ô ¹è¿ï ¼ö ÀÖÀ» °ÍÀÌ´Ù.

C++°ú µ¿ÀÏÇÏ°Ô "//"¿Í "/* .. */" ¸ðµÎ »ç¿ëÀÌ °¡´ÉÇÏ´Ù. //´Â ÇÑ ÁÙ ÁÖ¼®À̰í /* .. */ Àº º¹¼ö ÁÙ¿¡ ´ëÇÑ ÁÖ¼®ÀÌ´Ù.

IDLÀº [Ç¥4.1]°ú °°Àº ¿¹¾à¾î¸¦ °¡Áö°í ÀÖ´Ù. ´ëºÎºÐ C++¿¡¼­ »ç¿ëÇÏ´Â °Í°ú µ¿ÀÏÇÏ¸ç ½ÇÁ¦ »ç¿ë¹æ¹ý°ú Àǹ̵µ µ¿ÀÏÇÏ´Ù. ¸î°¡Áö ƯÀÌÇÑ °Íµé·Î´Â ´ÙÀ½°ú °°Àº °ÍµéÀÌ ÀÖ´Ù.

ÇØ´ç ¸Þ¼Òµå È£Ãâ ÈÄ ¹Ù·Î ±× °á°ú¸¦ ó¸®ÇÏÁö ¾Ê°í ³ªÁß¿¡ ó¸®ÇÒ ¼ö

ÀÖ´Ù.
any default inout out switch attribute double interface raises TRUE boolean enum long readonly typedef case exception module sequence unsigned char FALSE Object string short union const float octet void context in oneway struct

[Ç¥ 4-1 ] IDL ¿¹¾à¾î

ÀÎÅÍÆäÀ̽º¿¡¼­ ¿ÀÆÛ·¹À̼Ç(¸Þ¼Òµå)¸¦ ¼±¾ðÇÒ °æ¿ì ¹Ýµå½Ã ¿ÀÆÛ·¹À̼ÇÀÇ ¸Å°³º¯¼ö, ¹Ýȯ °ªÀÇ µ¥ÀÌŸ ÇüÀ» ÁöÁ¤ÇÏ¿©¾ß ÇÑ´Ù(Âü°í·Î ¿ÀÆÛ·¹À̼ǰú ¸Þ¼Òµå´Â °°Àº ÀǹÌÀÌ´Ù. ±×·¯³ª CORBAÀÇ Ç¥ÁØ¿¡¼­´Â ¿ÀÆÛ·¹À̼ÇÀ̶õ ¿ë¾î¸¦ »ç¿ëÇϹǷΠ¿©±â¼­´Â °¡±ÞÀû ¸Þ¼Òµåº¸´Ù´Â ¿ÀÆÛ·¹À̼ÇÀÌ·± ¿ë¾î¸¦ »ç¿ëÇϱâ·Î ÇÑ´Ù). IDLÀº ±âº»ÀûÀÎ µ¥ÀÌŸ Çü (char, short, long, float), ±¸Á¶Ã¼ À¯Çü(struct, union, enumeration), ±×¸®°í ÅÛÇø´ À¯Çü(sequence, array, string)À» Áö¿øÇÑ´Ù. IDLÀº any µ¥ÀÌŸ Çüµµ Á¦°øÇϴµ¥ ÀÌ À¯ÇüÀº ¾î¶°ÇÑ IDL µ¥ÀÌŸ ÇüÀÌ¶óµµ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é, ¾î¶² ¿ÀÆÛ·¹À̼ÇÀÇ ¸Å°³º¯¼ö°¡ ¹ÞÀ» ¼ö ÀÖ´Â µ¥ÀÌŸ ÇüÀÌ ´Ù¾çÇÑ °æ¿ì any µ¥ÀÌŸ ÇüÀ» »ç¿ëÇÑ´Ù. ÀÌµé µ¥ÀÌŸ ÇüÀº typedef¸¦ »ç¿ëÇÏ¿© ´Ù¸¥ À̸§(alias name)À¸·Î ¹Ù²Ü ¼ö ÀÖ´Ù.

IDLÀº ¼¼°¡Áö À¯ÇüÀÇ ±¸Á¶Ã¼¸¦ Áö¿øÇÑ´Ù- ±¸Á¶Ã¼, À¯´Ï¿Â, ³ª¿­.

- ±¸Á¶Ã¼(Structure)

¿¬°ü °ü°è°¡ ±íÀº µ¥ÀÌŸµé¿¡ ´ëÇ¥µÇ´Â À̸§À» ºÎ¿© ÇÔÀ¸·Î½á ÇØ´ç µ¥ÀÌŸµéÀ» ±×·ìÀ¸·Î ¹­À» ¼ö ÀÖ´Ù

struct date {

unsigned short month;

unsigned short day;

short year;

};

- À¯´Ï¿Â(Union)

¼­·Î ´Ù¸¥ µ¥ÀÌŸ Çü°ú Å©±â¸¦ °¡Áö°í ÀÖ´Â µ¥ÀÌŸµéÀÌ ÀÖÀ» °æ¿ì °øÅëÀÇ À̸§À¸·Î ÇÊ¿äÇÑ µ¥ÀÌŸ Çü ¹× º¯¼ö¸¦ ¼±ÅÃÇϱâ À§ÇØ »ç¿ëÇÑ´Ù. C³ª C++¿Í ´Þ¸® °¢ µ¥ÀÌŸ ¸â¹ö´Â case ¶óº§°ú ÇÔ²² ¼±¾ðµÈ´Ù.

union token switch (long) {

case 1: char cval;

case 2: float fval;

case 3: double dval;

default: long lval;

};

- ³ª¿­(enumeration)

µ¥ÀÌŸ ¸â¹öµéÀ» ƯÁ¤ ¼ø¼­·Î ³ª¿­ÇÒ ¶§ »ç¿ëÇϸç, ù¹øÂ° ¸â¹ö¿¡ ƯÁ¤ ¼ýÀÚ¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é 0 °ªÀÌ ÇÒ´çµÇ°í ³ª¿­µÈ ¼ø¼­´ë·Î 1¾¿ Áõ°¡ µÈ´Ù. ´ÙÀ½ ¿¹¿¡¼­ Monday¿¡´Â 0ÀÌ ÇÒ´çµÈ´Ù
enum workday { Monday, Tuesday, Wednesday, Thursday, Friday };

IDLÀº µÎ Á¾·ùÀÇ ÅÛÇø´ À¯ÇüÀ» Á¦°øÇÑ´Ù - sequence¿Í string.

- ½ÃÄö½º(Sequence)

¼±ÅÃÀûÀ¸·Î ÃÖ´ë Å©±â¸¦ ¼±¾ðÇÒ ¼ö ÀÖ´Â 1Â÷¿ø ¹è¿­ÀÌ´Ù ½ÃÄö½º°¡ ÃÖ´ë Å©±â¸¦ °¡Áö°í ÀÖ´Ù¸é ¹Ù¿îµå ½ÃÄö½º(bounded sequence)¶ó Çϰí, ÃÖ´ë Å©±â°¡ ¾øÀ¸¸é ¾ð¹Ù¿îµå ½ÃÄö½º(unbounded sequence)¶ó ÇÑ´Ù. ½ÃÄö½ºÀÇ ±æÀÌ´Â ÇÒ´çµÇ´Â °ª¿¡ µû¶ó µ¿ÀûÀ¸·Î º¯°æµÇ¸ç, ÃÖ´ë°ªÀ» °¡Áö°í ÀÖ´Â ½ÃÄö½º´Â ÃÖ´ë Å©±â¸¦ ³ÑÀ» ¼ö ¾øÀ¸¸ç, ½ÃÄö½º°¡ ÃëÇÒ ¼ö ÀÖ´Â À¯ÇüÀº ¾î¶² IDL À¯ÇüÀÌ¶óµµ °¡´ÉÇÏ´Ù.

typedef¸¦ »ç¿ëÇÏ¿© µ¥ÀÌŸ Çü¿¡ »õ·Î¿î ¸íĪÀ» ºÎ¿©ÇÑ´Ù.
¹Ù¿îµå ½ÃÄö½º

typedef sequence<long, 64> vec64;

¾ð¹Ù¿îµå ½ÃÄö½º

typedef sequence<long> vec;

- ¹®ÀÚ¿­(String)

½ÃÄö½º¿Í µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î »ç¿ëÇϳª, ½ÃÄö½º¿Í ´Ù¸¥Á¡Àº ´ÜÁö ¹®ÀÚÇü¸¸À¸·Î ÀÌ·ç¾îÁø 1Â÷¿ø ¹è¿­À̶ó´Â Á¡ÀÌ´Ù. ÀÌ°Í ¿ª½Ã ¹Ù¿îµå ¹®ÀÚ¿­°ú ¾ð¹Ù¿îµå ¹®ÀÚ¿­ µÎ Á¾·ù¸¦ »ç¿ëÇÑ´Ù.

¹Ù¿îµå ¹®ÀÚ¿­

typedef string<16> name16;

¾ð¹Ù¿îµå ¹®ÀÚ¿­

typedef string name;

IDLÀº C³ª C++¿Í ´Þ¸® ¹è¿­ÀÇ Å©±â°¡ °íÁ¤µÇ¾î ÀÖ´Â ´ÙÂ÷¿ø ¹è¿­ÀÌ´Ù. ±×·¯¹Ç·Î ÇÁ·Î±×·¡¸Ó´Â ¹Ýµå½Ã ¹è¿­ÀÇ Å©±â¸¦ Á¤ÇØ ÁÖ¾î¾ß Çϸç typedef·Î¼­ ¹è¿­ À̸§À» ºÎ¿©ÇÑ´Ù.

¹Ù¿îµå ¹®ÀÚ¿­

typedef short table[64][64];

Çѹø ÃʱâÈ­µÈ °ªÀ» º¯°æÇÒ ¼ö ¾ø´Â µ¥ÀÌŸ ÇüÀÌ´Ù. »ó¼öÇüÀº ´ÙÀ½°ú °°Àº µ¥ÀÌŸ Çü°ú ÇÔ²² ¼±¾ð µÉ ¼ö ÀÖ´Ù.
booleanshort char
stringdoubleunsigned long
floatunsigned short long

[Ç¥4-2] »ó¼ö ¼±¾ð °¡´É µ¥ÀÌŸ Çü

¾Õ¼­ ¼Ò°³ ÇßµíÀÌ ÀÎÅÍÆäÀ̽º´Â ±¸Çö °´Ã¼°¡ Á¦°øÇÏ´Â ¼Ó¼º°ú ¿ÀÆÛ·¹À̼ǵ鿡 ´ëÇØ Á¤ÀÇÇÑ ¸í¼¼ÀÌ´Ù. ÀÎÅÍÆäÀ̽º ±¸¼º ¿ä¼Òµé°ú ÀÎÅÍÆäÀ̽º Á¤ÀǸ¦ À§ÇÑ ¸ÞÄ¿´ÏÁòÀº ´ÙÀ½°ú °°´Ù.

- ¿ÀÆÛ·¹À̼Ç(Operation, ¸Þ¼Òµå)

¿ÀÆÛ·¹À̼ÇÀº ÀÎÅÍÆäÀ̽º ³»ºÎ¿¡ ¼±¾ðµÇ¾î¾ß ÇÑ´Ù. ÀÎÅÍÆäÀ̽º¸¦ ±¸¼ºÇÏ´Â ¿ÀÆÛ·¹À̼ÇÀº ¿ÀÆÛ·¹ÀÌ¼Ç ¸Å°³º¯¼ö, ¿¹¿Üó¸®(exception), ¹Ýȯ °ªÀÇ À¯Çü, ¸Å°³º¯¼öÀÇ Àü´Þ ¹æÇâÀ¸·Î ±¸¼ºµÈ´Ù, ´ÙÀ½ ¿¹´Â getOuote¿Í getLowHigh ¿ÀÆÛ·¹À̼ÇÀ» º¸¿©ÁÖ°í ÀÖ´Ù. µ¥ÀÌŸ Çü ¾Õ¿¡ ÀÖ´Â in°ú outÀº ¸Å°³º¯¼öÀÇ Àü´Þ ¹æÇâÀÌ´Ù.
typedef float quote;

typedef float price;

interface QuoteService {

quote getQuote( in string stock);

void getLowHigh(in string stock, out price low, out price high);

};

¼Ó¼º ÀÇ ¹Ì
in¸Å°³º¯¼ö°¡ Ŭ¶óÀÌ¾ðÆ®¿¡¼­ ±¸Çö °´Ã¼·Î Àü´Þ
out¸Å°³º¯¼ö°¡ ±¸Çö °´Ã¼¿¡¼­ Ŭ¶óÀÌ¾ðÆ®·Î Àü´Þ
inout¾ç¹æÇâ ¸ðµÎ °¡´É

[Ç¥4-3] ¸Å°³º¯¼ö Àü´Þ ¹æÇâ ¼Ó¼º

- ¿¹¿Ü ó¸®(Exception)

¿¹¿Ü 󸮴 Ŭ¶óÀÌ¾ðÆ®°¡ ±¸Çö °´Ã¼ÀÇ ¿ÀÆÛ·¹À̼ÇÀ» È£ÃâÇÑ ÈÄ ¼­ºñ½º ¿äû¿¡ ´ëÇÑ °á°ú·Î¼­ Ưº°ÇÑ ¿¹¿Ü »óȲÀÌ ¹ß»ýÇßÀ» ¶§ Ŭ¶óÀÌ¾ðÆ®¿¡°Ô µÇµ¹·Á ÁÖ´Â µ¥ÀÌŸ ±¸Á¶ ÀÌ´Ù. ¿¹¿Ü 󸮿¡´Â »ç¿ëÀÚ°¡ Á÷Á¢ Á¤ÀÇÇÑ ¿¹¿Ü¿Í ½Ã½ºÅÛ¿¡¼­ ¹Ì¸® Á¤ÀÇµÈ ¿¹¿Ü, µÎ Á¾·ù°¡ ÀÖ´Ù. ÁÖÀÇÇÒ Á¡Àº ¿¹¿Ü´Â ¿ÀÆÛ·¹À̼ÇÀÇ ¸Å°³º¯¼ö³ª ´Ù¸¥ µ¥ÀÌŸ ¸â¹ö ¶Ç´Â ´Ù¸¥ µ¥ÀÌŸ ÇüÀ¸·Î »ç¿ëÇØ¼­´Â ¾È µÈ´Ù.

¿¹¿Ü 󸮸¦ ¼±¾ðÇϱâ À§Çؼ­´Â ¾î¶² ¿ÀÆÛ·¹À̼ǿ¡ raises¶ó´Â Ű¿öµå¿Í ÇÔ²² ¿¹¿Ü ó¸® À̸§À» ¼±ÅÃÀûÀ¸·Î ºÎ¿©ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹´Â »ç¿ëÀÚ°¡ Á¤ÀÇÇÑ ¿¹¿ÜÀÌ´Ù.
typedef float quote;

typedef float price;

interface QuoteService {

exception no_quote { string reason };

quote getQuote( in string stock) raises (no_quote);

void getLowHigh(in string stock, out price low, out price high);

};

½Ã½ºÅÛ¿¡¼­ Á¤ÀÇ ÇÑ ¿¹¿Ü´Â ¾î¶² ¼­ºñ½º ¿äû¿¡ ´ëÇÑ Ã³¸® °á°ú·Î¼­ ORB°¡ ³»º¸³»´Â Ç¥ÁØ ½ÇÇà ¿¡·¯ÀÌ´Ù. ´ÙÀ½Àº ½Ã½ºÅÛ Á¤ÀÇ ¿¹¿Ü ó¸®ÀÇ ¿¹ÀÌ´Ù.

Enum complete_status { COMPLETED_YES,

COMPLETED_NO,

COMPLETED_MAYBE };

.....

exception <½Ã½ºÅÛ Á¤ÀÇ ¿¹¿Ü ¸í>

{ unsigned long minor; completion_status completed; }

- ÄÁÅØ½ºÆ®

±¸Çö °´Ã¼ÀÇ Æ¯Á¤ ¿ÀÆÛ·¹À̼ǿ¡ ¿µÇâÀ» ÁÙ ¼ö Àִ Ŭ¶óÀÌ¾ðÆ® È¯°æ ¿ä¼Ò¿Í °ü·ÃµÈ ¸®½ºÆ®¸¦ ÄÁÅØ½ºÆ®¶ó ÇÑ´Ù. ´Ù¸¥ ¸»·Î´Â Ŭ¶óÀ̾ðÆ®ÀÇ Æ¯¼ºÀ» Ç¥ÇöÇØÁÖ´Â º°ÄªÀ¸·Î ÀÌÇØÇÒ ¼ö ÀÖ´Ù. ÄÁÅØ½ºÆ®¸¦ »ç¿ëÇϱâ À§Çؼ­´Â raises ¹®Àå ¹Ù·Î µÚ¿¡ context(context1, context2, ...) ÇüÅ·Π¼±¾ðÇÏ¿© Áֱ⸸ ÇÏ¸é µÈ´Ù. °¡´ÉÇÑ »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ´Ù. ¿¹¸¦ µé¸é, ´ÙÀ½ ¿¹´Â Query¶ó´Â ¿ÀÆÛ·¹À̼ÇÀÇ °á°ú¸¦ BULK_TRANSFER_DEVICE ÄÁÅØ½ºÆ® °´Ã¼¸¦ ÅëÇØ ´Ù¸¥ ÀåÄ¡·Î ¿Å±â´Â °ÍÀÌ´Ù. Âü°í·Î À¯´Ð½ºÀÇ ±×¸² ¿î¿µ üÁ¦ÀÎ XÀ©µµ¿ì ½Ã½ºÅÛ¿¡ Àͼ÷ÇÑ »ç¶÷À̶ó¸é µð½ºÇ÷¹À̸¦ ´Ù¸¥ °÷À¸·Î µ¹¸®´Â °ÍÀ» ÀÌÇØÇÒ °ÍÀÌ´Ù. ÀÌó·³ ÄÁÅØ½ºÆ®´Â Ŭ¶óÀ̾ðÆ®ÀÇ ³»¿ëÀ» ´Ù¸¥ °´Ã¼³ª ¼­¹ö ±¸Çö °´Ã¼·Î º¯°æÇÏ´Â ±â´ÉµéÀ» Á¦°øÇÑ´Ù.

Status_t Query( in Query_t query, out DataObj_t reponse)

raises( BAD_PARAM , WRONG_SYNTAX, UNKNOWN_INPUT )

context(BULK_TRANSFER_DEVICE , WINDOWS_SYSTEM,

REP_PREFERENCE) ;

- ÀϹæÅëÇà ¿ÀÆÛ·¹À̼Ç(Oneway Operation)

ÀϹæÅëÇàÀ̶õ Ŭ¶óÀÌ¾ðÆ®°¡ ±¸Çö °´Ã¼ÀÇ ¿ÀÆÛ·¹À̼ÇÀ» È£ÃâÇÏ°í ±× °á°ú¿¡ ´ëÇØ ´çÀå °ü½ÉÀÌ ¾øÀ½À» ¼±¾ðÇÏ´Â °ÍÀÌ´Ù. Áï, ÀÏ´Ü Å¬¶óÀÌ¾ðÆ®´Â È£Ã⸸ÇÏ°í ±× °á°ú¿¡ ´ëÇØ¼­´Â Ŭ¶óÀÌ¾ðÆ® ¹× ±¸Çö °´Ã¼ ¸ðµÎ ±× °á°ú °ª¿¡ ´ëÇØ¼­´Â Ã¥ÀÓÀ» ÁöÁö ¾ÊÀ½À» ³ªÅ¸³»´Â °ÍÀÌ´Ù. ÀϹæÅëÇà ¿ÀÆÛ·¹À̼ÇÀº ´Ù¸¥ ÀϹÝÀûÀÎ ¿ÀÆÛ·¹ÀÌ¼Ç ¹®À庸´Ù ¸ÕÀú ¼±¾ðµÅ¾ß ÇÑ´Ù.

interface alarms {

oneway void notify(in string event);

};

ÀϹÝÀûÀ¸·Î [±×¸²4-3]ó·³ Ŭ¶óÀÌ¾ðÆ®°¡ ÀÚ½ÅÀÌ º¸³½ ¼­ºñ½º ¿äû¿¡ ´ëÇÑ ÀÀ´äÀ» ±â´Ù¸®´Â È£Ãâ ¹æ½ÄÀ» ºí·°Å·(blocking) È£ÃâÀ̶ó Çϸç, ÀϹæÅëÇà ¿ÀÆÛ·¹À̼ǰ°Àº ÇüÅÂÀÇ È£ÃâÀ» ºñºí·°Å·(non-blocking) È£ÃâÀ̶ó ÇÑ´Ù.

[ ±×¸²4-3 ] ºí·°Å· È£Ãâ°ú ºñºí·°Å· È£Ãâ

¾ÖÆ®¸®ºäÆ®´Â CORBA¿¡¼­ Á¤ÀÇÇÑ µ¶Æ¯ÇÑ ¿ÀÆÛ·¹À̼ÇÀ¸·Î¼­ ¾Æ·¡ ¿¹¿¡¼­ º¸ÀÌ´Â °Íó·³ À̰ÍÀº ¾ð¶æ º¸±â¿¡ ƯÁ¤ µ¥ÀÌŸ ÇüÀÇ º¯¼ö¸¦ ¼±¾ðÇÑ °Íó·³ º¸À̳ª ½ÇÁ¦ ¿ÀÆÛ·¹À̼ÇÀ̶ó »ý°¢ÇÏ¸é Æ²¸²ÀÌ ¾ø´Ù. ÀÌ ¿ÀÆÛ·¹À̼ÇÀº Ŭ¶óÀÌ¾ðÆ®°¡ ƯÁ¤ º¯¼ö¿¡ ƯÁ¤ °ªÀ» ¼³Á¤Çϰųª °Ë»öÇÒ ¶§¿¡ ¼Õ½±°Ô IDL·Î Ç¥ÇöÇϱâ À§ÇØ °í¾ÈµÈ °ÍÀÌ´Ù À̰ÍÀº ½ÇÁ¦ C, C++, ½º¸ôÅå°°Àº ƯÁ¤ ÇÁ·Î±×·¥ ¾ð¾î·Î º¯È¯µÇ¾î _get°ú _set µÎ°³ÀÇ ¿ÀÆÛ·¹À̼ÇÀ» »ý¼ºÇÑ´Ù. ¾ÖÆ®¸®ºäÆ®´Â ¿É¼ÇÀ¸·Î attribute Ű¿öµå ¾Õ¿¡ readonly¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, ÀÌ ¿É¼ÇÀÌ ¼±¾ðµÈ º¯¼ö´Â ÇÒ´çµÈ °ªÀ» ¾ò¾î¿À´Â _get ¿ÀÆÛ·¹À̼Ǹ¸À» »ý¼ºÇÑ´Ù.
Interface MyInterface {

attribute float radius;

};

±âÁ¸¿¡ ÀÛ¼ºµÈ ÀÎÅÍÆäÀ̽º°¡ Á¸ÀçÇÏ´Â °æ¿ì ÇØ´ç ÀÎÅÍÆäÀ̽º³»¿¡ ¼±¾ðµÈ ¸ðµç ¿ä¼ÒµéÀ» ±×´ë·Î ¹°·Á¹Þ¾Æ »õ·Î¿î ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇ ÇÏ´Â °ÍÀ» »ó¼ÓÀ̶ó ÇÑ´Ù. ´ÙÀ½ ¿¹¿¡¼­´Â QuoteServiceÀÎÅÍÆäÀ̽º¸¦ »ó¼Ó¹Þ°í ¿©±â¿¡ createGroup°ú getGroupQuote ¿ÀÆÛ·¹À̼ÇÀ» Ãß°¡ÇÑ ÆÄ»ý GroupQuoteService ÀÎÅÍÆäÀ̽º¸¦ ¼±¾ðÇÑ °ÍÀÌ´Ù.

#inlcude "QuoteService.idl"

interface GroupQuoteService : QuoteService {

void createGroup( in string groupName, in string symbol1,

in string symbol2, in string symbol3);

void getGroupQuote ( in string groupName, out quote quote1,

out quote quote2, out quote quote3);

};

QuoteService´Â GroupQuoteServiceÀÇ ±â¹Ý ÀÎÅÍÆäÀ̽º(base interface)¶ó Çϸç GroupQuoteService´Â QuoteServiceÀÇ ÆÄ»ý ÀÎÅÍÆäÀ̽º¶ó ÇÑ´Ù. ±×¸®°í, ÆÄ»ý ÀÎÅÍÆäÀ̽º´Â º¹¼öÀÇ ±â¹Ý ÀÎÅÍÆäÀ̽º·ÎºÎÅÍ ÆÄ»ý µÉ ¼ö ÀÖ´Ù. ±â¹Ý ÀÎÅÍÆäÀ̽º´Â °£Á¢(indirect) ±â¹Ý ÀÎÅÍÆäÀ̽º¿Í Á÷Á¢ (direct) ±â¹Ý ÀÎÅÍÆäÀ̽º µÎ °¡Áö Á¾·ù·Î ±¸ºÐ µÈ´Ù.

- °£Á¢ ±â¹Ý ÀÎÅÍÆäÀ̽º

¾î¶² ÆÄ»ý ÀÎÅÍÆäÀ̽ºÀÇ ±â¹Ý ÀÎÅÍÆäÀ̽º°¡ ´Ù¸¥ ±â¹Ý ÀÎÅÍÆäÀ̽º·ÎºÎÅÍ ÆÄ»ýµÈ ÀÎÅÍÆäÀ̽º ÀÏ ¶§.

- Á÷Á¢ ±â¹Ý ÀÎÅÍÆäÀ̽º

¾î¶² ÆÄ»ý ÀÎÅÍÆäÀ̽ºÀÇ ±â¹Ý ÀÎÅÍÆäÀ̽º°¡ ´Ù¸¥ ±â¹Ý ÀÎÅÍÆäÀ̽º·ÎºÎÅÍ ÆÄ»ýµÇ

Áö ¾ÊÀº ÀÎÅÍÆäÀ̽º ÀÏ ¶§.

ÆÄ»ý ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÒ ¶§ ÆÄ»ý ÀÎÅÍÆäÀ̽º´Â µ¿ÀÏÇÑ ¿ÀÆÛ·¹À̼ÇÀ̳ª ¾ÖÆ®¸®ºäÆ® À̸§À» °¡Áö°í ÀÖ´Â ±â¹Ý Ŭ·¡½º·ÎºÎÅÍ »ó¼Ó ¹ÞÀ» ¼ö ¾øÀ¸¸ç, ¶ÇÇÑ »ó¼Ó ¹ÞÀº ¿ÀÆÛ·¹À̼ǰú ¾ÖÆ®¸®ºäÆ® À̸§À» Àç Á¤ÀÇ ÇÒ ¼ö ¾ø´Ù.

¸ðµâÀº Á¤ÀÇÇϰíÀÚ ÇÏ´Â ÀÎÅÍÆäÀ̽ºµéÀ» ÇϳªÀÇ ¼¼Æ®·Î ¹­±â À§ÇÑ À̸§°ø°£(namespace)À» Á¦°øÇϸç, º¯¼ö À̸§°ú °°Àº ½Äº°ÀÚ(Identifier)µéÀÇ »ç¿ë ¹üÀ§¸¦ Á¦¾îÇϱâ À§ÇØ »ç¿ëÇÑ´Ù. ¸ðµâ ³»¿¡¼­ ÀûÀýÇÏ°Ô IDL ¼±¾ðµé¿¡ ´ëÇÑ ¹üÀ§¸¦ ¼³Á¤ÇÔÀ¸·Î¼­ ´Ù¸¥ ¸ðµâ¿¡¼­ »ç¿ëµÈ ½Äº°ÀÚµé°ú Ãæµ¹ÀÌ ¹ß»ýÇÏ´Â °ÍÀ» ÇÇÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. Áï, ¾î¶² ¸ðµâ¿¡¼­ ¼±¾ðµÈ ½Äº°ÀÚ´Â ±× ¸ðµâ ¹Û¿¡ Á¤ÀǵǾî ÀÖ´Â ½Äº°ÀÚ¿Í µ¿ÀÏÇÑ À̸§À» °®À» ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.

¾î¶² ¸ðµâ¿¡¼­ »ç¿ëµÈ ½Äº°ÀÚµéÀ» ¿ÜºÎ¿¡¼­ »ç¿ëÇϰíÀÚ ÇÒ ¶§¿¡´Â '::'(À̸§ ÇØ°á ¿¬»êÀÚ, name resolution operator)¾Õ¿¡ ¸ðµâ À̸§À» ºÙ¿© »ç¿ëÇÑ´Ù. ¾Æ·¡ ¿¹Á¦¿¡¼­ ù ¹øÂ° °æ¿ì(1)´Â ¸ðµâ business ³»¿¡¼­ Á¤ÀÇµÈ MaxVal°ú ¸ðµâ ¿ÜºÎ¿¡¼­ Á¤ÀÇµÈ MaxValÀº º°°³ÀÇ ½Äº°ÀÚÀÌ´Ù. business¸ðµâ³»ÀÇ MaxValÀ» »ç¿ëÇÒ ¶§´Â business::MaxVal ó·³ À̸§ ÇØ°á ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© Á¢±ÙÇÑ´Ù. µÎ ¹øÂ° °æ¿ì(2)´Â ¼­·Î ´Ù¸¥ ¸ðµâ¿¡¼­ µ¿ÀÏÇÑ ÀÎÅÍÆäÀ̽º¸¦ ¼±¾ðÇÑ ¿¹ÀÌ´Ù.
(1) const long MaxVal = 100;

module business {

const long MaxVal = 50;

....

};

(2) module NYSE {

interface QuoteService {

.....

}

};

module AMEX {

interface QuoteService {

.....

}

};

any ÇüÀº ¾î¶°ÇÑ IDL °ªµµ ÀúÀåÇÒ ¼ö ÀÖ´Â µ¥ÀÌŸ ÇüÀ¸·Î¼­ ´Ù¾çÇÑ µ¥ÀÌŸ ÇüÀ» Àü´ÞÇØ¾ß¸¸ ÇÏ´Â ¸Å°³º¯¼ö¿¡¼­ »ç¿ëµÈ´Ù. ¶ÇÇÑ any´Â ´Ù¸¥ any À¯Çüµµ °¡´ÉÇÏ´Ù. any´Â ¾îÇø®ÄÉÀ̼ÇÀÌ any¿¡ ÀúÀåµÇ¾î ÀÖ´Â µ¥ÀÌŸ ÇüÀ» ÇØ¼®ÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â Typecode ±¸Á¶Ã¼¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù. any´Â C³ª C++ÀÇ void* ¿Í À¯»çÇÏ´Ù°í »ý°¢ÇÒ ¼ö ÀÖ´Ù.

Typedef´Â ƯÁ¤ µ¥ÀÌŸ Çü¿¡ À̸§À» ºÎ¿©ÇÏ´Â ¸ÞÄ¿´ÏÁòÀÌ´Ù. ÇÁ·Î±×·¡¸Ó´Â ±âº»ÀûÀÎ µ¥ÀÌŸ Çü»Ó ¾Æ´Ï¶ó ±¸Á¶Ã¼Çü µ¥ÀÌŸ, ÅÛÇø´ À¯Çü¿¡ À̸§À» ºÎ¿©ÇÑ´Ù. C,C++¿¡¼­ÀÇ typedef¿Í µ¿ÀÏÇÏ´Ù.

2Àå CORBA ÇÁ·Î±×·¡¹Ö

Áö±Ý±îÁö ¿ì¸®´Â CORBA ±¸Á¶, Ŭ¶óÀÌ¾ðÆ®¿Í ±¸Çö °´Ã¼°£ÀÇ Åë½Å ¹æ¹ý, ±×¸®°í IDL ¹®¹ý ±¸Á¶¿¡ ´ëÇØ¼­ »ìÆì º¸¾Ò´Ù. ÀÌÁ¦ ½ÇÁ¦·Î CORBA ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â ¹æ¹ýÀ» »ìÆìº¸¸é¼­ º¸´Ù ±¸Ã¼ÀûÀ¸·Î ºÐ»ê °´Ã¼¿¡ ´ëÇØ »ìÆìº¸ÀÚ. º» Àå¿¡¼­´Â ¾Æ´Ï¿À³ª»çÀÇ Orbix°ú ¿¢½ºÆÛ¼ÒÇÁÆ®»çÀÇPowerBroker¸¦ »ç¿ëÇÑ´Ù.

2.1 Orbix ¸¦ ÀÌ¿ëÇÑ CORBA ÇÁ·Î±×·¡¹Ö

CORBA ÀÀ¿ëÇÁ·Î±×·¥ °³¹ß°úÁ¤Àº RPC(Remote Procedure Call)ÀÇ °³¹ß°úÁ¤°ú À¯»çÇÏ´Ù. ´Ù½Ã ¸»ÇØ, RPC¿¡¼­ ¿øÇÏ´Â ÇÁ·Î½ÃÁ®¸¦ ¼­¹ö¿¡ Á¤ÀÇÇØµÎ°í Ŭ¶óÀÌ¾ðÆ®¿¡¼­ À̸¦ È£ÃâÇÏ´Â °Íó·³ CORBA ¿¡¼­µµ ¿øÇϴ Ŭ·¡½º¿Í ¸Þ¼Òµå(¿ÀÆÛ·¹À̼Ç)¸¦ ¼­¹ö ±¸Çö °´Ã¼¿¡ Á¤ÀÇÇØµÎ°í ÀÌ ¸Þ¼Òµå¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡¼­ È£ÃâÇÑ´Ù. RPC»ó¿¡¼­ ¼­¹ö¿Í Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °úÁ¤¿¡¼­ ÇÁ·Î±×·¡¸Ó¿¡°Ô ¹ß»ýÇÏ´Â ¾î·Á¿î ºÎºÐµéÀ» °¡·ÁÁÖ±â À§ÇØ RPCGEN(RPC Generator) À̶ó´Â ÄÄÆÄÀÏ·¯°¡ ÀÖµíÀÌ CORBA¿¡¼­´Â IDLÄÄÆÄÀÏ·¯°¡ Á¸ÀçÇÑ´Ù. °¡Àå ¸ÕÀú CORBA ÀÀ¿ë ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â µ¥ ÀÖ¾î »ý°¢ÇØ¾ß ÇÒ ÀÏÀº ¸ðµç °´Ã¼ÁöÇâ ÇÁ·Î±×·¥ °³¹ß°ú ¸¶Âù°¡Áö·Î ÇØ´ç ¹®Á¦¿¡ ÀûÇÕÇÑ Å¬·¡½º¸¦ µðÀÚÀÎÇÏ´Â °ÍÀÌ´Ù. ÀÌ Ã¥¿¡¼­´Â ÀÌ·¯ÇÑ µðÀÚÀÎ ¹æ¹ý¿¡ ´ëÇØ ´Ù·çÁö´Â ¾Ê´Â´Ù. ÀÌ Ã¥¿¡¼­´Â CORBA ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â ÀýÂ÷¸¦ ÀÌÇØÇϰí CORBAÀÇ ÀÛµ¿¿ø¸®¸¦ ÀÌÇØÇÏ´Â µ¥ ±× ¸ñÀûÀ» µÎ°í ÀÖ´Ù. À̸¦ À§ÇØ ¿©±â¼­´Â CORBA Ç¥ÁØÀ» ±¸ÇöÇÑ Á¦Ç° Áß ¾ÆÀÌ¿À³ª»ç¿¡¼­ °³¹ßÇÑ OrbixÀ» ÀÌ¿ëÇÏ¿© ÀÀ¿ë ½Ã½ºÅÛÀ» ÀÛ¼ºÇϵµ·Ï ÇÑ´Ù. Orbix¿¡ ´ëÇÑ º¸´Ù ÀÚ¼¼ÇÑ ³»¿ëÀº ¹Ú½º ±â»ç¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù.

¸ÕÀú ÆíÀÇ»ó ¿¹Á¦ ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÒ ½Ã³ª¸®¿À¸¦ ±¸»óÇØº¸ÀÚ. ¾ÆÁÖ °£´ÜÇϸ鼭µµ ºÐ»ê ÇÁ·Î±×·¥À» ÀÌÇØÇÏ´Â µ¥ ¾ÆÁÖ ÀûÀýÇÑ ¿¹Á¦ÀÎ °ÝÀÚ(grid)¸¦ »ç¿ëÇϵµ·Ï ÇÑ´Ù. °ÝÀÚ´Â 2Â÷¿øÀÇ ¹è¿­ ÇüŸ¦ °®´Â´Ù. µû¶ó¼­ °ÝÀÚ(grid)´Â Æø(width)°ú ³ôÀÌ(height)¶ó´Â ¼Ó¼ºÀ» °®°í ÀÖÀ¸¸ç Æø°ú ³ôÀÌ·Î ±¸ºÐµÇ´Â ÁöÁ¡¿¡ ƯÁ¤ÇÑ °ªÀ» ÀÔ·ÂÇÏ´Â set ¸Þ¼Òµå¿Í °ªÀ» ¾ò¾î¿À´Â get ¸Þ¼Òµå¸¦ °®´Â´Ù. ±âŸ ´Ù¸¥ ¸Þ¼Òµå¸¦ Áö¿øÇÒ ¼öµµ ÀÖÁö¸¸ ÇØ´ç ¸Þ¼Òµå¸¸À¸·Î Ŭ·¡½º¸¦ ±¸¼ºÇϱâ·Î ÇÑ´Ù. Á¤¸®ÇÏ¸é º» ¿¹Á¦¿¡¼­ »ç¿ëµÇ´Â Ŭ·¡½º´Â ´ÙÀ½°ú °°´Ù.

ÇÁ·Î±×·¥ À̸§ gridSrv , gridCnt

Ŭ·¡½º À̸§ grid

¾ÖÆ®¸®ºäÆ® short height

short width

¸Þ¼Òµå set(width , height, value)

get(width, height)

ÀÏ´Ü gridŬ·¡½º¿¡ ´ëÇÑ ÀÌÇØ°¡ ³¡³µ´Ù¸é º»°ÝÀûÀ¸·Î grid Ŭ·¡½º¸¦ ÀÌ¿ëÇÑ Å¬¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥°ú ¼­¹ö ÇÁ·Î±×·¥ÀÌ ¾î¶² °úÁ¤À» ÅëÇØ »óÈ£ÀÛ¿ë ÇÏ´Â Áö ¾Ë¾Æº¸ÀÚ.

grid Ŭ¶óÀÌ¾ðÆ® grid ±¸Çö °´Ã¼

set(1,1,10) È£Ãâ Ŭ¶óÀÌ¾ðÆ® ¼­¹ö set(1,1,10) ¼öÇà

½ºÅÍºê ½ºÄÌ·ÎÅÏ

get(1,1) È£Ãâ get(1,1) ¼öÇàÈÄ

10À» ¹Ýȯ

³×Æ®¿÷

[ ±×¸²4-4 ] grid Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö ±¸Çö °´Ã¼»çÀÌÀÇ ÀÛµ¿ ½Ã³ª¸®¿À

³×Æ®¿÷À» °æÀ¯ÇÑ ºÐ»êȯ°æ¿¡¼­ grid Ŭ¶óÀÌ¾ðÆ®´Â [±×¸²4-4]¿¡¼­ ó·³ ±¸Çö °´Ã¼¿¡°Ô ¿øÇÏ´Â °ªÀ» ÀÔ·ÂÇϱâ À§ÇØ set() ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù. ÀÌ ¸Þ¼Òµå´Â Ŭ¶óÀ̾ðÆ®ÀÇ ½ºÅͺ긦 ÅëÇØ ´Ù½Ã ±¸Çö °´Ã¼ÀÇ ½ºÄÌ·ÎÅÏÀ» °ÅÃÄ ½ÇÁ¦ Äڵ尡 Á¸ÀçÇÏ´Â ¼­¹ö °´Ã¼»óÀÇ set() ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù. ¸¶Âù°¡Áö·Î ¿øÇÏ´Â À§Ä¡ÀÇ °ªÀ» ¾ò±â À§ÇØ Å¬¶óÀÌ¾ðÆ®´Â get()¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù. ±¸Çö °´Ã¼ÂÊ¿¡¼­ È£ÃâµÈ get()¸Þ¼Òµå´Â ÇØ´ç ¸Þ¼Òµå¸¦ ¼öÇàÇÑ ÈÄ °á°ú °ªÀ» ´Ù½Ã ½ºÄÌ·ÎÅÏÀ» ÅëÇØ Ŭ¶óÀ̾ðÆ®ÀÇ ½ºÅͺ긦 ÅëÇØ ¹ÝȯÇÑ´Ù.

ÀÌ °úÁ¤¿¡¼­ ÇÁ·Î±×·¡¸Ó´Â ÀüÇô ³×Æ®¿÷ ±â´ÉÀ» Á¦°øÇÏ´Â ½ºÅͺê¿Í ½ºÄÌ·ÎÅÏ¿¡ ´ëÇØ °í¹ÎÇÒ Çʿ䰡 ¾ø´Ù. ¿Ö³ÄÇϸé CORBA°¡ ÀÚµ¿ÀûÀ¸·Î ÇÊ¿äÇÑ Äڵ带 »ý¼ºÇØ Áֱ⠶§¹®ÀÌ´Ù.

=================== Orbix¿¡ ´ëÇÑ ÂªÀº °íÂû =======================

1. OrbixÀÇ ½ÇÇ౸Á¶

OrbixÀº ÀÀ¿ë ÇÁ·Î±×·¥À» °³¹ß, ±¸µ¿½Ã۱â À§ÇØ 3°¡Áö °³¹ß ¹× ½ÇÇàȯ°æÀ» Á¦°øÇÑ´Ù. Çϳª´Â Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ëÇÁ·Î±×·¥À» À§ÇÑ ¶óÀ̺귯¸® ITcltÀÌ°í ¶Ç Çϳª´Â ¼­¹ö ÀÀ¿ë ÇÁ·Î±×·¥À» À§ÇÑ ¶óÀ̺귯¸® ITsrcÀÌ´Ù. ¸¶Áö¸·À¸·Î´Â Orbix ½ÇÇà µ¥¸óÀÎ Orbixd°¡ ÀÖ´Ù. ½ÇÁ¦ ITclt ´Â ITsrc ÀÇ ¼­ºê¼ÂÀÌ´Ù. ¼­¹ö ¶óÀ̺귯¸®´Â °´Ã¼Á¶ÀÛÀ» À§ÇØ ¿ø°ÝÁöÀÇ ¿ä±¸»çÇ×À» ¿äûÇϰųª Àü´Þ ¹ÞÀ» ¼ö ÀÖ´Ù. ±×·¯³ª Ŭ¶óÀÌ¾ðÆ® ¶óÀ̺귯¸®´Â ¿ä±¸ »çÇ×µéÀ» ÃʱâÈ­Çϰí Àü´ÞÇÏ´Â ±â´É¸¸À» Á¦°øÇÑ´Ù. Orbix ½ÇÇà µ¥¸óÀÎ Orbixd ´Â ¼­¹öÂÊ¿¡¼­¸¸ ÇÊ¿äÇÏ´Ù. ¼­¹öÂÊ¿¡ À§Ä¡ÇÑ Orbixd´Â Ŭ¶óÀÌ¾ðÆ® ¿äû¿¡ ´ëÇØ ½Ç½Ã°£¿¡ ÀÚµ¿ÀûÀ¸·Î ¼­¹öÂÊÀÇ ±¸ÇöºÎºÐÀ» ¸Þ¸ð¸®»ó¿¡ ·Îµå½ÃŰ´Â ¿ªÇÒÀ» ÇÑ´Ù. ±¸Çö °´Ã¼ÀÇ ±¸ÇöºÎºÐÀ» ·Îµå½Ãų ¶§ Orbixd´Â CORBAÇ¥ÁØ¿¡¼­ Á¦¾ÈÇÑ ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î ±¸Çö °´Ã¼ÀÇ ±¸ÇöºÎºÐÀ» ±¸µ¿½Ãų ¼ö ÀÖ´Ù. ´ÙÀ½ [±×¸²4-5]´Â ½ÇÁ¦ 2°³ÀÇ ¸Ó½®»ó¿¡¼­ ¼³Ä¡°¡´ÉÇÑ ½Ã³ª¸®¿ÀÁß ÇϳªÀÌ´Ù.

[ ±×¸²4-5 ] OrbixÀÇ ½ÇÇà½Ã°£ ȯ°æÀÇ ¿¹

2. OrbixÀÇ ½Ã½ºÅÛ ±¸Á¶

OrbixÀÇ ½Ã½ºÅÛÀº [±×¸²4-6]°ú °°Àº ±¸Á¶·Î ±¸¼ºµÇ¾î ÀÖ´Ù. CORBAÇ¥ÁØ¾È ÀÚü°¡ ±¸ÇöÂÊ º¸´Ù´Â ±â´É ¹¦»ç¿¡ ÁßÁ¡À» µÎ¾ú±â ¶§¹®¿¡ ½ÇÁ¦ ±× ±¸Çö¿¡ °üÇÑ ºÎºÐÀº °³¹ßÀÚ¿¡°Ô ¸ðµç °ÍÀÌ ¸Ã°ÜÁ® ÀÖ´Ù°í ÇÒ ¼ö ÀÖ´Ù. OrbixÀÇ ½Ã½ºÅÛ ±¸Á¶¸¦ °£´ÜÈ÷ »ìÆìº¸¸é ´ÙÀ½°ú °°´Ù.


[ ±×¸²4-6 ] OrbixÀÇ ±¸Á¶

Orbix´Â Å©°Ô Åë½Å ºÎºÐÀ» ´ã´çÇÏ´Â ¸Þ¼¼Â¡ ¿£Áø ºÎºÐ°ú CORBA ·±Å¸ÀÓ ¼­ºñ½º¸¦ Á¦°øÇÏ´Â ·±Å¸ÀÓ ¿£Áø, ±×¸®°í ±âŸ ºÎ°¡ ¼­ºñ½º¸¦ Á¦°øÇÏ´Â ºÎºÐÀ¸·Î ³ª´¶´Ù. °¢ ºÎºÐÀÇ ³»¿ëÀº ´ÙÀ½°ú °°´Ù.

¸Þ¼¼Â¡ ¿£Áø ºÎºÐÀº ÇϺο¡ Ç÷¯±×-ÀÎ °¡´ÉÇÑ ´Ù¾çÇÑ ÇÁ·ÎÅäÄÝÀ» ±â¹ÝÀ¸·Î ÇÏ¿© OrbixÀÇ ÇʼöÀûÀÎ Àü¼Û±â´ÉÀ» Á¦°øÇÑ´Ù. ƯÈ÷, ÀÌ ºÎºÐÀº ±âÁ¸ÀÇ 1.X ¹öÀü°ú ºñ±³ÇÒ ¶§ °¡Àå ¸¹ÀÌ º¯È­µÈ ºÎºÐÀÌ´Ù.

½ÇÁ¦ ÀÌ ºÎºÐÀº 4°³ÀÇ Ãß»óÈ­ Ŭ·¡½º·Î ±¸ÇöµÇ¾î ÀÖ´Ù.

Channel , Protocol , Corder , EventHandler

¿©±â¼­ Channel Ãß»óÈ­ Ŭ·¡½º´Â Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö ±¸Çö °´Ã¼»çÀÌÀÇ ¿¬°áÀ» ´ã´çÇÑ´Ù. ƯÈ÷, Orbix´Â ´ÜÀÏ Ã¤³Î»ó¿¡ °´Ã¼µé°£ÀÇ ´ÙÁß ¿¬°áÀ» Áö¿øÇϸç ä³Î·Î TCP/IP¸¦ ºñ·ÔÇÏ¿© IIOP, OLTP ½Ã½ºÅÛ¿¡¼­ Á¦°øÇÏ´Â MQSeries ä³Î, ÆúÆ®Å緱Ʈ ±â´ÉÀ» Á¦°øÇÏ´Â ISIS ä³Î µîÀ» ¼±ÅÃÀûÀ¸·Î ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.

Protocol Ãß»óÈ­ Ŭ·¡½º´Â ä³Î»ó¿¡¼­ »ç¿ëµÇ´Â Åë½Å ÇÁ·ÎÅäÄÝÀ» Á¦°øÇÑ´Ù. ÀÌ Å¬·¡½º´Â ±âº»ÀûÀ¸·Î ¸ðµç ÇÁ·ÎÅäÄÝÀÌ request , reply, exception reply ¶ó´Â ¹æ½ÄÀ» »ç¿ëÇÑ´Ù°í °¡Á¤ÇÑ´Ù. ÀÌ Å¬·¡½º¸¦ ±¸Ã¼È­ÇÑ Å¬·¡½º·Î´Â OMG IIOP¸¦ ±¸ÇöÇÑ IIOP Ŭ·¡½º¿Í ±âÁ¸ÀÇ Orbix¿¡¼­ »ç¿ëÇÏ´ø OrbixProtocol ÀÌ ÀÖ´Ù.

Loader Ãß»óÈ­ Ŭ·¡½º´Â Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö °´Ã¼»çÀÌÀÇ µ¥ÀÌŸ ±³È¯½Ã ÀÌ µé µ¥ÀÌŸ¸¦ÀÇ ¸¶¼£¸µ , ¾ð¸¶¼£¸µ ±â´ÉÀ» Á¦°øÇÑ´Ù. Loader Ŭ·¡½ºÀÇ ÇÏÀ§ Ŭ·¡½º·Î IIOP ÇÁ·ÎÅäÄÝÀÇ CDR(Common Data Representation)À» ±¸ÇöÇÑ IIOP Encoder¿Í ÀÌÀüÀÇ OrbixProtocol¿¡¼­ »ç¿ëÇÏ´ø XDR Ç¥ÇöÀ» ±¸ÇöÇÑ OrbixProtocol Encoder, °°Àº µ¥ÀÌŸ Ç¥Çö ±¸Á¶¸¦ °®´Â ½Ã½ºÅÛ°£ÀÇ ÃÖÀûÈ­ Åë½ÅÀ» À§ÇÑ Null Encoder°¡ ÀÖ´Ù.

EventHandler´Â Ŭ¶óÀ̾ðÆ®ÀÇ µ¿±â ¶Ç´Â ºñµ¿±â Åë½Å ¹æ¹ý¿¡ ´ëÇÑ À̺¥Æ® 󸮸¦ ´ã´çÇÑ´Ù.

Orbix ·±Å¸ÀÓ ¿£Áø ºÎºÐÀº Ŭ¶óÀÌ¾ðÆ®¿Í ±¸Çö °´Ã¼ÀÇ API, IDL ÄÄÆÄÀϽà ÇÊ¿äÇÑ ±â´ÉµéÀ» Á¦°øÇÑ´Ù. ±âº»ÀûÀ¸·Î ½ÇÇà½Ã½ºÅÛÀº Request Ŭ·¡½º¿Í Object Ŭ·¡½º·Î ±¸¼ºµÇ¾î Àִµ¥ Request Ŭ·¡½º´Â ¿ø°ÝÁöÀÇ °´Ã¼¿Í Åë½ÅÇϴµ¥ ÇÊ¿äÇÑ ±âº» Á¤º¸¸¦ °®°í ÀÖÀ¸¸ç ObjectŬ·¡½º´Â ¸ðµç IDLŬ·¡½ºµéÀÇ Åä´ë Ŭ·¡½ºÀÌ´Ù. Request¿Í ObjectÀ̿ܿ¡µµ C ³ª C++¿¡¼­ void* °°Àº ¿ªÇÒÀ» ÇÏ´Â any Ŭ·¡½º¿Í ½ÇÇà½Ã°£¿¡ °¢Á¾ ŸÀÔ¿¡ ´ëÇÑ Á¤º¸¸¦ °áÁ¤ÇϱâÀ§ÇØ ÇÊ¿äÇÑ TypeCodeµî ÀÌ ÀÖÀ¸¸ç ÇÁ·Î±×·¥À» ½ÇÇà Áß ¿ø°ÝÁöÀÇ °´Ã¼¸¦ ·ÎÄÿ¡¼­ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇØÁÖ´ÂProxy °´Ã¼¸¦ »ý¼ºÇÏ´Â ¿ªÇÒµµ ÇÑ´Ù.

¸Þ¼¼Â¡ ¿£Áø ºÎºÐ°ú ·±Å¸ÀÓ ¿£Áø ºÎºÐ¿Ü¿¡ Á¦°øµÇ´Â ½Ã½ºÅÛ ±¸¼º ¿ä¼ÒµéÀº ÀÀ¿ë ÇÁ·Î±×·¥ ÀÛ¼ºÀÚ¿¡°Ô ÁÖ¾îÁö´Â °´Ã¼ Á¶ÀÛ ±â´ÉµéÀÌ´Ù. CORBA¿¡¼­ Á¤ÀÇÇÑ ´ëºÎºÐÀÇ ±âº» ±â´ÉµéÀ» Á¦°øÇÑ´Ù. ±×·¯³ª CORBA ¼­ºñ½º¿¡ Á¤ÀÇµÈ ¸ðµç ±â´ÉÀ» Á¦°øÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. Orbix¿¡¼­ Á¦°øÇÏ´Â ±â´ÉÀ» À̾ °è¼Ó ¼³¸íÇϵµ·Ï ÇÑ´Ù.

  1. OrbixÀÇ ¼³Ä¡ ¹× ÀÛµ¿ ȯ°æ

´Ü°è1) ÇÁ·Î±×·¥ÀÇ ¼³Ä¡

ÇØ´ç ÀνºÅç CD-ROMÀ» ³Ö°í À©µµ¿ì ¿î¿µÃ¼Á¦ÇÏ¿¡¼­ setup.exe ÇÁ·Î±×·¥À» ½ÇÇàÇϰųª À¯´Ð½º»ó¿¡¼­ ´ÙÀ½ÀÇ ¸í·ÉÀ» ½ÇÇàÇÏ¿© ÇÁ·Î±×·¥À» ¼³Ä¡ÇÑ´Ù.

% pkgadd -d devicename

Âü°í·Î Orbix2.2.¹öÀüÀ» ¼³Ä¡ÇÏ¸é ´ÙÀ½°ú °°Àº ÇÁ·Î±×·¥ ±×·ìÀ» ¾òÀ» ¼ö ÀÖ´Ù. ÀÌ ±×·ì¿¡´Â Orbix µ¥¸óÀ» ºñ·ÔÇÏ¿© ´Ù¾çÇÑ À¯Æ¿¸®Æ¼ µîÀÌ Æ÷ÇԵǾî ÀÖ´Ù.


[ ±×¸² 4-7 ] Orbix ÇÁ·Î±×·¥ ±×·ì

´Ü°è2) ȯ°æ Á¶Àý

OrbixÀÇ È¯°æ Á¶ÀýÀº ´ÙÀ½ÀÇ 2°³ÀÇ ÆÄÀÏÀ» ÅëÇØ ±¸¼ºµÈ´Ù.

ORBIX.CFG ORBVARS.BAT

ORBIX.CFG ÆÄÀÏÀº Orbixȯ°æ Àü¹Ý¿¡ °üÇÑ Á¤º¸°¡ ´ã°ÜÁ® ÀÖ´Ù. ´ÙÀ½Àº ORBIX.CFG¿¡ ¼±¾ðµÈ ȯ°æ º¯¼öµéÀÌ´Ù. Orbixd µ¥¸ó ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÏ°Ô µÉ Åë½Å Æ÷Æ®µé¿¡ ´ëÇÑ Á¤º¸¿Í µµ¸ÞÀÎ À̸§ÀÌ ¼±¾ðµÇ¸ç ¿¡·¯ÆÄÀÏÀÇ À§Ä¡, ±¸Çö ÀúÀå¼Ò¿Í ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò, OrbixÀÇ È¨µð·ºÅ丮 µî¿¡ ´ëÇÑ Á¤º¸¸¦ ´ã°í ÀÖ´Ù. ´ÙÀ½ ¿¹´Â ÇÊÀÚ°¡ À©µµ¿ìNT¿¡¼­ »ç¿ëÇϰí ÀÖ´Â Orbix ȯ°æ Á¤º¸ÀÌ´Ù.

// Orbix.cfg

IT_DAEMON_PORT 1570

IT_DAEMON_SERVER_BASE 1590

IT_LOCAL_DOMAIN hit.co.kr

IT_ERRORS D:\ORBIX22\errmsgs

IT_IMP_REP_PATH D:\ORBIX22\imprep

IT_INT_REP_PATH D:\ORBIX22\intrep

IT_LOCATOR_PATH D:\ORBIX22\

IT_TEMPLATE_CODE D:\ORBIX22\CORBA2\template

ORBVARS.BATÀº Orbix ÀÀ¿ë ÇÁ·Î±×·¥ ÀÛ¼º½Ã ÇÊ¿äÇÑ È¯°æ º¯¼ö¸¦ ½Ã½ºÅÛ¿¡ ¼³Á¤ÇÏ´Â µ¥ ÇÊ¿äÇÑ Á¤º¸°¡ ´ã°ÜÁ® ÀÖ´Ù. ´ÙÀ½Àº ÇÊÀÚ°¡ »ç¿ëÇϰí ÀÖ´Â ORBVARS.BAT ÆÄÀÏÀÇ ¿¹ÀÌ´Ù.

SET ORBIX_ROOT=E:\ORBIX22

SET IT_CONFIG_PATH=%ORBIX_ROOT%

SET PATH=%PATH%;%ORBIX_ROOT%\BIN

SET INCLUDE=%INCLUDE%;%ORBIX_ROOT%\INCLUDE

SET LIB=%LIB%;%ORBIX_ROOT%\LIB

SET IT_IDL_TEMPLATE_CODE=%ORBIX_ROOT%%MAPPING%\TEMPLATE

ÀÌ ÆÄÀÏ¿¡¼­´Â OrbixÀÇ È¨µð·ºÅ丮¿Í idlµî °¢Á¾ Orbix ½ÇÇà ¸í·É¾î°¡ µé¾îÀÖ´Â À§Ä¡¿Í ¶óÀ̺귯¸® ¹× ÀÎÅ©·çµå ÆÄÀϵ鿡 ´ëÇÑ Á¤º¸°¡ ¼±¾ðµÇ¾î ÀÖ´Ù. À¯´Ð½ºÀÇ °æ¿ì¿¡µµ °°Àº ÆÄÀÏÀÌ Á¸ÀçÇÑ´Ù. ´Ü È®ÀåÀÚ¸¸ÀÌ .VAR¿¡¼­ .sh ³ª .csh·Î ¹Ù²ð »ÓÀÌ´Ù.

Âü°í·Î À©µµ¿ì ¹öÀü¿¡¼­ "Orbix configuration"À̶õ ÇÁ·Î±×·¥Àº [±×¸²4-8] ó·³ À©µµ¿ì»ó¿¡¼­ ¼Õ½±°Ô Orbix ¼³Á¤À» °ü¸®ÇÒ ¼ö ÀÖ°Ô ÇØ ÁØ´Ù.


[ ±×¸²4-8 ] Orbix ¼³Á¤ ÇÁ·Î±×·¥

4. OrbixÀÇ ±âº»±â´É

IDLÀº CORBA¿¡¼­ °´Ã¼ ¾Æ´äŸ¿Í ´õºÒ¾î °¡Àå Áß¿äÇÑ ±â´É Áß ÇϳªÀÌ´Ù. IDLÀº ±¸Çö ¾ð¾î¿¡ µ¶¸³ÀûÀÎ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÏ°Ô ÇØÁØ´Ù. ´Ù½Ã ¸»ÇØ, ±¸Çö¾ð¾î Á߸³ÀûÀÎ ÀÀ¿ë ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö ÀÖ°Ô ÇØ ÁØ´Ù. ƯÈ÷ IDLÀº C++¿¡ ³»ÀçµÈ º¹À⼺À» Á¦°ÅÇÏ¿© ´Ü¼øÈ­½ÃŰ°í ¿©±â¿¡ »õ·Î¿î ±â´ÉÀ» Ãß°¡ÇÏ¿´´Ù. Ãß°¡ÇÑ ±â´ÉÀº ´ÙÀ½°ú °°´Ù. °¢ ±â´É¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº ¾Õ¼± ÀýÀ» ÂüÁ¶Ç϶ó.

attributes , sequence , string , exception , parameter modes , context clause

- Interface

IDLÀÇ ±âº»´ÜÀ§´Â InterfaceÀÌ´Ù. ´Ù½Ã ¸»ÇØ °´Ã¼ÀÇ Å¸ÀÔÀÌ Interface·Î °áÁ¤µÈ´Ù´Â ¸»ÀÌ´Ù. ½ÇÁ¦ Interface´Â C++ÀÇ Class¿Í µ¿ÀÏÇÏ´Ù. µû¶ó¼­ Interface»çÀÌ¿¡´Â »ó¼Ó(is-a)°ú ³»Æ÷(is-part-of) °ü°è°¡ ³»ÀçµÇ¾î ÀÖ´Ù. ´ÙÀ½ÀÇ ¿¹¸¦ »ìÆìº¸ÀÚ.

// account.idl

interface account {

// attributes

readonly attributes string dateLastmodified;

readonly attributes float balance;

attributes string owner;

// operations

void makeDeposit( in float amount);

boolean makeWithdrawal( in float amount , out float balance );

};

interface´Â attributeµé°ú operationÀ¸·Î ±¸¼ºµÈ´Ù.

attribute´Â Ŭ·¡½ºÀÇ ¸â¹öº¯¼ö·Î ¸ÅÇ뵃 ¼ö ÀÖ´Ù. ±×·¯³ª ½ÇÁ¦ interfaceÀÇ attribute´Â 2°³ÀÇ ¸â¹öÇÔ¼ö·Î º¯È¯µÈ´Ù.

attribute -> set the value , get the value

±×·¯³ª ¸¸¾à attribute°¡ readonly·Î ¼±¾ðµÇ¸é get ÇÔ¼ö·Î¸¸ º¯È¯µÈ´Ù.

readonly attribute -> get the value

½ÇÁ¦ ÀÌ attributeµéÀº °¢±â ŸÀÔÀ» °®°í Àִµ¥ ŸÀÔ¿¡´Â ½Ã½ºÅÛ¿¡¼­ Áö¿øÇϴ ŸÀÔ°ú »ç¿ëÀÚ°¡ Á¤ÀÇÇÑ Å¸ÀÔ ¸ðµÎ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

Orbix ½Ã½ºÅÛ¿¡¼­ Áö¿øÇϴ ŸÀÔÀº ´ÙÀ½°ú °°´Ù.

short , long , unsigned short, unsigned long , float , double , char , boolean , octet , any , string

¿©±â¼­ Áß¿äÇÑ Á¡Àº int¿Í unsigned char ÀÇ °æ¿ì ½Ã½ºÅÛ¸¶´Ù °¢±â ±× Áö¿ø¹üÀ§°¡ ´Ù¸£±â ¶§¹®¿¡ ±âº»Å¸ÀÔÀ¸·Î Áö¿øÇÏÁö ¾Ê´Â´Ù´Â Á¡ÀÌ´Ù. ¶ÇÇÑ stringÀÇ °æ¿ì IDL¿¡¼­ Æ÷ÀÎÅͰ¡ ¾Æ´Ï±â¶§¹®¿¡ ²À char* ¿Í µ¿ÀÏÇÑ °Í¸¸Àº ¾Æ´Ï´Ù. µû¶ó¼­ ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

string , string[10]

operationµéÀº C++ÀÇ ¸â¹öÇÔ¼ö¿Í ´ëºÎºÐ µ¿ÀÏÇÑ´Ù. ´ÜÁö ´Ù¸¥ Á¡Àº ¸Å°³º¯¼öÀÇ Àü´Þ ¸ðµå¸¦ °®´Â´Ù´Â Á¡ÀÌ´Ù. ´ÙÀ½Àº operation¿¡¼­ »ç¿ë°¡´ÉÇÑ Àü´Þ ¸ðµåµéÀÌ´Ù.

in È£ÃâÇÏ´Â °´Ã¼¿¡¼­ È£Ãâ´çÇÏ´Â °´Ã¼·Î Àü´Þ

out È£Ãâ´çÇÏ´Â °´Ã¼¿¡¼­ È£ÃâÇÏ´Â °´Ã¼·Î Àü´Þ

inout ¾ç¹æÇâÀ¸·Î Àü´Þ °¡´É

½ÇÁ¦ ¸Å°³º¯¼öÀÇ Àü´Þ¹æÇâÀÌ ÇÊ¿äÇÑ °ÍÀº Ŭ¶óÀ̾ðÆ®ÀÇ ½ºÅͺê¿Í ±¸Çö °´Ã¼ÀÇ ½ºÄÌ·ÎÅÏ»çÀÌ¿¡¼­ °ªÀ» ÆÐÅ·(pack , marshal)ÇÒ ¶§ ÇÊ¿äÇÏ´Ù.

Is-a

½Ç¼¼°è¸¦ µðÀÚÀÎÇÒ ¶§ °¡Àå ÀÚÁÖ ¹ß»ýÇÏ´Â interface»çÀÌÀÇ °ü°è°¡ Is-a ÀÌ´Ù. ½ÇÁ¦ ÀÌ °ü°è¸¦ interface´Â »ó¼Ó °³³äÀ¸·Î Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº ½ÇÁ¦ is-a °ü°èÀÇ Ç¥ÇöÀÌ´Ù.

interface currentAccount : account {

attribute float overDraftLimit;

};

°á±¹ "currentAccount is a account"°¡ µÈ´Ù. ´Ù½Ã ¸»ÇØ currentAccount´Â accountÀÇ ¸ðµç attribute¿Í operationÀ» °®°Ô µÈ´Ù. ±×·¯³ª ¿©±â¼­ »ç¿ë»óÀÇ Á¦¾àÀÌ ¹ß»ýÇÑ´Ù.

¸ÕÀú currentAccount°°ÀÌ account¿¡¼­ À¯ÃßµÈ interfaceµéÀº types°ú constants, exceptionsµéÀ» ÀçÁ¤ÀÇ ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª operation°ú attributeµéÀº ÀçÁ¤ÀÇ ÇÒ ¼ö ¾ø´Ù. ´Ù½Ã ¸»ÇØ IDL operationÀº overloadµÉ ¼ö ¾ø´Ù¶ó´Â ¸»ÀÌ´Ù. ¶ÇÇÑ Interafce´Â º¹¼ö °³ÀÇ interfaceµé·ÎºÎÅÍ »ó¼Ó¹ÞÀ» ¼ö ÀÖ´Ù.

module

interfaceµéÀº module¿¡ ÀÇÇØ¼­ ÀÏÁ¤ÇÏ°Ô ÀçºÐ·ùµÈ´Ù. ÀÌ¿¡ µû¶ó Àü¿ªº¯¼ö °ø°£¿¡ ¾µµ¥¾ø´Â ³¶ºñ¸¦ ¸·¾ÆÁÖ´Â ¿ªÇÒµµ ÇÑ´Ù. ´ÙÀ½Àº ¾Õ¼± ¿¹Á¦µéÀ» finance¶ó´Â °ÍÀ¸·Î ¸ðµâÈ­ÇÑ °ÍÀÌ´Ù.

module finance {

interfcae account {

.....

};

interface currentAccount : account {

...

};

interface bank {

...

};

};

»ç¿ëÀÚ´Â finance::account °°Àº ¹æ½ÄÀ¸·Î ¸ðµâ³» interface¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù.

struct

struct´Â interface³»¿¡¼­ ¼±¾ðÇÒ ¼ö ÀÖ´Ù.

interface account {

struct personInfo{

string name;

short age;

};

personInfo getPersonInfo();

};

´ÙÀ½Àº ¾Õ¼­ ¼³¸íÇÑ ±â´Éµé ¿Ü¿¡ »ç¿ë°¡´ÉÇÑ ±â´ÉµéÀÌ´Ù.

enum , union , typedef , sequence , 1D ¶Ç´Â 2D arrays , exception , context

DII´Â ½ÇÇà½Ã°£¿¡ ¿øÇÏ´Â ±¸Çö °´Ã¼ÀÇ ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. µû¶ó¼­ »ç¿ëÀÚ´Â ½ÇÇ൵Áß °´Ã¼ÀÇ »óŰ¡ º¯ÇѴٰųª »õ·Î¿î °ªµéÀ» °»½ÅÇÒ °æ¿ì ÀÌ ±â´ÉÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ´ëÇ¥ÀûÀÎ »ç¿ë »óȲÀ¸·Î´Â °´Ã¼µéÀÇ ºÎ¶ó¿ì¡À̳ª ½Ç½Ã°£ °ü¸® µîÀ» µé ¼ö ÀÖ´Ù. °á±¹ DII±â´ÉÀ» ÀÌ¿ëÇϱâ À§Çؼ­ OrbixÀº ½Ã½ºÅÛ Â÷¿ø¿¡¼­ ½ÇÇà½Ã°£¿¡ °´Ã¼¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇØ¾ß ÇÑ´Ù. °´Ã¼ÀÇ Å¸ÀÔ, ¸Å°³º¯¼ö, ¹Ýȯ °ª µî ´Ù¾çÇÑ Å¸ÀÔ°ú ½ºÅ°¸¶ Á¤º¸°¡ ÇÊ¿äÇÏ´Ù. ÀÌ·¯ÇÑ Á¤º¸¸¦ Á¦°øÇϱâ À§ÇØ »ý¼ºÇÑ µ¥ÀÌŸº£À̽º°¡ ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò(Interface Repository , IR)ÀÌ´Ù. ½ÇÁ¦ IR¿¡´Â ¸ÞŸµ¥ÀÌŸ°¡ ÀúÀåµÇ´Â µ¥ ¿©±â¼­ ¸ÞŸµ¥ÀÌŸ¶õ Orbix ½Ã½ºÅÛÀÌ ½ÇÇà½Ã°£¿¡ °´Ã¼¸¦ Á¶ÀÛÇÏ´Â µ¥ ÇÊ¿äÇÑ ¸ðµç Á¤º¸¸¦ ÀǹÌÇÑ´Ù.

OrbixÀÇ DII¸¦ ÀÌ¿ëÇÏ´Â °ÍÀº ´Ù¼Ò ¹ø°Å·ÓÁö¸¸ ±×´ÙÁö ¾î·ÆÁö´Â ¾Ê´Ù. ½ÇÁ¦ OrbixÀº request¶ó´Â DII°´Ã¼¸¦ »ý¼ºÇϰí À̸¦ ÅëÇØ ¿øÇÏ´Â ¸Þ¼Òµå¸¦ È£ÃâÇÔÀ¸·Î¼­ ¸ðµç °ÍÀÌ ³¡³­´Ù. ´ÙÀ½Àº Orbix¿¡¼­ DII¸¦ »ç¿ëÇÏ´Â ¿¹ÀÌ´Ù.

- request °´Ã¼ »ý¼º

- ¸Å°³º¯¼ö µî·Ï

- ¿øÇÏ´Â ¸Þ¼Òµå¸¦ µî·Ï

- Invoke ¸Þ¼Òµå ±¸µ¿

// gridclient

CORBA::Object_ptr gridptr;

CORBA::Request r(gridptr , "get"); // gridptr°´Ã¼¿¡ ´ëÇÑrequest °´Ã¼¸¦ »ý¼ºÇϰí

// È£ÃâÇÒ ¸Þ¼Òµå¸¦ µî·ÏÇÑ´Ù.

r << 2 << 4 ; // get() ¸Þ¼Òµå¿¡ ¸Å°³º¯¼ö µî·Ï

r.invoke(IT_X); // Invoke¸Þ¼Òµå ±¸µ¿

long result;

r >> result;

....

DII´Â ¿øÇÏ´Â °´Ã¼ÀÇ ¸Þ¼Òµå¸¸ ±¸µ¿½ÃŰ´Â °ÍÀÌ ¾Æ´Ï¶ó ¾ÖÆ®¸®ºäÆ®µéµµ Á¶ÀÛÇÒ ¼ö ÀÖ´Ù. ½ÇÁ¦ ¾ÖÆ®¸®ºäÆ®¿¡ °¢Á¾ °ªÀ» ÀÔ·ÂÇϰųª ¹Ýȯ¹Þ À» ¼ö ÀÖÀ¸¸ç ±¸Á¶Ã¼ , sequence , unionµîÀÇ ÀԷµµ °¡´ÉÇÏ´Ù.

°á·ÐÀûÀ¸·Î DII´Â Orbix¿¡¼­ ÀÚµ¿ÀûÀ¸·Î Á¦°øÇØÁÖ´Â ÄÚµåÀÎ Á¤Àû È£Ã⺸´Ù´Â »ç¿ëÇÏ±â ¾î·ÆÁö¸¸ ¾Õ¼­ ¾ð±ÞÇÑ´ë·Î µ¿ÀûÀÎ °´Ã¼Á¶ÀÛÀ» ¿äÇÏ´Â ºÐ¾ß¿¡¼­´Â ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù.

IRÀº ½Ã½ºÅÛ¿¡¼­ Á¤ÀÇÇÑ °¢Á¾ ŸÀÔ°ú ÀÎÅÍÆäÀ̽º Á¤ÀÇ¿¡ °üÇÑ Á¤º¸¸¦ À¯ÁöÇÑ´Ù. µû¶ó¼­ IRÀº DII¿Í ÇÔ²² »ç¿ëµÇ¸ç °¢Á¾ ½Ã½ºÅÛ °ü¸®³ª µ¿ÀûÀΠŸÀÔ °Ë»çµî¿¡ ÀÌ¿ëµÈ´Ù. ½ÇÁ¦ OrbixÀÇ IR±¸Á¶´Â »óÀ§ÀÇ container¿Í contained¸¦ Áß½ÉÀ¸·Î ÇÏ¿© °¢ ŸÀÔÇ׸ñ¸¶´Ù IDLÀÎÅÍÆäÀ̽º·Î Á¤ÀǵǾî ÀÖ´Ù.

Container

Repository

ModuleDef ½ÇÁ¦ °¢ Ç׸ñµéÀÌ ¼øÈ¯ÀûÀ¸·Î

InterfaceDef ±¸¼ºµÈ´Ù.

Contained

ModuleDef

InterfaceDef

ConstantDef

TypeDef

ExceptionDef

AttributeDef

OperationDef

ParameterDef

[±×¸²4-9] OrbixÀÇ IR ±¸¼º

»ç¿ëÀÚ´Â ÇÁ·Î±×·¥³»¿¡¼­ ÀÛ¼ºµÈ IRÀÇ Á¤º¸¸¦ ¹ß°ßÇϰí È®ÀÎÇÏ´Â µî °¢Á¾ Á¶ÀÛÀ» ÇÒ ¼ö ÀÖ´Ù.

Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû¿¡ µû¶ó Orbixd ½ÇÇà µ¥¸óÀº ÇØ´ç ±¸Çö °´Ã¼¸¦ ±¸µ¿½ÃÄÑ¾ß ÇÑ´Ù. À̶§ ÇÊ¿äÇÑ Á¤º¸°¡ ÇØ´ç ±¸Çö °´Ã¼ÀÇ À§Ä¡ ¹× Åë½Å¹æ¹ý, ±¸µ¿ ¿É¼Ç µîÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ Á¤º¸°¡ ÀúÀåµÈ °÷ÀÌ ±¸Çö ÀúÀå¼ÒÀÌ´Ù. ½ÇÁ¦ À̰÷¿¡ Á¤º¸¸¦ ÀúÀåÇÏ·Á¸é putitÀ̶õ ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù. ´ÙÀ½Àº ½ÇÁ¦ Orbix¿¡¼­ grid¶ó´Â ±¸Çö °´Ã¼¸¦ ±¸Çö ÀúÀå¼Ò¿¡ ÀúÀåÇÏ´Â ¸í·ÉÀÌ´Ù.

putit gridserver d:\orbix22\demo\grid\server.exe

½ÇÁ¦ ÀÌ ¸í·ÉÀ» ½ÇÇàÇÑ ÈÄ, ±¸Çö ÀúÀå¼Ò¿¡´Â grid.imp¶õ ÆÄÀÏÀÌ »ý¼ºµÇ´Âµ¥ ±× ³»¿ëÀº ´ÙÀ½°ú °°´Ù.

Name : gridserver

Comms : xdr/tcp

Activation : shared

Owner : Administrator

Launch : ;

Invoke : ;

Marker Launch Command

* D:\ORBIX22\DEMO\GRID\SERVER.EXE

¿©±â¼­ Áß¿äÇÑ ±â´ÉÁßÀÇ Çϳª°¡ ±¸Çö °´Ã¼ÀÇ ±¸µ¿¸ðµå¿¡ ´ëÇÑ Á¤º¸ÀÎ Activation ¸ðµåÀÌ´Ù. ÀÌ ¿¹¿¡¼­´Â shared·Î »ç¿ëµÇ¾ú´Âµ¥ Orbix¿¡¼­ Á¦°øÇÏ´Â ¸ðµå´Â ´ÙÀ½ÀÇ 4°³°¡ ÀÖ´Ù.

- shared

°¢ È£½ºÆ®¿¡ ÇÑ ¼­¹ö ÇÁ·Î¼¼½º¸¸ÀÌ Á¸ÀçÇÑ´Ù. ¸ðµç Ŭ¶óÀÌ¾ðÆ®´Â ÇÑ °³ÀÇ

±¸Çö °´Ã¼¿Í Åë½ÅÇÑ´Ù.

- unshared

±¸Çö ÀúÀå¼Ò¿¡ µî·ÏµÈ °³º°ÀûÀÎ ±¸Çö °´Ã¼µé¿¡ ´ëÇØ ÇÁ·Î¼¼½ºµéÀÌ ±¸µ¿µÈ´Ù.

- per-method call

±¸Çö ÀúÀå¼Ò¿¡´Â °³º°ÀûÀÎ ¸Þ¼ÒµåµéÀÌ µî·ÏµÉ ¼ö ÀÖ´Ù. ÀÌ °³º°ÀûÀÎ ¸Þ¼Òµåµé¿¡

´ëÇØ ÇÁ·Î¼¼½º°¡ »ý¼ºµÈ´Ù.

- persistent

»ç¿ëÀÚ°¡ Á÷Á¢(manually) shared¸ðµå·Î ±¸µ¿ÇÒ ¼ö ÀÖ´Â ¼­¹ö¸¦ persistent ¼­¹ö¶ó°í

¸»ÇÑ´Ù.

ANY µ¥ÀÌŸ ÇüÀº ÇѸ¶µð·Î void* °°Àº ±â´ÉÀ» ÇÑ´Ù. ´Ù½Ã ¸»ÇØ ¾î¶² ÇüÀÌµç »ó°ü¾øÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Â µ¥ÀÌŸ ÇüÀ» ÀǹÌÇÑ´Ù. ÀÌ Å¸ÀÔÀº ODMG¿¡¼­ °áÁ¤µÈ Ç¥ÁØ µ¥ÀÌŸ Çü Áß ÇϳªÀÌ´Ù. µû¶ó¼­ ANYŸÀÔÀÇ ¸Å°³º¯¼ö´Â ´Ù¸¥ ¸ðµç ±âº» µ¥ÀÌŸ ÇüÀ̳ª ±¸Á¶Ã¼ , °´Ã¼ÂüÁ¶·Î »ç¿ëµÉ ¼ö ÀÖ´Ù. ´ÙÀ½Àº Orbix¿¡¼­ Á¦°øÇÏ´Â ANY µ¥ÀÌŸ ÇüÀÇ ±¸Á¶ÀÌ´Ù.

struct any {

typeCode *_type; // ½ÇÁ¦ ŸÀÔÀ» ÀǹÌÇÑ´Ù.

void *_value; // ½ÇÁ¦ °ª¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ÀǹÌÇÑ´Ù.

any();

any(const &any);

any(const char *type, const void *val);

~any();

any& operator=(const any&);

...

void operator<<(unsigned char o);

...

void insertObjectRef(const TypeCode tc, const ObjectRef

, Environment&);

...

}

»ç¿ëÀÚ´Â ´ÙÀ½°ú °°ÀÌ ANY ÀÚ·áÇüÀ» ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.

any a1;

char * name = new char[strlen("hyundai")+1];

al << name;

5. OrbixÀÇ ºÎ°¡±â´É

ÇÊÅʹ ƯÁ¤ °´Ã¼È£ÃâÀÌ ¹ß»ýÇÏ¿´À» ¶§ ÀÀ¿ëÇÁ·Î±×·¥¿¡¼­ °´Ã¼¿¡ ´ëÇÑ Á¶ÀÛ±ÇÇÑÀ» ¾òÀ» ¼ö ÀÖ°Ô ÇØÁÖ´Â ±â´ÉÀ» ¸»ÇÑ´Ù. ´Ù½Ã ¸»ÇØ Æ¯Á¤ ÁÖ¼Ò °ø°£³»¿¡¼­ °´Ã¼È£ÃâÀÌ ¹ß»ýÇϰųª, µµÂø ¶Ç´Â È£Ãâ¿¡ ´ëÇÑ ¹ÝÀÀÀÌ º¸³»Áö°Å³ª ¹Þ¾ÒÀ» ¶§ ÀÌ °´Ã¼¸¦ Á¶ÀÛÇÏ´Â ±ÇÇÑÀ» Orbix¿¡°Ô¼­ ³Ñ°Ü¹Þ´Â °ÍÀ» ¸»ÇÑ´Ù. ½ÇÁ¦·Î °´Ã¼¸¦ ¸ð´ÏÅ͸µÇϰųª µð¹ö±ë, Ãß°¡ÀûÀÎ º¸¾È ÀåÄ¡ µîÀÌ ÇÊ¿äÇÑ °æ¿ì À¯¿ëÇÏ°Ô »ç¿ëµÈ´Ù. ½ÇÁ¦ ÀÌ·¯ÇÑ ÇÊÅÍ´Â ÇÁ·Î¼¼½º ´ÜÀ§ ¶Ç´Â °´Ã¼ ´ÜÀ§·Î Àû¿ëÇÒ ¼ö ÀÖ´Ù.

´ÙÀ½Àº Orbix¿¡¼­ °´Ã¼³ª ÇÁ·Î¼¼½º¿¡ ÇÊÅ͸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â À§Ä¡¸¦ ³ªÅ¸³½ °ÍÀÌ´Ù.


event request event

event reply event

A. ÇÁ·Î¼¼½º ´ÜÀ§ÀÇ ÇÊÅÍÀ§Ä¡


marshal request unmarshal

unmarshal reply marshal


B. °´Ã¼´ÜÀ§ÀÇ ÇÊÅÍÀ§Ä¡

[±×¸²4-10] OrbixÀÇ ÇÊÅÍ»ç¿ëÀ§Ä¡

Orbix¿¡¼­ ½ÇÁ¦ ÇÊÅÍ´Â CORBA::Filter¶ó´Â Ŭ·¡½º¿¡ ÀÇÇØ¼­ ±¸ÇöµÈ´Ù. ´ÙÀ½Àº ½ÇÁ¦ ÀÌ Å¬·¡½ºÀÇ ¼±¾ð ³»¿ëÀÌ´Ù.

class Filter {

protected :

Filter();

virtual Filter();

public:

virtual unsigned char outRequestPreMarshal(...);

virtual unsigned char outRequestPostMarshal(...);

virtual int inRequestPreMarshal(...);

virtual unsigned char inRequestPostMarshal(...);

virtual unsigned char outReplytPreMarshal(...);

virtual unsigned char outReplyPostMarshal(...);

virtual unsigned char inReplyPreMarshal(...);

virtual unsigned char inReplyPosMarshal(...);

};

½ÇÁ¦ ÀÌ Ãß»óÈ­µÈ ÇÊÅÍ Å¬·¡½º¸¦ »ó¼Ó¹Þ°í ¿øÇÏ´Â ÇÁ·Î¼¼½º ÇÊÅ͸¦ ÀÛ¼ºÇÑ ÈÄ È£ÃâÇÔÀ¸·Î¼­ ¸ðµç ÇÊÅͱâ´ÉÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. À̶§ Ŭ¶óÀÌ¾ðÆ®¿Í ±¸Çö °´Ã¼ÂÊ ¸ðµÎ ÇÊÅͰ¡ ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï´Ù.

Orbix¿¡¼­´Â 2°³ÀÇ Æ¯º°ÇÑ ÇÁ·Î¼¼½º ÇÊÅ͸¦ Á¦°øÇÑ´Ù.

Authentication ÇÊÅÍ , Thread ÇÊÅÍ

AuthenticationÇÊÅÍ´Â ÇÁ·Î¼¼½º»çÀÌ¿¡ ±ÇÇѰú °ü·ÃµÈ Á¤º¸¸¦ Àü´ÞÇϸç ThreadÇÊÅÍ´Â °´Ã¼¿äû½Ã »õ·Î¿î thread¸¦ »ý¼ºÇØÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù.

À̹ۿ¡ °´Ã¼´ÜÀ§ÀÇ ÇÊÅ͸¦ »ç¿ëÇÏ·Á¸é TIE¹æ½ÄÀ» ÅëÇØ¾ß¸¸ ÇÑ´Ù. µû¶ó¼­ ÄÄÆÄÀϽà IDL -F¿É¼ÇÀ» »ç¿ëÇÑ ÈÄ ÇÊÅ͸¦ »ç¿ëÇϰíÀÚ ÇÏ´Â °´Ã¼¿¡ ÀÛ¼ºÇÑ ÇÊÅ͸¦ ºÙÀÌ¸é µÈ´Ù.

Orbix´Â »ç¿ëÀÚ°¡ °´Ã¼ÀÇ »óÅÂÁ¤º¸¸¦ ij½³(caching)ÇÒ ¼ö ÀÖµµ·Ï ÇÁ·Ï½Ã ÆÑÅ丮(Proxy Factory) Ŭ·¡½º¸¦ Á¦°øÇÑ´Ù. ÇÁ·Ï½Ã ÆÑÅ丮´Â ÀÏ¹Ý ÇÁ·Ï½Ã¿Í ½º¸¶Æ® ÇÁ·Ï½Ã¸¦ ±¸¼ºÇÒ ¼ö ÀÖ´Ù. ¿©±â¼­ ÀÏ¹Ý ÇÁ·Ï½Ã´Â Orbix¿¡¼­ Á¦°øÇÏ´Â ¶óÀ̺귯¸®¸¦ ÅëÇØ ÀÚµ¿À¸·Î »ý¼ºµÈ´Ù. ½ÇÁ¦ µÚ¿¡¼­ ¿ì¸®´Â IDLÄÄÆÄÀÏ ÈÄ gridProxyFactoryClass¶õ ÇÁ·Ï½Ã ÆÑÅ丮 Ŭ·¡½º°¡ »ý¼ºµÇ´Â °ÍÀ» º¸°Ô µÉ °ÍÀÌ´Ù. ½ÇÁ¦ grid°´Ã¼ÀÇ ÇÁ·Ï½Ã¸¦ »ý¼ºÇÒ ¶§¸¶´Ù ÀÌ Å¬·¡½º¸¦ »ç¿ëÇÏ°Ô µÈ´Ù. ÀÌ ÀÏ¹Ý ÇÁ·Ï½Ã´Â in , out ¸Å°³º¯¼ö¸¦ ¸¶½©¸µ(marshal)Çϰųª ¾ð¸¶½©¸µ(unmarshal)ÇÏ°í °¢Á¾ °´Ã¼¿äûÀ» Àü´ÞÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ÀÌ¿¡ ¹ÝÇØ ½º¸¶Æ® ÇÁ·Ï½Ã´Â °´Ã¼ÀÇ ½ÇÁ¦ °ªÀ̳ª »óÅÂÁ¤º¸¸¦ ij½³Çϰųª Ŭ¶óÀ̾ðÆ®ÀÇ ·ÎÄà ¸Ó½®¿¡ ÀÖ´Â ¸®¼Ò½º¸¦ ÀÌ¿ëÇÒ °æ¿ì »ç¿ëÇÒ ¼ö ÀÖ´Ù.

±×·¯³ª ÀÌ·¯ÇÑ ½º¸¶Æ® ÇÁ·Ï½Ã¸¦ »ç¿ëÇÒ ¶§ À¯ÀÇÇØ¾ß ÇÒ »çÇ×ÀÌ ÀÖ´Ù. ´Ù¸§¾Æ´Ï¶ó ½ÇÁ¦ °´Ã¼¿¡ ´ëÇØ º¹¼ö °³ÀÇ ÇÁ·Ï½Ã°¡ Á¸ÀçÇϱ⠶§¹®¿¡ ¿ÀÁ÷ ÇÑ ¼ø°£¿¡ ÇÑ Å¬¶óÀÌ¾ðÆ® ÇÁ·Ï½Ã¿¡ ÀÇÇØ¼­¸¸ º¯°æµÉ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù.

Orbix´Â Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀÌ µµÂøÇÏ´Â ¼ø°£, È£ÃâÇϱâ À§ÇÑ ±¸Çö °´Ã¼¸¦ ã´Â´Ù. À̶§ ÇØ´ç ±¸Çö °´Ã¼¸¦ ¹ß°ßÇÏÁö ¸øÇÑ´Ù¸é INV_OBJREF¶ó´Â ¿¹¿Ü»óȲÀ» Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ¹ß»ý½ÃŲ´Ù. ÀÌ·± »óȲ¿¡¼­ Orbix´Â Ŭ¶óÀÌ¾ðÆ®¿¡°Ô °´Ã¼ ÆúÆ®(Object fault)»óȲÀ» ¾Ë¸± ¼ö ÀÖ´Â °´Ã¼¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù. ÀÌ °´Ã¼°¡ LoaderŬ·¡½ºÀÌ´Ù. ±âº»ÀûÀ¸·Î OrbixÀÇ ¸ðµç °´Ã¼´Â ±âº»Loader¸¦ °®°í ÀÖ´Ù.

LoaderŬ·¡½º´Â º¹¼ö °³¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ÀÌ Å¬·¡½º¸¦ ÀÌ¿ëÇÏ¸é ÆÄÀϽýºÅÛÀ̳ª µ¥ÀÌŸº£À̽º ½Ã½ºÅÛ°°Àº Áö¼Ó¼º ÀúÀåµµ±¸·ÎºÎÅÍ Orbix°´Ã¼¸¦ ÀúÀåÇϰí ÃßÃâÇÒ ¼ö ÀÖ´Ù. µ¿½Ã¿¡ ÀÌÁ¾ÀÇ Áö¼Ó¼º ÀúÀ屸Á¶¸¦ ÀÌ¿ëÇÔÀ¸·Î¼­ ´ÙÁß ÀúÀ屸Á¶·Î ½Ã½ºÅÛ ±¸¼ºÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù. ÇöÀç OrbixÀº LoaderŬ·¡½º¸¦ È®ÀåÇÏ¿© °´Ã¼ÁöÇâ DBMS¿Í ¿¬µ¿ÇÔÀ¸·Î¼­ °´Ã¼ÀÇ Áö¼Ó¼ºÀ» ±¸ÇöÇÏ¿´´Ù.

»ç¿ëÀÚ°¡ Á¤ÀÇÇÑ LoaderŬ·¡½º´Â ¸ðµÎ ÃÖ»óÀ§ÀÇ CORBA::LoaderClass¸¦ »ó¼ÓÇØ¾ß ÇÑ´Ù. ÃÖ»óÀ§ÀÇ CORBA::LoaderClass´Â ´ÙÀ½ÀÇ ¸â¹öÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.

virtual ObjectRef load ( const char* interface, const char* marker,

unsigned char isBind, CORBA::Environment&);

virtual void save(Object* ,saveReason reason, CORBA::Environment& );

virtual void record(Object* ,char* marker, CORBA::Environment& );

virtual unsigned char rename(Object* ,char* marker, CORBA::Environment& );

À§ÀÇ ¸â¹öÇÔ¼öÀÇ ÀÎÀÚÁß marker´Â ½ÇÁ¦ ÆÄÀÏÀ̸§À̳ª µ¥ÀÌŸº£À̽º À̸§ µîÀ¸·Î ¸ÅÇ뵃 ¼ö ÀÖ´Ù. µû¶ó¼­ ÀÚ½ÅÀÌ ÀúÀåÇϰíÀÚ ÇÏ´Â Áö¼Ó¼º ¸Åü¿¡ ´ëÇØ ÀÌ ÇÔ¼ö¸¦ ¿À¹ö·Îµù ÇÔÀ¸·Î¼­ ¿øÇÏ´Â LoaderŬ·¡½º¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ÀÏ´Ü ÀÚ½ÅÀÇ LoaderŬ·¡½º¸¦ ÀÛ¼ºÇÑ ÈÄ ÀÌ Å¬·¡½º¸¦ ÀúÀåÇÏ±æ ¿øÇϴ Ŭ·¡½º¿¡ µî·Ï½ÃÅ´À¸·Î¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

Orbix´Â ºÐ»êµÈ ½Ã½ºÅÛ»ó¿¡¼­ _bind()¿¡ ÀÇÇØ¼­ ¿äûµÈ °´Ã¼¸¦ locator¿¡ ÀÇÇØ¼­ ã´Â´Ù. ±âº» locator·Î´Â Orbix.hosts¿Í Orbix.hostgroups ÆÄÀÏÀÌ ÀÖ´Ù.

Orbix.hostsÆÄÀÏ¿¡´Â ´ÙÀ½°ú °°Àº ±¸Á¶·Î Á¤º¸°¡ ÀúÀåµÈ´Ù.

<server_name>:<list_hosts>:<list_host_groups>

¸ÕÀú <server_name>Àº ¼­¹ö ÇÁ·Î±×·¥ÀÇ À̸§À» ÀǹÌÇϰí <list_hosts>¿¡´Â ¼­¹ö ÇÁ·Î±×·¥ÀÌ ¼öÇàµÇ´Â ÄÄÇ»Å͵éÀÇ À̸§À» ¸í½ÃÇÑ´Ù. ¸¶Áö¸·À¸·Î <list_host_groups>¿¡´Â Orbix.hostgroups¿¡ ¸í½ÃµÈ ±×·ì¸íÀÌ ¸í½ÃµÈ´Ù. ´ÙÀ½ ±× ½ÇÁ¦ ¿¹ÀÌ´Ù.

bank:host1,host2,host3:financial

Orbix.hostgroupsÆÄÀÏ¿¡´Â ´ÙÀ½°ú °°Àº ±¸Á¶·Î Á¤º¸°¡ ÀúÀåµÈ´Ù.

<group_name>:<list_hosts>

<group_name>Àº ¿øÇϴ ȣ½ºÆ®µéÀÇ ±×·ìÀ̸§ÀÌ ¸í½ÃµÇ¸ç <list_hosts>¿¡´Â ÇØ´ç ±×·ì¿¡ ¼ÓÇϴ ȣ½ºÆ® À̸§ÀÌ ¸í½ÃµÈ´Ù. ´ÙÀ½Àº ±× »ç¿ë ¿¹ÀÌ´Ù.

financial:host1,host2

»ç¿ëÀÚ´Â ±âº»locator¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù. »ç¿ëÀÚ´Â Orbix¿¡¼­ Á¦°øÇÏ´Â CORBA::locatorClass¸¦ »ó¼Ó¹Þ¾Æ ÀÚ½ÅÀÇ locatorŬ·¡½º¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. CORBA::locatorClass´Â ´ÙÀ½ÀÇ ¸â¹öÇÔ¼ö¸¦ °®´Â´Ù.

virtual _IDL_SEQUENCE_string lookup ( const char *ServiceName ,

insigned long MaxHops,

const Context& context ,

Environment& env) ;

lookup¸Þ¼Òµå´Â ¼­¹öÀ̸§À» ÀÎÀÚ·Î ¹Þ°í ÀÌ ¼­¹ö°¡ Á¸ÀçÇϴ ȣ½ºÆ®µéÀÇ À̸§À» sequence±¸Á¶·Î ¹ÝȯÇÑ´Ù. maxHopsÀº Orbix¿¡ ÀÇÇØ¼­ ÀÚµ¿ÀûÀ¸·Î °áÁ¤µÇ±âµµ ÇÏÁö¸¸ »ç¿ëÀÚ°¡ Á÷Á¢ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

  1. OrbixÀÇ °ü¸®

Orbix°¡ ¿î¿µµÇ±â À§Çؼ­ ÇÊ¿äÇÑ °¡Àå ±âº»ÀûÀÎ Á¶Á¤ÆÄÀÏÀº Orbix.cfg ÀÌ´Ù. ÀÌ ÆÄÀÏÀº À¯´Ð½º¿¡¼­ /etc¿¡ À§Ä¡Çϰųª IT_CONFIG_PATH¶ó´Â ȯ°æº¯¼ö¿¡ ÀÇÇØ¼­ ¼³Á¤µÈ´Ù. ´ÙÀ½Àº ÀÌ ÆÄÀÏ¿¡ Á¸ÀçÇÏ´Â Á¶Á¤ º¯¼öµéÀÌ´Ù.

- IT_DAEMON_PORT

Orbix µ¥¸óÀÌ »ç¿ëÇÏ´Â Æ÷Æ®°¡ ¸í½ÃµÈ´Ù. ±âº»°ªÀº 1221 ÀÌ´Ù.

- IT_DAEMON_SERVER_BASE

°¢ ¼­¹ö¿Í Åë½ÅÇϱâ À§ÇÑ Æ÷Æ®°¡ ¸í½ÃµÈ´Ù. ±âº»Àº 1241ÀÌ´Ù.

-IT_LOCAL_DOMAIN

OrbixÀÌ ±¸µ¿µÇ´Â µµ¸ÞÀΠȯ°æÁ¤º¸°¡ ¸í½ÃµÈ´Ù.

- IT_ERRORS

¿¡·¯ ·Î±×ÆÄÀÏÀÇ À§Ä¡¿Í À̸§ÀÌ ¸í½ÃµÈ´Ù.

- IT_IMP_REP_PATH

±¸Çö ÀúÀå¼ÒÀÇ À§Ä¡¿Í À̸§ÀÌ ¸í½ÃµÈ´Ù.

- IT_INT_REP_PATH

ÀÎÅÍÆäÀ̽º ÀúÀå¼ÒÀÇ À§Ä¡¿Í À̸§ÀÌ ¸í½ÃµÈ´Ù.

- IT_LOCATOR_PATH

OrbixÀÇ ¼³Ä¡ µð·ºÅ丮°¡ ¸í½ÃµÈ´Ù.

¾Õ¼± ȯ°æ º¯¼öÀ̿ܿ¡µµ LocatorÀÇ À§Ä¡¸¦ ÁöÁ¤Çϱâ À§ÇÑ IT_LOCATOR_PATH¿Í È£½ºÆ® Á¢¼Ó½Ã Á¢¼Ó½Ãµµ ȸ¼ö¸¦ ÁöÁ¤ÇÏ´Â IT_CONNECT_ATTEMPTS, IIOPÆ÷Æ®¸¦ ÁöÁ¤ÇÏ´Â IT_IIOP_PORT°¡ ÀÖ´Ù.

- serverhosts

serverhosts servername [ -h hostname ] [ -v ] [ -r hostlist ] [ -a hostlist ] [ -l ]

ÀÌ ¸í·É¾î´Â Orbix.hostsÆÄÀÏ¿¡ Á¢±ÙÇÏ¿© ¸í½ÃµÈ ¼­¹ö°¡ À§Ä¡Çϴ ȣ½ºÆ®ÀÇ À̸§À» ¾Ë·ÁÁØ´Ù. ¶ÇÇÑ -r¿É¼Ç°ú ÇÔ²² »ç¿ëÇÏ¸é ¸í½ÃµÈ ¸®½ºÆ®¸¦ Á¦°ÅÇÒ ¼ö ÀÖÀ¸¸ç -a¿É¼ÇÀº ÇØ´ç ¸®½ºÆ®¿¡ ¸í½ÃµÈ È£½ºÆ®¸¦ ¸í½ÃµÈ ¼­¹ö¿¡ Ãß°¡ÇÑ´Ù. ¸¶Áö¸·À¸·Î -lÀº ¸í½ÃµÈ ¼­¹ö¿¡ ´ëÇÑ ¸ðµç È£½ºÆ®¸¦ ¾Ë·ÁÁØ´Ù.

- servergroups

servergroups servername [ -h hostname ] [ -v ] [ -r hostlist ] [ -a hostlist ] [ -l ]

ÀÌ ¸í·É¾î´Â Orbix.hostsÆÄÀÏ¿¡ Á¢±ÙÇÏ¿© È£½ºÆ® ±×·ì¿¡ ´ëÇÑ Á¤º¸¸¦ ¾Ë·ÁÁְųª »èÁ¦( -r ) ¶Ç´Â Ãß°¡(-a)ÇÒ ¼ö ÀÖ´Ù.

- grouphosts

grouphosts servername [ -h hostname ] [ -v ] [ -r hostlist ] [ -a hostlist ] [ -l ]

ÀÌ ¸í·É¾î´Â Orbix.hostgroupsÆÄÀÏ¿¡ Á¢±ÙÇÏ¿© ¸í½ÃµÈ ±×·ì¿¡ ¼ÓÇÑ È£½ºÆ® Á¤º¸¸¦ Á¦°øÇϰųª »èÁ¦(-r), Ãß°¡(-a)ÇÒ ¼ö ÀÖ´Ù.

- catit

catit [ -v ] [ -h hostname ] server_name

ÁÖ¾îÁø ¼­¹ö¿¡ ´ëÇÑ Á¤º¸¸¦ ÇØ´ç IR¿¡¼­ ÃßÃâÇÏ¿© º¸¿© ÁØ´Ù.

- lsit

lsit [-R] [ -v ] [ -h hostname ] server_name or dir_name

IR¿¡¼­ ÇØ´ç ¼­¹ö¸¦ Á¶È¸Çϰųª ÀÎÀÚ¾øÀÌ »ç¿ëÇÒ °æ¿ì ¸ðµç ±¸Çö °´Ã¼ÀÇ À̸§À» º¸¿©ÁØ´Ù.

- rmit

rmit [ -v ] [ -h hostname ] [ -marker marker | -method method ] server_name

IR¿¡¼­ ÇØ´ç ¼­¹ö¸¦ »èÁ¦ÇÑ´Ù.

- mkdirit

mkdirit [-v] [-h hostname] dir_name

¼­¹ö ±¸Çö °´Ã¼ÀÇ À̸§Àº °èÃþÀûÀ¸·Î ±¸¼ºÇÒ ¼ö ÀÖ´Ù. °¡·É, bank¼­¹ö ¾Æ·¡¿¡ pohang , seoulµîÀÇ °èÃþÀû ¼­¹ö¸¦ ¸¸µé ¼ö ÀÖ´Ù. À̶§ mkdiritÀ» »ç¿ëÇÑ´Ù.

- rmdirit

rmdirit [-v] [-h hostname] dir_name

mkdiritµî¿¡ ÀÇÇØ ÀÛ¼ºµÈ µð·ºÅ丮¸¦ »èÁ¦ÇÑ´Ù.

- putit

putit [-v] [-h <host>] [-per-client | -per-client-process]

[ -shared [ -persistent ] | -unshared ]

[ -marker <marker>] |

[ -per-method ] [ -method <method> ]

<serverName> <commandLine>

ÀÌ ¸í·É¾î´Â ¾Õ¼­ »ç¿ëÇÑ °Íó·³ IR¿¡ ±¸ÇöµÈ ¼­¹ö ±¸Çö °´Ã¼ÀÇ À§Ä¡Á¤º¸¿Í À̸§À» ¸í½ÃÇÒ ¼ö ÀÖµ¥ ÇØ ÁØ´Ù.

- psit

psit [ -v ] [ -h hostname ]

ÀÌ ¸í·É¾î´Â Orbixd¿¡ ¾Ë·ÁÁø ¼­¹ö ±¸Çö °´Ã¼ÀÇ ¸ñ·ÏÀ» ¾Ë·Á ÁØ´Ù.

- killit

killit [ -v ] [ -h hostname ] [-m marker] server_name

¼­¹ö ±¸Çö °´Ã¼¸¦ »èÁ¦ÇØ ÁØ´Ù.

- pingit

pingit [ -v ] [ -h hostname ]

Orbixd µ¥¸óÀÇ »ý»ç ¿©ºÎ¸¦ È®ÀÎÇØ ÁØ´Ù.

- chmodit

chmodit [ -v ] [ -h hostname ] server_name

[ i{+,-}{user_name,group_name} | l{+,-}{user_name,group_name} ]

IRÀÇ ¼ÒÀ¯±ÇÇÑÀ» º¯°æÇÒ ¶§ »ç¿ëÇÑ´Ù.

- chownit

chownit [ -v ][-R] [ -h hostname ] server_or_dir_name new_owner

IR¿¡ ´ëÇÑ Á¢±Ù±ÇÇÑÀ» Á¶Á¤ÇÒ ¶§ »ç¿ëÇÑ´Ù.

- °¢ ¿É¼Ç¼³¸í

-v ÇÁ·Î±×·¥ÀÇ ¹öÀüÁ¤º¸¸¦ ¾Ë·Á ÁØ´Ù.

-R ¸ðµç µð·ºÅ丮³ª IR¿¡ ´ëÇØ ¹Ýº¹ÀûÀ¸·Î ¸í·É¾î¸¦ Àû¿ëÇÑ´Ù.

-h Àû¿ëÇϰíÀÚ Çϴ ȣ½ºÆ® À̸§À̳ª IRÀ» ¸í½ÃÇÑ´Ù.

=========================================================================

À§ÀÇ ³»¿ëÀ» ÃæºÐÈ÷ ÀÌÇØÇßÀ¸¸®¶ó ¹Ï°í ÀÌÁ¦´Â º»°ÝÀûÀ¸·Î CORBA ÀÀ¿ë ÇÁ·Î±×·¥À» ÀÛ¼ºÇغ¸ÀÚ. CORBA ÀÀ¿ë ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â µ¥¿¡´Â ±âº»ÀûÀ¸·Î ´ÙÀ½ÀÇ 3 ´Ü°è¸¦ °ÅÄ£´Ù.

´Ü°è1) IDL ÆÄÀÏ ÀÛ¼º ¹× ÄÄÆÄÀÏ

´Ü°è2) Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö ±¸Çö ÄÚµå ÀÛ¼º

´Ü°è3) ´Ü°è1ÀÇ »êÃâ¹°°ú ´Ü°è2ÀÇ »êÃâ¹°À» ÅëÇÕÇÏ¿© Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö ¹ÙÀ̳ʸ® ÄÚµå

»ý¼º

ÀÌµé °¢ ´Ü°è´Â ´ÙÀ½ÀÇ 7´Ü°è·Î ¼¼º°ÇÒ ¼ö ÀÖ´Ù.

´Ü°è1) IDLÀÛ¼º

´Ü°è2 ) IDL ÄÄÆÄÀÏ

´Ü°è3) ¼­¹ö ±¸Çö °´Ã¼ ±¸Çö

´Ü°è4) Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö ¸ÞÀÎ ºÎºÐ ÀÛ¼º

´Ü°è5) ¼­¹ö ±¸Çö °´Ã¼¿Í Ŭ¶óÀÌ¾ðÆ® ½ÇÇàÆÄÀÏ ÀÛ¼º

´Ü°è6) ±¸Çö °´Ã¼ÀÇ ±¸Çö ÀúÀå¼Ò¿¡ ½ÇÇà Á¤º¸ ÀúÀå

´Ü°è7) Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ ½ÇÇà

´ÙÀ½ [±×¸²4-11]Àº CORBA¿¡¼­ ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ °³¹ß°úÁ¤À» µµ½ÄÈ­ÇÑ °ÍÀÌ´Ù. ¸ÕÀú Á¦1´Ü°è·Î ÇØ´ç Ŭ·¡½º¸¦ IDL ¹®¹ý¿¡ ¸Â°Ô ÀÛ¼ºÇÑ´Ù. ÀÏ´Ü ÀÛ¼ºµÈ IDLÆÄÀÏÀº IDLÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ¼­ Ŭ¶óÀÌ¾ðÆ®¿ë ½ºÅͺê ÄÚµå¿Í ±¸Çö °´Ã¼ÀÇ ½ºÄÌ·ÎÅÏÀ» »ý¼ºÇØ ³½´Ù. ÀÏ´Ü CORBA ¿¡ ÀÇÇØ¼­ ÀÚµ¿ÀûÀ¸·Î »ý¼ºµÈ ÄÚµå´Â ³×Æ®¿÷ ºÎºÐÀ» À§ÇÑ Äڵ常 Á¦°øµÇ±â ¶§¹®¿¡ ÇÊ¿äÇÑ ·ÎÁ÷À» ±¸ÇöÇØ¾ß ÇÑ´Ù. µû¶ó¼­ Á¦2´Ü°è·Î Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö ÇÁ·Î±×·¥ÀÇ ·ÎÁ÷À» ±¸ÇöÇÑ´Ù. ±×¸®°í ¸¶Áö¸·À¸·Î Á¦3´Ü°è¿¡¼­ ÀÌ ¸ðµç °ÍÀ» ÄÄÆÄÀÏÇÏ°í ¸µÅ©ÇÑ ÈÄ ¿øÇÏ´Â ¹ÙÀ̳ʸ®¸¦ »ý¼ºÇÑ´Ù.

ÀÌ °úÁ¤À» Á¤È®È÷ ÀÌÇØÇÏ´Â °ÍÀÌ CORBAÇÁ·Î±×·¥ÀÇ Ã¹°ÉÀ½ÀÌÀÚ °¡Àå Áß¿äÇÑ ºÎºÐÀÌ´Ù.


[ ±×¸²4-11] CORBA ÀÀ¿ëÇÁ·Î±×·¥ °³¹ßÀýÂ÷

´ÙÀ½Àº °¢ ´Ü°èº°·Î grid ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â ¿¹ÀÌ´Ù.

´Ü°è1) IDLÀÛ¼º ¹× ÄÄÆÄÀÏ

[±×¸²4-11]¿¡¼­ ó·³ ¸ÕÀú CORBA ÇÁ·Î±×·¡¸Ó´Â °³¹ßÇϰíÀÚ ÇÏ´Â ÀÀ¿ë½Ã½ºÅÛÀ» µðÀÚÀÎ ÇÑ ÈÄ CORBA¿¡¼­ Á¦°øÇÏ´Â IDL(Interface Definition Language)À» ÀÌ¿ëÇÏ¿© ÇØ´ç Ŭ·¡½ºÀÇ ¸í¼¼¸¦ ÀÛ¼ºÇÑ´Ù. µû¶ó¼­ CORBA ÇÁ·Î±×·¡¸Ó´Â IDL ¸í¼¼¸¦ ÀÌÇØÇØ¾ß ÇÑ´Ù.

interface grid

{

readonly attribute short height;

readonly attribute short width;

void set(in short n, in short m, in long value);

long get(in short n , in short m);

}

[ ¿¹Á¦4-2 ] gridŬ·¡½ºÀÇ IDL±¸Çö (grid.idl)

ÀÏ´Ü ÀÛ¼ºµÈ IDLÆÄÀÏ( grid.idl )Àº IDLÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ¼­ ÄÄÆÄÀϵȴÙ. IDLÄÄÆÄÀÏ·¯´Â Ŭ¶óÀÌ¾ðÆ®¿ë ½ºÅͺê ÇÁ·Î±×·¥°ú ¼­¹ö¿ë ½ºÄÌ·ÎÅÏ ÇÁ·Î±×·¥, ±×¸®°í ÀÌ µÎ ÇÁ·Î±×·¥¿¡ °øÅëÀûÀ¸·Î »ç¿ëÇÏ´Â Çì´õÆÄÀÏÀ» »ý¼ºÇØ ³½´Ù. ÀÌ °úÁ¤À» ÅëÇØ »ç¿ëÀÚ´Â ºÐ»ê ÇÁ·Î±×·¥½Ã ÇÊ¿äÇÑ ³×Æ®¿÷ Äڵ带 IDLÀ» ÅëÇØ ÀÚµ¿ÀûÀ¸·Î ¾òÀ» ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î , ½ÇÁ¦ idl·Î ÀÛ¼ºµÈ grid.idl ÆÄÀÏÀº idl ÄÄÆÄÀÏ·¯¸¦ ÅëÇØ C++ ÇüÅ·Πº¯È¯µÈ´Ù. À̶§ interface´Â class·Î attribute´Â ¸â¹ö µ¥ÀÌŸ·Î º¯È¯µÈ´Ù. ´Ù½Ã ¸»ÇØ ÇØ´ç idl ÆÄÀÏÀº C++·ÎÀÇ º¯È¯±ÔÄ¢¿¡ µû¶ó C++ÆÄÀÏ·Î º¯È¯µÈ´Ù.

´Ü°è 2) grid.idlÀÇ ÄÄÆÄÀÏ

ÀÏ´Ü ¿øÇϴ Ŭ·¡½º¸¦ idlÀ» ÅëÇØ ÀÛ¼ºÇÑ ÈÄ »ç¿ëÀÚ´Â ÇØ´ç idlÆÄÀÏÀ» C++ÇüÅÂÀÇ ¼Ò½ºÄÚµå·Î º¯È¯Çϱâ À§ÇÑ ÀÛ¾÷À» ÁøÇàÇØ¾ß ÇÑ´Ù. Orbix¿¡¼­´Â À̸¦ À§ÇØ idl ÄÄÆÄÀÏ·¯¸¦ Áö¿øÇÑ´Ù. ´ÙÀ½Àº ½ÇÁ¦ grid.idlÀ» ÄÄÆÄÀÏÇÏ´Â »óȲÀÌ´Ù.

% idl -B grid.idl

½ÇÁ¦ idlÄÄÆÄÀÏ·¯´Â ´ÙÀ½ÀÇ Çì´õ ÆÄÀϰú ¼Ò½º ÄÚµåµéÀ» »ý¼ºÇØ ³½´Ù. ¿©±â¼­ -B¿É¼ÇÀº BOA(Basic Object Adapter)ÀÇ ÀÌ¿ëÀ» ÀǹÌÇÑ´Ù. µû¶ó¼­ BOA¸¦ ÀÌ¿ëÇÏ´Â µ¥ ÇÊ¿äÇÑ ±â´É¸¸À» »ý¼ºÇØ ³½´Ù.

grid.hh , grids.cpp , gridc.cpp

ÀÌ ÆÄÀÏ¿¡´Â gridŬ·¡½º¸¦ ³×Æ®¿÷»óÀÇ ¼­·Î ´Ù¸¥ °÷À̳ª ¼­·Î ´Ù¸¥ ¸Þ¸ð¸® °ø°£³»¿¡ À§Ä¡½ÃŰ´Â °¢Á¾ Åë½Å ±â´ÉµéÀÌ Æ÷ÇԵǾî ÀÖ´Ù. ½ÇÁ¦ ÀÌ ÆÄÀϵéÀº »ç¿ëÀÚµéÀÌ º¯°æÇÒ ÇÊ¿ä¾øÀÌ ÃÖÁ¾ ÇÁ·Î±×·¥ ÄÄÆÄÀϽà ÀÌ¿ëµÈ´Ù. °¢ ÆÄÀÏÀÇ ÁÖ¿ä ³»¿ëÀº ´ÙÀ½°ú °°´Ù.

// grid.hh

grid.hh ÆÄÀÏ¿¡´Â OrbixÀÇ ÃÖ»óÀ§ ·çÆ® Ŭ·¡½ºÀÎ CORBA.h¸¦ ÀÎŬ·çµåÇÑ´Ù. CORBA.h¿¡´Â OrbixÀ» ¿î¿ëÇÏ´Â µ¥ ÇÊ¿äÇÑ °¢Á¾ flag¿Í exception Ŭ·¡½º µî °¢Á¾ ½Ã½ºÅÛ Å¬·¡½º°¡ Á¤ÀǵǾî ÀÖ´Ù.

¶ÇÇÑ grid.hh¿¡´Â Å©°Ô ´ÙÀ½ÀÇ 5°¡Áö Ŭ·¡½º ¼±¾ðÀ» °®°í ÀÖ´Ù.

ÇØ´ç °´Ã¼¸¦ µð½ºÆÐÄ¡Çϴµ¥ ÇÊ¿äÇÑ ¸Þ¼Òµå°¡ ¼±¾ðµÇ¾î ÀÖ´Ù.

grid.idl·Î ÀÛ¼ºµÈ grid ÀÎÅÍÆäÀ̽º´Â idl ÄÄÆÄÀÏ·¯¸¦ ÅëÇØ ´ÙÀ½°ú °°ÀÌ º¯È¯µÈ´Ù. interface¶õ Ű¿öµå´Â class·Î °¢°¢ÀÇ attribute´Â ¸Þ¼Òµå·Î º¯È¯µÈ´Ù. ÀÌ·¯ÇÑ °úÁ¤Àº idlÀ» C++·Î º¯È¯½ÃŰ´Â ±ÔÄ¢¿¡ ÀÇÁ¸ÇÑ´Ù. ´ÙÀ½Àº gridÀÎÅÍÆäÀ̽º°¡ C++ Ŭ·¡½º·Î º¯È¯µÈ °á°úÀÌ´Ù.

class grid : public virtual CORBA_Object {

public :

static grid* _bind(...); //overloaded

virtual short height(CORBA:Environment &IT_ENV =

CORBA:default_environment);

virtual short weight(.....);

virtual short set(.....);

virtual short get(.....);

};

[ ¿¹Á¦4-3 ] C++·Î º¯È¯µÈ grid.idl

Orbix´Â °´Ã¼¿¡ Á¢±ÙÇÒ ¶§ ÇÁ·Ï½Ã °´Ã¼¸¦ »ý¼ºÇϰí ÀÌ °´Ã¼¸¦ ÅëÇØ ÇØ´ç °´Ã¼¿¡ Á¢±ÙÇÑ´Ù. À̸¦ À§ÇØ ¸ðµç °´Ã¼´Â ÇÁ·Ï½Ã °´Ã¼¸¦ »ý¼ºÇϰí Á¶ÀÛÇϱâ À§ÇØ »óÀ§ ÇÁ·Ï½Ã Ŭ·¡½º¸¦ »ó¼Ó¹Þ´Â´Ù.

Orbix¿¡¼­ ºÐ»ê°´Ã¼¸¦ ó¸®ÇÏ´Â ¸ðµ¨Àº BOA¸¦ ÀÌ¿ëÇÑ ¹æ¹ý°ú TIE¶ó´Â ¹æ¹ýÀÌ ÀÖ´Ù. BOA´Â Ãß°¡ÀûÀÎ ±â´É¾øÀÌ Orbix¿¡¼­ Á¦°øÇÏ´Â ÀϹÝÀûÀÎ ºÐ»ê±â´ÉÀ» ÀÌ¿ëÇÏ´Â °ÍÀ» ÀǹÌÇÑ´Ù. ÀÌ °æ¿ì CORBA_object¶ó´Â Ŭ·¡½º¸¦ »ó¼Ó¹Þ´Â´Ù.

grid client process server process

grid object proxy target object



[ ±×¸²4-12 ] BOA¸¦ ÀÌ¿ëÇÑ ÀϹÝÀûÀÎ °´Ã¼Á¢±Ù

ÀÌ ¹æ¹ý ¿Ü¿¡ TIE¸¦ ÀÌ¿ëÇÑ °´Ã¼Á¢±ÙÀº BOA¿¡¼­ Á¦°øÇÏ´Â ±â´ÉÀ» »ó¼Ó¹ÞÁö ¾Ê´Â´Ù. TIE¹æ¹ýÀº ÀÏ´Ü grid °´Ã¼¸¦ ÀÛ¼ºÇÑ ÈÄ TIE °´Ã¼¿¡ µî·Ï½ÃÅ´À¸·Î¼­ °¡´ÉÇÏ´Ù. À̸¦ À§ÇØ grid.hh¿¡´Â ´ÙÀ½ÀÇ Å¬·¡½º¸¦ Á¤ÀÇÇÑ´Ù.

TIE¸¦ ÅëÇÑ °´Ã¼Á¢±ÙÀº ¿øÇÏ´Â °´Ã¼¿¡ Á¢±ÙÇÒ ¶§ TIE°´Ã¼¶ó´Â Áß°£°´Ã¼¸¦ ÀÏ´Ü»ý¼ºÇϰí À̸¦ ÅëÇØ ¿øÇÏ´Â °´Ã¼¿¡ Á¢±ÙÇÏ´Â °ÍÀ» ÀǹÌÇÑ´Ù. ´ÙÀ½Àº TIE°´Ã¼ÀÇ »ý¼º°ú Á¢±Ù ¿¹ÀÌ´Ù.

grid_i *q = new grid_i(...)

grid *p = new TIE_account(account_i)(q);

q


p

TIE °´Ã¼ ½ÇÁ¦ °´Ã¼

[ ±×¸²4-13 ] TIE°´Ã¼¸¦ ÀÌ¿ëÇÑ ÀϹÝÀûÀÎ °´Ã¼Á¢±Ù

// gridC.cpp

gridC.cpp¿¡´Â grid.hh¿¡ Á¤ÀÇÇÑ Å¬·¡½ºÀÇ ¸â¹ö ÇÔ¼öµéÀÌ ±¸ÇöµÇ¾î ÀÖ´Ù. ´Ù½Ã ¸»ÇØ Å¬¶óÀÌ¾ðÆ®°¡ ±¸Çö °´Ã¼ÀÇ ±¸ÇöºÎºÐ¿¡ ¿ä±¸»çÇ×À» Àü´ÞÇϱâ À§ÇÑ ÇÔ¼öµéÀÌ ±¸ÇöµÇ¾î ÀÖ´Ù.

// gridS.cpp

ÀÌ ÆÄÀÏ¿¡´Â gridÀÇ ¼­¹ö ±¸Çö °´Ã¼¿¡¼­ ÇÊ¿äÇÑ ¸Þ¼ÒµåÀÎ grid_dispatch::dispatch()°¡ ¼±¾ðµÇ¾î ÀÖ´Ù.

#include "gridC.cpp"

grid_dispatch:dispatch();

´Ü°è3) ¼­¹ö ±¸Çö °´Ã¼ ±¸Çö

¾Õ¼­µµ ¼³¸íÇßÁö¸¸ ºÐ»ê°´Ã¼¿¡¼­ Ŭ¶óÀÌ¾ðÆ®´Â ¼­¹ö ±¸Çö °´Ã¼¿¡ Á¤ÀÇµÈ Å¬·¡½ºÀÇ ¸Þ¼Òµå¸¦ ¿ø°ÝÁö¿¡¼­ È£ÃâÇϰí ÀÌ °á°ú¸¦ Àü´Þ¹Þ´Â °úÁ¤À» ÅëÇØ ÀÛ¾÷ÇÑ´Ù. Áï, Ŭ¶óÀÌ¾ðÆ®¿¡¼­´Â Á¤ÀÇµÈ ¸Þ¼Òµå¸¸À» È£ÃâÇÏ°í ±¸Çö °´Ã¼¿¡¼­´Â ÀÌ ¸Þ¼Òµå¸¦ ±¸ÇöÇØ¾ß¸¸ ÇÑ´Ù. µû¶ó¼­ ¾Õ¼­ grid.idl¿¡¼­ Á¤ÀÇÇÑ gridŬ·¡½º¸¦ ¼­¹ö ±¸Çö °´Ã¼ÂÊ¿¡ ±¸ÇöÇØ¾ß ÇÑ´Ù.

µû¶ó¼­ ¸ÕÀú »ç¿ëÀÚ´Â ´ÙÀ½ÀÇ »çÇ×À» ¹Ì¸® °áÁ¤ÇØ¾ß ¸¸ ÇÑ´Ù: ¸ÕÀú »ç¿ëÀÚ°¡ Á÷Á¢ ¿øÇϴ Ŭ·¡½º¸¦ ÀÛ¼ºÇÒ °ÍÀÎÁö ¾Æ´Ï¸é OrbixÀÇ idlÀÌ Á¦°øÇÏ´Â °£´ÜÇÑ ÇÁ·ÎÅäŸÀÔ ÆÄÀÏÀ» ÀÌ¿ëÇÒ °ÍÀÎÁö °áÁ¤Çؾ߸¸ ÇÑ´Ù.

°¡·É, ÀüÇô OrbixÀÇ µµ¿òÀÌ ¾øÀÌ ±¸Çö °´Ã¼¸¦ ±¸ÇöÇÏ·Á¸é ¾Õ¼­ ¸¸µé¾î µÐ gridBOAImpl Ŭ·¡½º¸¦ »ó¼Ó¹Þ°Å³ª TIE¹æ½Ä¿¡ µû¶ó Á÷Á¢ Äڵ带 ÀÛ¼ºÇØ¾ß ÇÑ´Ù. ±×·¯³ª OrbixÀÇ idlÀ» ÀÌ¿ëÇÏ¸é °£´ÜÇϰí ÀϰüÀûÀ¸·Î ±¸Çö °´Ã¼¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº OrbixÀÇ idlÀ» ÀÌ¿ëÇÏ¿© ±¸Çö °´Ã¼ÀÇ Äڵ带 ÀÛ¼ºÇÏ´Â ¿¹ÀÌ´Ù.

e:\Orbix22\bin\idl -S grid.idl

¿©±â¼­ -S ¿É¼ÇÀº ¼­¹öÂÊÀÇ ±¸ÇöºÎºÐ¿¡ ´ëÇÑ ¿øÇüÀ» Á¦°øÇÑ´Ù. ´Ù½Ã ¸»ÇØ »ç¿ëÀÚ°¡ ¼­¹öÂÊ¿¡¼­ ±¸ÇöÇØ¾ß ÇÒ ºÎºÐÀ» ¸í½ÃÇØ ÁÖ´Â °ÍÀÌ´Ù. ¾Õ¼± ¸í·É¾î¸¦ ¼öÇàÇÏ¸é ´ÙÀ½ÀÇ ÆÄÀϵéÀ» »ý¼ºÇس½´Ù.

grid.hh , grids.cpp , gridc.cpp , grid.ih , grid.ic

¾Õ¼­ 3°³ÀÇ ÆÄÀÏ(grid.hh , grids.cpp , gridc.cpp )Àº ¾Õ¼­ -B ¿É¼Ç½Ã »ý¼ºµÈ °Í°ú µ¿ÀÏÇÏ´Ù. ±×·¯³ª -C¿¡¼­´Â grid.ih¿Í grid.icÀ̶õ ÆÄÀÏÀ» Ãß°¡ÀûÀ¸·Î »ý¼ºÇØ ÁØ´Ù.

½ÇÁ¦ grid.ih ¿Í grid.ic ÆÄÀÏÀÇ ³»¿ëÀº ´ÙÀ½°ú °°´Ù.

// grid.ih

#ifndef grid_ih

#define grid_ih

#include "grid.hh"

class grid== {

public:

virtual short height (CORBA_Environment &IT_env=CORBA_default_environment);

virtual short width (CORBA_Environment &IT_env=CORBA_default_environment);

virtual void set (short n, short m, long value, CORBA_Environment

&IT_env=CORBA_default_environment);

virtual long get (short n, short m, CORBA_Environment &IT_env=CORBA_default_environment);

};

#endif

// grid.ic

#include "grid.ih"

short grid==:: height (CORBA_Environment &IT_env) {}

short grid==:: width (CORBA_Environment &IT_env) {}

void grid==:: set (short n, short m, long value, CORBA_Environment &IT_env) {}

long grid==:: get (short n, short m, CORBA_Environment &IT_env) {}

½ÇÁ¦ ¾Æ¹«·± ÄÚµå ³»¿ë¾øÀÌ grid¿¡ ´ëÇÑ Å¬·¡½º ¼±¾ð°ú ¸Þ¼Òµå ¼±¾ð¸¸ÀÌ ¹¦»çµÇ¾î ÀÖ´Ù. »ç¿ëÀÚ´Â ´ÜÁö ÀÌ ÆÄÀÏ¿¡ ÀÚ½ÅÀÇ ·ÎÁ÷¸¸À» Ãß°¡ÇÔÀ¸·Î¼­ ¸ðµç ÀÀ¿ë ÇÁ·Î±×·¥ ¿Ï¼ºÇÒ ¼ö ÀÖ´Ù. ½ÇÁ¦ ¾ÆÀÌ¿À³ª»ç¿¡ µû¸£¸é ´ÙÀ½ÀÇ ÇÁ·Î±×·¥ ±ÔÄ¢¿¡ ÀÇÇØ¼­ ÀÀ¿ëÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ±æ ±ÇÀåÇϰí ÀÖ´Ù. idl¿¡ ÀÇÇØ¼­ ÀÛ¼ºµÈ ¸ðµç ÆÄÀÏÀ» ´ÙÀ½°ú °°ÀÌ º¯°æÇÑ ÈÄ »ç¿ëÇ϶ó´Â °ÍÀÌ´Ù.

grid.ih -> grid_i.h , grid.ic -> grid_i.cc

¹ø°Å·ÓÁö¸¸ ÀÏ´Ü ÀÌ ±ÔÄ¢À» µû¸£¸é Àû¾îµµ ¾î´À ÆÄÀÏÀÌ ±¸Çö °´Ã¼ÂÊÀÇ ÆÄÀÏÀÎÁö ±¸ºÐÇϱ⠽±´Ù.

grid.idl

idl -s

grid.ih grid.hh grids.cpp gridc.cpp grid.ic

[ ±×¸² 4-14 ] idl -S ¿¡ ÀÇÇØ¼­ »ý¼ºµÈ ÆÄÀϵé

µû¶ó¼­ ¾Õ¼­ ÆÄÀÏ¿¡ °¢±â ¿øÇÏ´Â ·ÎÁ÷À» Ãß°¡ÇÑ´Ù. ¿¹¸¦ µé¸é, º» ¿¹Á¦¿¡¼­ ·ÎÁ÷À» Ãß°¡ÇÑ grid_i.h , grid_i.cc ÆÄÀÏÀº ´ÙÀ½°ú °°´Ù.

// »õ·Î ÀÛ¼ºµÈ grid_i.h

// ¼­¹ö gridŬ·¡½º´Â BOA±â´ÉÀ» ÀÌ¿ëÇÏ¿´À½

#include "grid.hh"

class grid_i : public gridBOAImpl {

short m_height; // store the height

short m_width; // store the width

long **m_a; // a 2-D array to store the grid data itself

public:

grid_i(short h, short w);

virtual ~grid_i();

virtual short width(CORBA_(Environment) &env);

virtual short height(CORBA_(Environment) &env);

virtual void set(short n, short m, long value,

CORBA_(Environment) &env);

virtual long get(short n, short m,

CORBA_(Environment) &env);

};

// »õ·Î ÀÛ¼ºµÈ grid_i.cc

#include "grid_i.h"

grid_i::grid_i(short h, short w) {

m_height=h; // set up height

m_width=w; // set up width

m_a = new long* [h];

for (int i = 0; i < h; i++ )

m_a[i] = new long[w];

}

grid_i::~grid_i() {

// free the individual 1-D arrays:

for (int i = 0; i < m_height; i++)

delete[] m_a[i];

// then free the overall array:

delete[] m_a;

}

short grid_i::height(CORBA(Environment) &) {

return m_height;

}

short grid_i::width(CORBA(Environment) &) {

return m_width;

}

void grid_i::set(short n, short m, long value, CORBA(Environment) &) {

m_a[n][m] = value;

}

long grid_i::get(short n, short m, CORBA(Environment) &) {

return m_a[n][m];

}

´Ü°è4) Ŭ¶óÀ̾ðµå¿Í ±¸Çö °´Ã¼ÀÇ ¸ÞÀÎ ÇÁ·Î±×·¥ ÀÛ¼º

Ŭ¶óÀÌ¾ðÆ® ºÎºÐ°ú ±¸Çö °´Ã¼ ºÎºÐ¿¡ ÇÊ¿äÇÑ ¸ðµç Ŭ·¡½ºÀÇ ÀÛ¼ºÀÌ ³¡³­ ÈÄ ¸¶Áö¸·À¸·Î ÇØ¾ß ÇÒ ÀÏÀº °¢ ºÎºÐ¿¡ ÇÊ¿äÇÑ ¸ÞÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀÌ´Ù. Áï, 2°³ÀÇ ¸ÞÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀÌ µÈ´Ù. ÀÌ ¶§ ÀÛ¼º¿ä·ÉÀº ´ÙÀ½°ú °°´Ù.

1) ÇØ´ç Ŭ·¡½º ¼±¾ð(grid *p;)

2) ±¸Çö °´Ã¼ÀÇ ±¸ÇöºÎºÐ°ú ÇØ´ç Ŭ·¡½º¸¦ ¹ÙÀεù( p = grid::_bind(); )

3) ÇØ´ç Ŭ·¡½ºÀÇ ¸Þ¼Òµå È£Ãâ( p->height(); )

´ÙÀ½Àº ½ÇÁ¦ ±¸Çö °´Ã¼ÂÊÀÇ grid_iŬ·¡½º¸¦ ÀÌ¿ëÇϴ Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÌ´Ù.

// grid Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥

#include "grid.hh"

#include <iostream.h>

#include <stdlib.h>

main (int argc, char **argv) {

grid* p; // pointer the grid object that will be used.

short h, w;

long v , v1;

if (argc < 2) {

cout << "usage: " << argv[0] << " <hostname>" << endl;

exit (-1);

}

TRY {

// First bind to the grid object.

// argv[1] has the hostname (if any) of the target grid object;

// The default is the local host:

p = grid::_bind("", argv[1], IT_X);

} CATCHANY {

// an error occurred while trying to bind to the grid object.

cerr << "Bind to object failed" << endl;

cerr << "Unexpected exception " << IT_X << endl;

exit(1);

} ENDTRY

TRY {

// try to read the height and width of the grid:

h = p->height(IT_X);

w = p->width(IT_X);

} CATCHANY {

// an error occurred while trying to read the height and width:

cerr << "call to height or width failed" << endl;

cerr << "Unexpected exception " << IT_X << endl;

exit(1);

} ENDTRY

// no problem reading the height and width:

cout << "height is " << h << endl;

cout << "width is " << w << endl;

TRY {

// try to set element [2,4] of the grid - to value 123

p->set(2, 4, 123, IT_X);

p->set(2, 5, 1235, IT_X);

// then read back what we have just set:

v = p->get(2, 4, IT_X);

v1 = p->get(2, 5, IT_X);

} CATCHANY {

// an error occurred while calling set or get:

cerr << "Call to set or get failed" << endl;

cerr << "Unexpected exception " << IT_X << endl;

exit(1);

} ENDTRY

// no problem setting and getting the elememt:

cout << "grid[2,4] is " << v << endl;

cout << "grid[2,5] is " << v1 << endl;

// sanity check: make sure we got the value 123 back:

if ( v != 123 ) {

// oops - we didn't:

cerr << "something went seriously wrong" << endl;

exit(1);

}

delete p;

}

±¸Çö °´Ã¼ÀÇ ¸ÞÀÎ ÇÁ·Î±×·¥Àº ¼­¹öÂÊ Å¬·¡½ºÀÎ grid_i ¸¦ ¼±¾ðÇϰí À̸¦ Ŭ¶óÀÌ¾ðÆ®¿¡¼­ »ç¿ë°¡´ÉÇϵµ·Ï ÇØÁÖ¸é µÈ´Ù. ´ÙÀ½Àº ½ÇÁ¦ gridŬ·¡½ºÀÇ ¼­¹ö ÇÁ·Î±×·¥ÀÌ´Ù.

// gridServer.C

#include <iostream.h>

#include "grid_i.h"

int main() {

// create a grid object - using the implementation class grid_i

grid_i myGrid(100,100);

TRY {

// tell Orbix that we have completed the server's initialisation:

CORBA(Orbix).impl_is_ready("grid",IT_X);

}

CATCHANY {

// an error occured calling impl_is_ready() - output the error.

cout << IT_X;

}

ENDTRY

// impl_is_ready() returns only when Orbix times-out an idle server

// (or an error occurs).

cout << "server exiting" << endl;

return 0;

}

´Ü°è5) Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö ¹ÙÀ̳ʸ® ¿Ï¼º

ÀÏ´Ü ¸ðµç ÇÁ·Î±×·¥ÀÇ ÀÛ¼ºÀÌ ³¡³µÀ¸¸é ½ºÅͺê¿Í ½ºÄÌ·ÎÅÏ ÄÚµå ±×¸®°í ÀÛ¼ºÇÑ ÇÁ·Î±×·¥µéÀ» ÅëÇÕ ÇÏ¿© ÄÄÆÄÀÏÀ» ÇÑ ÈÄ ¹ÙÀ̳ʸ®¸¦ »ý¼ºÇÑ´Ù: client.exe , server.exe

´Ü°è6) ±¸Çö °´Ã¼ÀÇ ±¸Çö ÀúÀå¼Ò¿¡ ½ÇÇàÁ¤º¸ ÀúÀå

Orbix´Â ½ÇÁ¦ ¼öÇà½Ã ½ÇÇà µ¥¸ó(orbixd)ÀÇ ÀÇÇØ¼­ ¿øÇÏ´Â ¼­¹öÂÊÀÇ ±¸ÇöºÎºÐÀ» ±¸µ¿½ÃŲ´Ù. µû¶ó¼­ ±¸Çö °´Ã¼ÀÇ ½ÇÇà µ¥¸óÀÎ Orbixd°¡ ÇØ´ç ±¸ÇöºÎºÐÀ» ±¸Çö ÀúÀå¼Ò¿¡¼­ ãÀ» ¼ö ÀÖµµ·Ï ÇØÁÖ¾î¾ß ÇÑ´Ù. ÀÌ °úÁ¤Àº OrbixÀÇ putitÀ̶ó´Â ¸í·É¾î¸¦ ÅëÇØ¼­ ÀÌ·ç¾îÁø´Ù.

putit gridserver d:\orbix22\demo\grid\server.exe

ÀÌ ¿¹´Â gridserver¶ó´Â ¼­¹ö À̸§ÀÇ ±¸ÇöºÎºÐÀÌ ÇØ´ç À§Ä¡( d:\orbix22\demo\grid\server.exe )¿¡ ÀÖ´Ù´Â Á¤º¸¸¦ ±¸Çö ÀúÀå¼Ò¿¡ ÀúÀåµÈ´Ù. ½ÇÁ¦ ÀúÀåµÇ´Â ³»¿ëÀº ´ÙÀ½°ú °°´Ù.

//grid.imp

Name : gridserver

Comms : xdr/tcp

Activation : shared

Owner : Administrator

Launch : ;

Invoke : ;

Marker Launch Command

* D:\ORBIX22\DEMO\GRID\SERVER.EXE

½ÇÁ¦ ±¸Çö °´Ã¼ÀÇ À̸§°ú Åë½Å ¹æ¹ý, ±¸Çö °´Ã¼ÀÇ ±¸µ¿ ¸ðµå(shared), ¼ÒÀ¯ÀÚ, ½ÇÁ¦ À§Ä¡ µîÀÇ Á¤º¸°¡ Æ÷ÇԵȴÙ.

´Ü°è7) Ŭ¶óÀÌ¾ðÆ® ¹ÙÀ̳ʸ® ½ÇÇà

½ÇÁ¦ ±¸Çö ÀúÀå¼Ò¿¡ ¸ðµç µî·ÏÀÌ ³¡³ª°í Orbixd ½ÇÇà µ¥¸óÀ» ¼öÇà½ÃÄ×´Ù¸é ¸ðµç Áغñ°¡ ³¡³­ ¼ÀÀÌ´Ù. ÃÖÁ¾ÀûÀ¸·Î ¼­¹ö¿Í Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥¸¸ ¼öÇà½ÃŰ¸é ¿ø°ÝÁöÀÇ ¼­¹ö¸¦ ÀÌ¿ëÇÏ¿© ¿øÇÏ´Â ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ´Ù.

[ ±×¸²4-15 ] ÀÛµ¿ÁßÀÎ Orbixd µ¥¸ó ÇÁ·Î±×·¥

Âü°í·Î, ÇØ´ç ÇÁ·Î±×·¥À» ¼öÇàÇÒ ¶§ ¹Ì¸® TCP/IP ¿¬°áÀÌ ¼öÇàµÇ°í ÀÖ¾î¾ß ÇÑ´Ù. µû¶ó¼­ ³×Æ®¿÷ ȯ°æÀÌ ±¸ÃàµÇ¾î ÀÖÁö ¾Ê´Ù¸é ÇØ´ç ÇÁ·Î±×·¥µéÀ» ½ÇÇàÇÒ ¼ö ¾ø´Ù.

2.2 PowerBroker¸¦ ÀÌ¿ëÇÑ CORBA ÇÁ·Î±×·¡¹Ö

¾Õ¼­ Orbix¸¦ ÀÌ¿ëÇÏ¿© grid¶ó´Â °£´ÜÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϸ鼭 À̸¦ ºÐ¼®ÇØ º¸¾Ò´Ù. ÀÌÁ¦ CORBAÀÇ ÀÛµ¿ ¸ÞÄ¿´ÏÁòÀ» ¿Ïº®È÷ ÀÌÇØÇßÀ» °ÍÀÌ´Ù. À̹ø¿¡´Â ¿¢½ºÆÛ¼ÒÇÁÆ®ÀÇ PowerBroker¶ó´Â Á¦Ç°À» ÀÌ¿ëÇÏ¿© Á» ´õ º¹ÀâÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇغ¸ÀÚ.

2.2.1 ÇÁ·Î±×·¥ ÁøÇà ¼ø¼­


2.2.2 ÇÁ·Î±×·¡¹Ö ȯ°æ

2.2.3 ½Ã³ª¸®¿À

ÀÌ ÇÁ·Î±×·¥Àº DB(¿¹Á¦¿¡¼­´Â ´Ü¼ø ÅØ½ºÆ® ÆÄÀÏÀ» »ç¿ë)¿¡ ÀúÀåµÇ¾î Àִ ȸ»çÀÇ ÁÖ½Ä ½Ã¼¼¸¦ ¾Ë¾Æº¸´Â ÇÁ·Î±×·¥À¸·Î ÇÑ È¸»çÀÇ ÁÖ½Ä ½Ã¼¼¸¦ ¾Ë¾Æº¸´Â ¹æ¹ý°ú ¿©·¯ ȸ»çµéÀ» ±×·ìÈ­ ÇÏ¿© ÇØ´ç ±×·ì¿¡ ¼ÓÇØ Àִ ȸ»çµéÀÇ ÁÖ½Ä ½Ã¼¼¸¦ ¾Ë¾Æº¸´Â ³»¿ëÀ¸·Î ÀÛ¼ºµÇ¾î ÀÖ´Ù. ±¸Çö °´Ã¼´Â ¼­ºñ½º°¡ ÇϳªÀÎ ±¸Çö °´Ã¼¸¦ °ü¸®Çϸç, ´Ù¼öÀÇ Å¬¶óÀÌ¾ðÆ®¿¡¼­ µ¿½Ã¿¡ ÇϳªÀÇ ±¸Çö °´Ã¼·ÎºÎÅÍ ¼­ºñ½º¸¦ ¹Þ´Â ÇÁ·Î±×·¥ÀÌ´Ù. [±×¸² 4-16 ] ÂüÁ¶

[ ±×¸² 4-16 ] ÇÁ·Î±×·¥ ±¸¼ºµµ

2.2.4 IDL ÀÛ¼º

getQuote() - ȸ»ç¸í(symbol)À» ¹Þ¾Æ ±× ȸ»çÀÇ Áֽݪ(quote)À» ¸®ÅÏ

createGroup()-¼¼°³ÀÇ È¸»ç¸í(sym1,sym2,sym3)À¸·Î ±¸¼ºµÈ ±×·ì¸í (groupName)À» »ý¼ºÇÏ°í ¼º°øÇϸé TRUE ¹Ýȯ

getGroupQuote() - ±×·ì¸í groupNameÀ» ¹Þ¾Æ °¡Àå ÃÖ±ÙÀÇ ÁֽĽü¼¸¦ ¹ÝȯÇϸé TRUE, ½ÇÆÐÇϸé FALSE ¹Ýȯ


typedef float quote;typedef string symbol;interface QuoteService{ quote getQuote(inout symbol stock); boolean createGroup(inout, string groupName, in symbol sym1, in symbol sym2, in symbol sym3); boolean getGroupQuote(inout string groupName, out quote quo1,



out quote quo2, out quote quo3);



boolean getGroupSymbols(inout string groupName, out symbol sym1,


out symbol sym2, out symbol sym3 );


};


2.2.5 IDL ÄÄÆÄÀÏ

IDL ÄÄÆÄÀÏ·¯´Â ´ÙÀ½°ú °°Àº ³× °³ÀÇ ÆÄÀÏÀ» ¸¸µé¾î ³½´Ù.

[ ±×¸² 4-17 ] IDL ÄÄÆÄÀÏ ÈÄ »ý¼ºµÈ ÆÄÀϵé


2.2.6 ¼­¹ö ÇÁ·Î±×·¥ ÀÛ¼º

ÀÌÁ¦ IDL ÄÄÆÄÀÏÀÌ ¿Ï·áµÇ°í ¾Õ¼­ ¾ð±ÞÇß´ø 4°³ ÆÄÀÏÀÌ ¸¸µé¾î Áö¸é, ÀÌÁ¦ ±¸Çö °´Ã¼¸¦ ÀÛ¼ºÇØ¾ß ÇÑ´Ù. ´Ù½Ã ¸»ÇØ QuoteService ±¸Çö °´Ã¼¿Í ±¸Çö °´Ã¼¸¦ °ü¸®(¼­¹ö)ÇÏ´Â main ÇÁ·Î±×·¥À» ÀÛ¼ºÇØ¾ß ÇÑ´Ù.

QSVC.H¿Í QSVC_S.H ÆÄÀÏ¿¡¼­ °ü½ÉÀ» ²ô´Â Ŭ·¡½º´Â Interface base classÀÎ Class QuoteService¿Í Implementation base classÀÎ Class QuoteService_base_implÀÌ´Ù. QuoteService´Â CORBA::object Ŭ·¡½º·ÎºÎÅÍ »ó¼ÓÀ» ¹ÞÀ¸¸ç, QuoteService_base_implÀº QuoteService·Î ºÎÅÍ »ó¼ÓÀ» ¹Þ´Â´Ù[±×¸²4-18] ÂüÁ¶. ÀÌÁ¦ ÇÁ·Î±×·¡¸Ó´Â QuoteService_implÀ» Á¤ÀÇÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱ⸸ ÇÏ¸é µÈ´Ù.

.

[ ±×¸² 4-18 ] QuoteServiceÀÇ ±¸Çö °´Ã¼

±¸Çö °´Ã¼ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§ ÇÁ·Î±×·¡¸Ó´Â QuoteService Ŭ·¡½º°¡ ¼±¾ðµÇ¾î ÀÖ´Â QSVC_S.H¸¦ ¹Ýµå½Ã Æ÷ÇÔÇÏ¿©¾ß Çϸç, getQuote(), createGroup(), getGroupQuote() ¿ÀÆÛ·¹À̼ÇÀ» QuoteService_impl Ŭ·¡½º¿¡ ´Ù½Ã ¼±¾ðÇØ ÁÖ¾î¾ß ÇÑ´Ù. ÀÌÁ¦ Àüü Ŭ·¡½º ¼±¾ð ºÎºÐÀÌ ¸¶¹«¸® µÇ°í ÇÁ·Î±×·¡¸Ó´Â À̵é Ŭ·¡½º¿¡ ´ëÇÑ Äڵ常 ÀÛ¼ºÇÔÀ¸·Î ½á ±¸Çö °´Ã¼ÀÇ ÇÁ·Î±×·¥Àº ¿Ï·á°¡ µÈ´Ù.

ÀÌÁ¦ ³²Àº ÀÏÀº ¼­¹ö main ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀÌ´Ù. ¼­¹ö ÇÁ·Î±×·¥Àº [±×¸²4-19]¿Í °°Àº ÀÛ¾÷À» ÇÏ¿©¾ß ÇÑ´Ù.

[ ±×¸²4-19 ] ¼­¹ö ÇÁ·Î±×·¥

2.2.7 Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ ÀÛ¼º

SII¸¦ »ç¿ëÇϴ Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº ÀÛ¾÷À» ÇÏ¿©¾ß ÇÑ´Ù [ ±×¸² 4-18 ] ÂüÁ¶.

[ ±×¸²4-18 ] Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ ¿¹

============================ ¿ä ¾à : PowerBroker ===========================

PowerBroker´Â 1991³â¿¡ 1.0 ¹öÁ¯À» ¹ßÇ¥ÇÑ ÀÌÈÄ·Î ÇöÀç±îÁö ¹öÁ¯ 2.0À» ¹ßÇ¥ÇÏ¿´À¸¸ç, CORBA 2.0¿¡¼­ Ç¥ÁØÈ­ÇÑ ORBÀÇ ¸ðµç ÄÄÆ÷³ÍÆ®µéÀ» ÁؼöÇÑ ORB¸¦ Á¦°øÇϰí ÀÖ´Ù. ¶ÇÇÑ º¹ÀâÇÑ ºÐ»ê °´Ã¼ ½Ã½ºÅÛÀ» ¼Õ½±°Ô °ü¸®Çϱâ À§ÇÏ¿© ´Ù¾çÇÑ GUIÅøÀ» Á¦°øÇϸç, ÀÌ GUIÅø¿¡´Â º¸¾È ½Ã½ºÅÛ ¼³Ä¡, ƯÁ¤ ¸Ó½®ÀÇ ÄÄÆ÷³ÍÆ® µî·Ï, ±×¸®°í ÄÄÆ÷³ÍÆ®ÀÇ ½ÃÀÛ µîÀÇ ±â´ÉÀÌ Æ÷ÇԵǾî ÀÖ´Ù. PowerBroker´Â C++¿Í ½º¸ôÅåÀ» Áö¿øÇÏ´Â µÎ Á¾·ùÀÇ Á¦Ç°ÀÌ ÀÖ´Ù. ¶ÇÇÑ, ÇÁ·Î±×·¡¸Ó°¡ ¾îÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¡¹Ö¿¡¸¸ Àü³äÇÒ ¼ö ÀÖµµ·Ï C++ ±â¹ÝÀÇ ´ë±Ô¸ð ºÐ»ê ½Ã½ºÅÛ °³¹ß ¹× °ü¸®¸¦ À§ÇÑ Extended C++ Á¦°øÇϰí ÀÖ´Ù. ¿©±â¼­´Â Extended C++Á¦Ç°À» Áß½ÉÀ¸·Î ¼³¸íÇϵµ·Ï ÇÑ´Ù.

ÁÖ¿ä Æ¯Â¡

ÁÖ¿ä ±â´É

¿ø°ÝÁö»óÀÇ ±¸Çö °´Ã¼°¡ ¼­ºñ½º¸¦ ÁøÇàÇϰí ÀÖ´Â µ¿¾È ÇÁ·Î±×·¥ÀÌ ÇÁ·Î¼¼½ÌÀ» °è¼Ó ÁøÇà ½Ãų ¼ö ÀÖ´Ù.

´ÜÀÏ ¾²·¹µå ¹× ´ÙÁß ¾²·¹µå Ç÷§Æû ȯ°æÀ» Áö¿øÇÑ´Ù.

ÀÎÅÍÆäÀ̽º ÀúÀå¼ÒÀÇ ÄÄÆ÷³ÍÆ®¸¦ ÆíÁý, °Ë»ö, ºÎ¶ó¿ì¡ ÇÒ ¼ö ÀÖ°Ô ÇØ ÁØ´Ù. ÀÌ ±â´ÉÀ» ÅëÇØ »õ·Î¿î IR Á¤ÀÇ ¹× ¸Å°³º¯¼ö À¯ÇüÀ» Ãß°¡ ¶Ç´Â º¯°æ ÇÒ ¼ö ÀÖÀ¸¸ç IDLÀ» »ý¼ºÇÒ ¼ö µµ ÀÖ´Ù. ¾Æ¿ï·¯ ³×Æ®¿÷ »ó¿¡¼­ ´Ù¸¥ »ç¿ëÀÚ°¡ IR ³»¿ëÀ» º¯°æÇÏ´Â °æ¿ì ´Ù¸¥ »ç¿ëÀÚ¿¡°Ô À̸¦ ÅëÁöÇÏ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù.

Áö¿ø ¼­ºñ½º

PowerBrokerÀº ¸í¸í ¼­ºñ½º, »ý¸íÁֱ⠼­ºñ½º,À̺¥Æ® ¼­ºñ½º¸¦ Á¦°øÇÑ´Ù. ¸í¸í ¼­ºñ½º´Â ±¸Çö °´Ã¼µéÀÇ À§Ä¡¸¦ ã±â À§ÇØ »ç¿ëÀÚ¿¡°Ô Ä£¼÷ÇÑ À̸§À» °¡Áø ¼öÁ÷Àû µð·ºÅ丮¸¦ Á¦°øÇÑ´Ù. ±×¸®°í ºü¸¥ 󸮸¦ À§ÇØ ´ÙÁß ¾²·¹µå ±â¹ýÀ» »ç¿ëÇÏ¸ç ºÐ»êµÈ ¸í¸í ¼­ºñ½ºÀÇ ÅëÇÕÀ» Áö¿øÇÑ´Ù

Ư¡

¿ø°Ý ¸Þ¼ÒµåµéÀÇ È£Ãâ ÀÛ¾÷½Ã ºí·°Å·¾øÀÌ ºñµ¿±âÀûÀ¸·Î ¾î´À À§Ä¡¿¡ ÀÖµç »ó°ü¾øÀÌ È£ÃâµÇµµ·Ï ÇÑ´Ù.

¿©·¯ Á¾·ùÀÇ Ç÷§Æû»ó¿¡¼­ ¹Ýȯ °ª ¹× ¸Å°³º¯¼ö·Î¼­ º¹ÀâÇÑ ÀÓÀÇÀÇ ±¸Çö °´Ã¼ÀÇ Àü´ÞÀ» Áö¿øÇÑ´Ù.

µ¿ÀûÀ¸·Î ±¸Çö °´Ã¼ À̵¿À» Áö¿øÇϱâ À§ÇØ °´Ã¼ °ª ¸Å°³º¯¼ö¸¦ »ç¿ëÇÑ´Ù. ¾îÇø®ÄÉÀ̼ǵéÀº Åõ¸íÇÏ°Ô È£½ºÆ®¿¡¼­ È£½ºÆ®·Î ½ÇÇà ÁßÀÎ ±¸Çö °´Ã¼µéÀ» Á÷Á¢ À̵¿ÇÒ ¼ö ÀÖ´Ù. PowerBroker´Â ÀÚµ¿ÀûÀ¸·Î ±¸Çö °´Ã¼ÀÇ »óÅ Á¤º¸¸¦ Àü´ÞÇϰí Ŭ¶óÀ̾ðÆ®ÀÇ ±¸Çö °´Ã¼¿¡ ´ëÇÑ ¿¬°áÀ» Àç¼³Á¤ÇÑ´Ù.

¸í¸í ¼­ºñ½º¿Í °°Àº ±¸Çö °´Ã¼ ¼­ºñ½º ³»ÀÇ ¿ÀÆÛ·¹ÀÌ¼Ç Á¾·á, ±¸Çö °´Ã¼ ¹× ÇÁ·Î¼¼½ºÀÇ »ý¼º°ú Á¾·á°°Àº »óÅ º¯È­¸¦ º¸°íÇÏ°í °Ë»öÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» ÅëÇØ¼­ °´Ã¼µéÀÇ »óŸ¦ ¸ð´ÏÅ͸µÇÒ ¼ö ÀÖ´Ù. ¾îÇø®ÄÉÀ̼ÇÀº Àüü µµ¸ÞÀÎ ¶Ç´Â ƯÁ¤ È£½ºÆ®¿¡¼­ »ç¿ëÇϰíÀÚ ÇÏ´Â À̺¥Æ®¸¦ À̺¥Æ® Ŭ·¡½º ³»¿¡ µî·ÏÇÒ ¼ö ÀÖÀ¸¸ç Extended C++´Â À̺¥Æ® °ü¸® Ŭ·¡½º¸¦ ÅëÇÏ¿© È¿°úÀûÀ¸·Î ¾îÇø®ÄÉÀ̼ǿ¡°Ô ºñµ¿±â ÅëÁö¸¦ Àü´ÞÇÒ ¼ö ÀÖ´Ù.

±¸Á¶(Architecture)

¸ÕÀú PowerBrokerÀº ÇÁ·Î±×·¥ °³¹ß Ãø¸é¿¡¼­ [ ±×¸² 4-19 ]¿Í °°Àº ±¸Á¶¸¦ °®´Â´Ù. °¢ ±¸Á¶ÀÇ ±¸¼º¿ä¼Ò´Â ´ÙÀ½°ú °°´Ù.

- IDL ÄÄÆÄÀÏ·¯

IDL ¼Ò½º¸¦ ÀÐ¾î µé¿© Ŭ¶óÀ̾ðÆ®, ±¸Çö °´Ã¼ Ãø ÇÁ·Î±×·¥À» ¸¸µé¾î ³½´Ù. C++ Çì´õ ÆÄÀÏÀº Ŭ¶óÀÌ¾ðÆ® , ±¸Çö °´Ã¼¿¡ Æ÷ÇԵǰí ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ¸µÅ© µÇ´Â C++ ½ÇÇà Äڵ尡 Æ÷ÇԵȴÙ. ¶ÇÇÑ ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò ÆÄÀÏÀ» »ý¼ºÇÑ´Ù.

- ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò ÆÄ¼­¿Í ·Î´õ( Interface Repository Parser and Loader , IRPAL)

IDL ÄÄÆÄÀÏ·¯°¡ ¸¸µç ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò ÆÄÀÏÀ» ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò ¿£Áø¿¡ µî·ÏÇϰí ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ °´Ã¼ ÁöÇâÀû ¼³¸í(description)À» ¸¸µé¾î ³½´Ù.

[ ±×¸²4-19 ] PowerBrokerÀÇ °³¹ß ±¸Á¶µµ

- ÀÎÅÍÆäÀ̽º ÀúÀå ¼­¹ö(Interface Repository Server)

ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò ¿£Áø¿¡¼­ ¼öÇà °¡´ÉÇÑ ¹ÙÀ̳ʸ® ÆÄÀÏÀ» ÀúÀåÇÑ´Ù.

- IFR Ž»ö±â

ÀÎÅÍÆäÀ̽º ÀúÀå ¼­¹ö¿Í ÆÄÀϵéÀ» °Ë»öÇϰųª ¼öÁ¤ÇÏ´Â ±×·¡ÇÈ ÅøÀÌ´Ù. À̰ÍÀº CORBA Ç¥ÁØ¿¡¼­ Á¤ÀÇÇÑ °ÍÀÌ ¾Æ´Ï¶ó PowerBroker¿¡¼­ µ¶ÀÚÀûÀ¸·Î Á¦°øÇÏ´Â À¯Æ¿¸®Æ¼ÀÌ´Ù.

¾Õ¼­ »ìÆìº» ±¸Á¶°¡ PowerBrokerÀÇ °³¹ß ±¸Á¶¸¦ »ìÆìº» °ÍÀ̶ó¸é ´ÙÀ½ [±×¸² 4-20 ]Àº PowerBrokerÀÇ ¼öÇà ±¸Á¶¸¦ ³ªÅ¸³½ °ÍÀÌ´Ù. °¢ ¼öÇà ±¸Á¶´Â ´ÙÀ½°ú °°´Ù.






[ ±×¸² 4-20 ] PowerBroker ¼öÇà ±¸Á¶µµ

- °´Ã¼ ºÐ»ê Ä¿³Î( Object Distribution Kernel, ODK)

ODK´Â [±×¸²4-21] ±¸Á¶¸¦ °®À¸¸ç °´Ã¼ÀÇ ºÐ»ê Åõ¸í¼ºÀ» °ü¸®Çϴ Ʋ(framework)ÀÌÀÚ µðÀÚÀÎ ÆÐÅÏÀÌ´Ù. ÀÌ·± ÆÐÅÏÀº CORBA Ç¥ÁØ¿¡¼­´Â Á¤ÀÇ µÇÁö ¾Ê¾Ò´Ù. ODK´Â PowerBrokerÀÇ ÇÙ½ÉÀÌ¸ç ½ÇÇà ½Ã°£ ¶§ ¼öÇàµÇ´Â ÇÁ·Î¼¼½ºÀÌ´Ù. ODK´Â ´ÙÀ½°ú °°Àº ±â´ÉÀ» ¼öÇàÇÑ´Ù.

* ¸Þ½ÃÁö Çü¼º(Message structure and formatting)

* ¸Å°³º¯¼ö Àü´Þ

* ¾²·¹µå °ü¸®

* ÀÔ/Ãâ·Â °ü¸®

* ºñµ¿±â °ü¸®

* Ŭ¶óÀ̾ðÆ®Ãø Request/Reply °ü¸®

* ±¸Çö °´Ã¼ À§Ä¡¿Í Request °ü¸®

* ±¸Çö °´Ã¼ÀÇ ½ÇÇà°ú Áß´Ü

* °´Ã¼ ÂüÁ¶ÀÚÀÇ »ý¼º°ú °ü¸®

ÀÌ·± ±â´ÉµéÀÌ Ãß»óÈ­ µÇ¾î ´Ù¸¥ ÇÁ·Î±×·¥ ¾ð¾î, ´Ù¸¥ ¿î¿µÃ¼Á¦ , ´Ù¸¥ °´Ã¼ ¸ðµ¨, ´Ù¸¥ ³×Æ®¿÷ ȯ°æ µî ¿¡¼­µµ Àç»ç¿ëÀ» ¿ëÀÌÇÏ°Ô ÇÑ´Ù.


[ ±×¸²4-21 ] ODK ºí·° ±¸¼ºµµ

- CORBA ¶óÀ̺귯¸®

ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò, DII, DSI, ORB ¿Í BOA pseudo-objectµî°ú °°Àº CORBA ÀÎÅÍÆäÀ̽º´Â ÀÀ¿ë ÇÁ·Î±×·¥¿¡ Á¤Àû, µ¿ÀûÀ¸·Î ¸µÅ©°¡ µÉ ¼ö ÀÖµµ·Ï ¶óÀ̺귯¸®·Î ±¸ÇöµÇ¾ú´Ù.

- ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò

IDL·Î ÀÛ¼ºÇÑ ÀÎÅÍÆäÀ̽ºÀÇ Á¤º¸¸¦ ÀúÀåÇÑ´Ù. µ¿Àû È£Ãâ½Ã ÀÌ¿ëµÈ´Ù.

- BOA µ¥¸ó

ÁÖ¿ä ±â´ÉÀº ±¸Çö °´Ã¼ÀÇ ½ÇÇà°ú °ü¸®ÀÌ¸ç ±× ¿ÜÀÇ ±â´ÉÀº ´ÙÀ½°ú °°´Ù.

* Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû¿¡ ÀÇÇÑ ±¸Çö °´Ã¼ÀÇ ½ÇÇà

* ±¸Çö °´Ã¼ÀÇ °ü¸®¿Í À§Ä¡ ÁöÁ¤

* Á¤ÀÇµÈ ½ÇÇà ±ÔÄ¢ÀÇ ÁýÇà

* ¼­¹ö ±¸Çö °´Ã¼¿¡ ´ëÇÑ ¼³¸í ÀúÀå

- ±¸Çö°ú ½ÇÇà ÀúÀå¼Ò(Implementation and Executable Repositories)

BOA µ¥¸óÀº Ŭ¶óÀÌ¾ðÆ®¿¡¼­ º¸³½ request¸¦ ¹Þ¾Æ ½ÇÇà½Ãų ±¸Çö °´Ã¼¸¦ ã´Â´Ù. À̶§ Àû´çÇÑ ¼­¹ö ±¸Çö °´Ã¼¸¦ ÁöÁ¤ÇÒ ¼ö ¾øÀ» ¶§ ±¸Çö ÀúÀå¼Ò¿Í ½ÇÇà ÀúÀå¼Ò¸¦ ã´Â´Ù. ´Ù¸¥ ORB Á¦Ç°°ú´Â ´Þ¸® PowerBroker¿¡¼­´Â ±¸Çö°ú ½ÇÇàÀ» ±¸º°ÇÑ´Ù. ±¸ÇöÀº CORBA ÀÎÅÍÆäÀ̽º ŸÀÔÀ» ±¸ÇöÇÑ ÄÚÆ®·Î¼­ ¿©·¯ ´Ù¸¥ ½ÇÇà ÆÄÀÏ¿¡ ¸µÅ© µÇ¾î »ç¿ëµÈ´Ù.

- ½ÇÇàÀÚ(Activators)

ORB°¡ ÇöÀç ½ÇÇàµÇÁö ¾Ê´Â ±¸Çö °´Ã¼¿¡ ´ëÇÑ ¿äûÀ» ¹Þ¾ÒÀ» ¶§ ÇØ´ç ±¸Çö °´Ã¼ÀÇ ½Äº°ÀÚ¿¡ ´ëÇÑ ¸ÅÇÎÀ» ½ÇÇàÀÚ°¡ ´ã´çÇÑ´Ù. Áï, ORB°¡ ±¸Çö °´Ã¼¿¡ ´ëÇÑ ¿äûÀ» ¹Þ¾ÒÀ» ¶§ ÇØ´ç ŸÀÔ¿¡ ´ëÇÑ ½ÇÇàÀÚ¸¦ ¼öÇà ½ÃŲ´Ù. ½ÇÇàÀÚ´Â ½ÇÇàÇÒ ±¸Çö °´Ã¼¿¡ ´ëÇÑ ½Äº°ÀÚ¸¦ ³Ñ°Ü ÁÖ°Ô µÈ´Ù. ÀÌ·¯ÇÑ ½Äº°ÀÚ Á¤º¸´Â µ¥ÀÌŸº£À̽º ÁúÀÇ Å°·Î »ç¿ëµÇ°í ÁúÀÇÀÇ °á°ú·Î¼­ »õ·Î¿î ÀνºÅϽº¸¦ ¸¸µé°í À̸¦ ORB¿¡ ³Ñ±â°Ô µÈ´Ù. ±×·¯¸é ORB´Â ¼­¹ö ±¸Çö °´Ã¼¸¦ µî·ÏÇϰí Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» ½ÇÇàÇÑ´Ù.

- ¸í¸í ¼­ºñ½º

CORBA ¼­ºñ½º¿¡¼­ Á¤ÀÇÇÑ ¸í¸í ¼­ºñ½º¸¦ Á¦°øÇϸç ÀÌ·± ¼­ºñ½º¸¦ Á¦°øÇÏ´Â ¼­¹ö´Â ÇϳªÀÌ°í ¿©·¯ È£½ºÆ®¿¡¼­ ½ÇÇà µÈ´Ù.

°³¹ß Åø

PowerBrokerÀÇ ¸í¸í ¼­ºñ½º¸¦ °ü¸®Çϱâ À§ÇÑ GUI ÅøÀÌ´Ù. ½ÇÇà ½Ã¿¡ »ç¿ëÀÚ´Â PowerBrokerÀÇ À̸§ º¸°ü Àå¼Ò³»¿¡ µî·ÏµÈ Á¤º¸¸¦ ´Ù½Ã ±¸¼ºÇϰųª, ¼öÁ¤ ¹× ºÎ¶ó¿ì¡ ÇÒ ¼ö ÀÖ´Ù.

PowerBrokerÀ» »ç¿ëÇÏ¿© ´Ù¾çÇÑ À̺¥Æ®¿¡ ´ëÇÑ ·Î±× ³»¿ëÀ» ¸¸µé ¼ö ÀÖ´Ù. ·Îµå ÅøÀ» »ç¿ëÇÏ¿© µ¿ÀûÀ¸·Î ·Î±× ³»¿ëÀ» º¼ ¼ö ÀÖ´Ù.

µî·Ï ÅøÀº µ¿ÀûÀÎ ±¸Çö °´Ã¼ÀÇ µî·ÏÀ» À§ÇØ Á¦°øµÇ´Â ÇÁ·Î±×·¥ÀÌ´Ù.

Ȱ¼ºÈ­µÈ Ŭ¶óÀ̾ðÆ®, ±¸Çö °´Ã¼°£ÀÇ ¿¬°á »óÅÂ, °ü¸®µÇ´Â ±¸Çö °´Ã¼ ¹× ¾îÇø®ÄÉÀ̼ÇÀÇ ÇÁ·Î¼¼½º »óŸ¦ µ¿ÀûÀ¸·Î º¸¿©ÁÖ´Â °ü¸® ÇÁ·Î±×·¥ÀÌ´Ù. ÀÌ ÅøÀº ¿ø°ÝÁöÀÇ ±¸Çö °´Ã¼¿¡¼­ Á¦°øÇÏ´Â ¼­ºñ½º¿Í ·ÎÄà ÀÎÅÍÆäÀ̽º »çÀÌÀÇ Åë½Å»óŸ¦ ÃßÀûÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù.

========================================================================

4¸·À» ¸¶Ä¡¸ç

CORBAÀÇ ±âº» öÇÐÀº ÀÌÁ¾ÀÇ È¯°æÇÏ¿¡¼­ ƯÁ¤ ±¸Çö¾ð¾î¿¡ Á¾¼ÓµÇÁö ¾Ê´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ¿© ½Ã½ºÅÛÀ» ÅëÇÕÇÏ´Â °ÍÀÌ´Ù. À̸¦ À§ÇØ °¡Àå Áß¿äÇÑ ±â´ÉÀÌ IDL¾ð¾îÀÌ´Ù. IDLÀº C, C++°°Àº ±¸Çö ¾ð¾î°¡ ¾Æ´Ï¶ó »ç¿ëÀÚ°¡ »ý°¢Çϰí ÀÖ´Â ¹®Á¦ÀÇ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇØÁÖ´Â ¾ð¾îÀÌ´Ù.

IDLÀº °´Ã¼ÁöÇâ °³³äÀ» Áö¿øÇϸç C++À̳ª ÀÚ¹Ù°°Àº ±¸Çö¾ð¾î·Î º¯È¯µÈ´Ù. »ç¿ëÀÚ´Â ¿øÇÏ´Â IDL ÆÄÀÏÀ» ÀÛ¼ºÇϰí IDL ÄÄÆÄÀÏ·¯¸¦ ÅëÇØ ¿øÇÏ´Â ¾ð¾î·Î º¯È¯ÇÑ ÈÄ ÇÊ¿äÇÑ ·ÎÁ÷À» Ãß°¡ÇÏ¸é µÈ´Ù. ¿ì¸®´Â ¿©±â¼­ Orbix¿Í PowerBroker¶ó´Â Á¦Ç°À» »ç¿ëÇÏ¿© ÀÀ¿ë ÇÁ·Î±×·¥À» ÀÛ¼ºÇØ º¸¾Ò´Ù.
[ ´ÙÀ½ | ÀÌÀü ]