• Non ci sono risultati.

 #425430394/0%:947,

N/A
N/A
Protected

Academic year: 2021

Condividi " #425430394/0%:947,"

Copied!
107
0
0

Testo completo

(1)&25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. &25%$&RPSRQHQW0RGHO 7XWRULDO 20*&&0,PSOHPHQWHUV*URXS 0$5637& 7HOHFRP'7& 20*0HHWLQJ2UODQGR86$ -XQHWK 20* 7& 'RFXPHQW FFP. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . 7XWRULDO7HDP „ 6SHDNHUV „ „. 3KLOLSSH 0HUOH. „. +DUDOG %|KPH. „ „ „ „. 6\OYDLQ /HEODQF.  /,)/,15,$  3KLOLSSH0HUOH#OLIOIU. 'LHJR 6HYLOOD 5XL].  +XPEROGW 8QLYHUVLW\  ERHKPH#LQIRUPDWLNKXEHUOLQGH. 0DWKLHX 9DGHW 7RP 5LWWHU.  8QLYHUVLGDG GH 0XUFLD  GVHYLOOD#GLWHFXPHV.  /,)/  6\OYDLQ/HEODQF#OLIOIU.  7+$/(6/,)/  0DWKLHX9DGHW#OLIOIU.  )UDXQKRIHU )RNXV  ULWWHU#IRNXVJPGGH. - 6FRWW (YDQV.  &3,  HYDQV#FSLFRP. „ &RQWULEXWRUV „ „. 5DSKDsO 0DUYLH )UDQN 3LOKRIHU.  /,)/ ± 5DSKDHO0DUYLH#OLIOIU.  $OFDWHO)3;  IS#IS[GH. „ :LWKVXSSRUWIURPWKH(XURSHDQ,67&2$&+SURMHFW 7XHVGD\ -XQH WK . F

(2) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(3) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 7XWRULDO2EMHFWLYHV „ $JXLGHGWRXURIWKH&25%$&RPSRQHQW0RGHO +RZWRGHVLJQLPSOHPHQWSDFNDJHGHSOR\H[HFXWH DQGXVH&25%$FRPSRQHQWV „ 3XWWLQJWKH&&0WRZRUN „. „ ,OOXVWUDWHGZLWKDFRQFUHWHH[DPSOH :HOONQRZQ'LQLQJ3KLORVRSKHUV „ 'HPRQVWUDWHGRQYDULRXV2625%&&0SODWIRUPVDQG SURJUDPPLQJODQJXDJHV &-DYD20*,'/VFULSW

(4) „. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . $JHQGD „ :KDWLVWKH&25%$&RPSRQHQW0RGHO" „ 'HILQLQJ&25%$FRPSRQHQWV „ 3URJUDPPLQJ&25%$FRPSRQHQWFOLHQWV „ ,PSOHPHQWLQJ&25%$FRPSRQHQWV „ 3XWWLQJ&25%$FRQWDLQHUVWRZRUN „ 3DFNDJLQJ&25%$FRPSRQHQWV „ 'HSOR\LQJ&25%$FRPSRQHQWDSSOLFDWLRQV „ 6XPPDU\ 7XHVGD\ -XQH WK . F

(5) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(6) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. :KDWLVWKH &25%$&RPSRQHQW0RGHO". „ )URP&25%$[WRWKH&&0 „ &RPSDULVRQZLWK(-%&20DQG1(7 „ &&07HFKQRORJLHV „ 7\SLFDO8VH&DVH 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . :K\6RIWZDUH&RPSRQHQWV" „ 7LPHWRPDUNHW. ,PSURYHGDSSOLFDWLRQSURGXFWLYLW\ „ 5HGXFHGFRPSOH[LW\ „ 5HXVHRIH[LVWLQJFRGH „. „ 3URJUDPPLQJE\DVVHPEO\ PDQXIDFWXULQJ

(7) UDWKHU. WKDQGHYHORSPHQW HQJLQHHULQJ

(8). 5HGXFHGVNLOOVUHTXLUHPHQWV „ )RFXVH[SHUWLVHRQGRPDLQSUREOHPV „ ,PSURYLQJVRIWZDUHTXDOLW\ „. „ .H\EHQHILWZLWKFOLHQWVLGH VHUYHUVLGH. GHYHORSPHQW. 7XHVGD\ -XQH WK . F

(9) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(10) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. )URP&25%$ „ $GLVWULEXWHGREMHFWRULHQWHGPRGHO „ +HWHURJHQHLW\ 20* ,QWHUIDFH 'HILQLWLRQ /DQJXDJH 20* ,'/

(11) „ 3RUWDELOLW\ 6WDQGDUGL]HG ODQJXDJH PDSSLQJV „ ,QWHURSHUDELOLW\ *,23  ,,23 „ 9DULRXV LQYRFDWLRQ PRGHOV 6,, ',, DQG $0, „ 0LGGOHZDUH 25% 32$ HWF PLQLPXP UHDOWLPH DQG IDXOWWROHUDQFH SURILOHV. „ 1RVWDQGDUGSDFNDJLQJDQGGHSOR\PHQWIDFLOLWLHV „ ([SOLFLWSURJUDPPLQJRIQRQIXQFWLRQDOSURSHUWLHV „ OLIHF\FOH GH

(12) DFWLYDWLRQ QDPLQJ WUDGLQJ QRWLILFDWLRQ SHUVLVWHQFH WUDQVDFWLRQV VHFXULW\ UHDOWLPH IDXOWWROHUDQFH . „ 1RYLVLRQRIVRIWZDUHDUFKLWHFWXUH 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . WRWKH&25%$&RPSRQHQW0RGHO „ $GLVWULEXWHGFRPSRQHQWRULHQWHGPRGHO „ $Q DUFKLWHFWXUH IRU GHILQLQJ FRPSRQHQWV DQG WKHLU LQWHUDFWLRQV „ )URP FOLHQWVLGH *8,

(13) WR VHUYHUVLGH EXVLQHVV

(14) FRPSRQHQWV. „ $ SDFNDJLQJ WHFKQRORJ\ IRU GHSOR\LQJ ELQDU\ PXOWLOLQJXDO H[HFXWDEOHV. „ $ FRQWDLQHU IUDPHZRUN IRU LQMHFWLQJ OLIHF\FOH GH

(15) DFWLYDWLRQ VHFXULW\ WUDQVDFWLRQV SHUVLVWHQFH DQG HYHQWV. „ ,QWHURSHUDELOLW\ ZLWK (QWHUSULVH -DYD %HDQV (-%

(16). „ 7KH,QGXVWU\¶V)LUVW0XOWL/DQJXDJH&RPSRQHQW6WDQGDUG „ 0XOWLODQJXDJHV PXOWL26V PXOWL25%V PXOWLYHQGRUV HWF „ 9HUVXV WKH -DYDFHQWULF (-% FRPSRQHQW PRGHO „ 9HUVXV WKH 06FHQWULF 1(7 FRPSRQHQW PRGHO. 7XHVGD\ -XQH WK . F

(17) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(18) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. &&0&RPSDUHGWR(-%&20DQG1(7 „ /LNH6810LFURV\VWHPV¶V(QWHUSULVH-DYD%HDQV (-%

(19) „ &25%$ FRPSRQHQWV FUHDWHG DQG PDQDJHG E\ KRPHV „ 5XQ LQ FRQWDLQHUV PDQDJLQJ V\VWHP VHUYLFHV WUDQVSDUHQWO\ „ +RVWHG E\ DSSOLFDWLRQ FRPSRQHQW VHUYHUV. „ /LNH0LFURVRIW¶V&RPSRQHQW2EMHFW0RGHO &20

(20) „ +DYH VHYHUDO LQSXW DQG RXWSXW LQWHUIDFHV „. %RWK V\QFKURQRXV RSHUDWLRQV DQG DV\QFKURQRXV HYHQWV. „ 1DYLJDWLRQ DQG LQWURVSHFWLRQ FDSDELOLWLHV. „ /LNH0LFURVRIW¶V1(7)UDPHZRUN „ &RXOG EH ZULWWHQ LQ GLIIHUHQW SURJUDPPLQJ ODQJXDJHV „ &RXOG EH SDFNDJHG LQ RUGHU WR EH GLVWULEXWHG. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . %XWZLWK&&0 „ $&&0DSSOLFDWLRQLV³UHDOO\´GLVWULEXWHG „. &RXOGEHGHSOR\HGDQGUXQRQVHYHUDOGLVWULEXWHG QRGHVVLPXOWDQHRXVO\. „ $&25%$FRPSRQHQWFRXOGEH VHJPHQWHGLQWR. VHYHUDOFODVVHV. 7XHVGD\ -XQH WK . F

(21) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(22) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. :KDWLVWKH&&06SHFLILFDWLRQ" „ $EVWUDFW&RPSRQHQW0RGHO „. ([WHQVLRQVWR,'/DQGWKHREMHFWPRGHO. „ &RPSRQHQW,PSOHPHQWDWLRQ)UDPHZRUN „. &RPSRQHQW,PSOHPHQWDWLRQ'HILQLWLRQ/DQJXDJH &,'/

(23). „ &RPSRQHQW&RQWDLQHU3URJUDPPLQJ0RGHO &RPSRQHQWLPSOHPHQWHUDQGFOLHQWYLHZ „ ,QWHJUDWLRQZLWK6HFXULW\3HUVLVWHQFH7UDQVDFWLRQVDQG (YHQWV „. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . :KDWLVWKH&&06SHFLILFDWLRQ" „ 3DFNDJLQJDQGGHSOR\PHQWIDFLOLWLHV „ ,QWHURSHUDELOLW\ZLWK(-% „ &RPSRQHQW0HWDGDWD  0HWDPRGHO „. ,QWHUIDFH5HSRVLWRU\DQG02)H[WHQVLRQV. 7XHVGD\ -XQH WK . F

(24) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(25) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 5HODWLRQVEHWZHHQ 20*'HILQLWLRQ/DQJXDJHV „ 20*,'/[. 20* ,'/ [. „ 2EMHFWRULHQWHG FROODERUDWLRQ. H[WHQGV. „ LH GDWD W\SHV LQWHUIDFHV DQG YDOXH W\SHV. „ 20*,'/ „ &RPSRQHQWRULHQWHG FROODERUDWLRQ. H[WHQGV. „ LH FRPSRQHQW W\SHV KRPHV DQG HYHQW W\SHV. . „ 20*36'/ „ 3HUVLVWHQW VWDWH GHILQLWLRQ. 20*. „ LH >DEVWUDFW@ VWRUDJH W\SHV DQG KRPHV. 36'/. „ 20*&,'/. 20* ,'/. H[WHQGV. H[WHQGV. „ &RPSRQHQW LPSOHPHQWDWLRQ GHVFULSWLRQ. 20*. „ LH FRPSRVLWLRQV DQG VHJPHQWV. &,'/. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . &&08VHU5ROHV „ &RPSRQHQWGHVLJQHUV „ &RPSRQHQWFOLHQWV „ &RPSRVLWLRQGHVLJQHUV. aFRPSRQHQWLPSOHPHQWDWLRQGHVLJQHUV

(26). „ &RPSRQHQWLPSOHPHQWHUV „ &RPSRQHQWSDFNDJHUV „ &RPSRQHQWGHSOR\HUV „ &RPSRQHQWHQGXVHUV 7XHVGD\ -XQH WK . F

(27) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(28) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. &RPSRQHQW'HVLJQHUV „ 'HILQHFRPSRQHQWDQGKRPHW\SHVYLD. 20*,'/H[WHQVLRQV. „ 2XWSXW 20*,'/ILOHV „ &OLHQWVLGH20*,'/PDSSLQJ „ &OLHQWVLGHVWXEV „ ,QWHUIDFH5HSRVLWRU\HQWULHV „. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . &RPSRQHQW&OLHQWV „ &&0GHVLJQHGIRU&25%$FRPSOLDQFH „. &RPSRQHQWFOLHQWVFRXOGUXQRQ³OHJDF\´25%V. „ 9LHZFRPSRQHQWVDQGKRPHVYLDWKH. FOLHQWVLGH20*,'/PDSSLQJ. „ 8VHFOLHQWVLGHVWXEV „ &RXOGQDYLJDWHDQGLQWURVSHFWFRPSRQHQWVYLDWKH. JHQHULFCCMObject DQGCCMHome LQWHUIDFHV. 7XHVGD\ -XQH WK . F

(29) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(30) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. &RPSRVLWLRQ'HVLJQHUV „ 6SHFLI\SODWIRUPDQGODQJXDJHLQGHSHQGHQW. IHDWXUHVUHTXLUHGWRIDFLOLWDWHFRGHJHQHUDWLRQ &RPSRQHQW,PSOHPHQWDWLRQ'HILQLWLRQ/DQJXDJH &,'/

(31) „ 3HUVLVWHQFH6WDWH'HILQLWLRQ/DQJXDJH 36'/

(32) „. „ 2XWSXW /RFDOVHUYHUVLGH20*,'/PDSSLQJ „ &RPSRQHQWVNHOHWRQV „ &RPSRQHQWPHWDGDWDDV;0/GHVFULSWRUV „. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . &RPSRQHQW,PSOHPHQWHUV „ ,PSOHPHQWEXVLQHVVORJLFRSHUDWLRQV 'HILQHGE\ORFDOVHUYHUVLGH20*,'/LQWHUIDFHV „ &RXOGLQKHULWIURPJHQHUDWHG&,'/VNHOHWRQV „ &RXOGLPSOHPHQWORFDOFRQWDLQHUFDOOEDFNLQWHUIDFHV „ &RXOGLQYRNHORFDOFRQWDLQHULQWHUIDFHV „. „ 2XWSXW &RPSRQHQWELQDULHV „ ;0/FRPSRQHQWGHVFULSWRUVHQULFKHG „. 7XHVGD\ -XQH WK . F

(33) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(34) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. )URP&25%$&RPSRQHQW'HVLJQ WR3DFNDJLQJ 20* ,'/ 36'/ &,'/. &RPSRQHQW 'HVLJQHU. /RFDO VHUYHUVLGH 20* ,'/. 20* ,'/ 36'/ &,'/ &RPSLOHU. &OLHQWVLGH 20* ,'/. LPSOHPHQWV. ;0/ &RPSRQHQW 'HVFULSWRU. GHVFULEHV. %LQDU\ &RPSRQHQW &RPSRQHQW 3DFNDJHU. &RPSRQHQW &OLHQW 7XHVGD\ -XQH WK . &RPSRQHQW ,PSOHPHQWHU. 3URJUDPPLQJ /DQJXDJH 7RROV. 6WXEV 6NHOHWRQV. UHIHUV WR. &RPSRQHQW ([HFXWRU &RGH. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . &RPSRQHQW3DFNDJHUV „ 3URGXFHFRPSRQHQWSDFNDJHVFRQWDLQLQJ &RPSRQHQWELQDULHV „ 6RIWZDUH FRPSRQHQW;0/GHVFULSWRUV „ 'HIDXOWSURSHUW\;0/GHVFULSWRUV „ 3UREDEO\GRQHXVLQJDQLQWHUDFWLYHYLVXDOWRRO „. „ 2XWSXW FRPSRQHQWDUFKLYHILOH ]LSILOH

(35) „ ,I³QRIXUWKHUDVVHPEO\UHTXLUHG´VNLSWR. GHSOR\PHQW. 7XHVGD\ -XQH WK . F

(36) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(37) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. &RPSRQHQW$VVHPEOHUV „ 3URGXFHDVVHPEO\SDFNDJHVFRQWDLQLQJ &XVWRPL]HGFRPSRQHQWSDFNDJHV „ $VVHPEO\;0/GHVFULSWRUV „. „ &RPSRQHQW LQVWDQFHV DQG LQWHUFRQQHFWLRQV „ /RJLFDO GLVWULEXWLRQ SDUWLWLRQLQJ. „. 3UREDEO\GRQHXVLQJDQLQWHUDFWLYHYLVXDOWRRO. „ 2XWSXW FRPSRQHQWDVVHPEO\DUFKLYHILOH „ 3URFHVVPD\EHLWHUDWHGIXUWKHU 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . &RPSRQHQW'HSOR\HUV „ 'HSOR\PHQWLQVWDOODWLRQWRROWDNHVGHSOR\HU LQSXW. FRPSRQHQWDQGDVVHPEO\DUFKLYHV. „ $WWDFKYLUWXDOFRPSRQHQWORFDWLRQVWRSK\VLFDO. QRGHV. „ 6WDUWWKHGHSOR\PHQWSURFHVV „. ,QVWDOOVFRPSRQHQWVDQGDVVHPEOLHVWRSDUWLFXODUQRGHV RQWKHQHWZRUN. „ 2XWSXW LQVWDQWLDWHGDQGFRQILJXUHGFRPSRQHQWV. DQGDVVHPEOLHVQRZDYDLODEOH „. &&0DSSOLFDWLRQVGHSOR\HGLQ&&0FRQWDLQHUV. 7XHVGD\ -XQH WK . F

(38) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(39) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 7KH&&0%LJ3LFWXUH LPSOHPHQWHU. GHVLJQHUV. IDL/CIDL File User's Code. Programming Language Tools. Home Properties Component Properties. IDL/CIDL Default Properties Compiler Stubs, Skeletons Implementation. CORBA Component Package. Packaging Tool. CORBA Component. Assembly Tool. Package. Component Descriptor. SDFNDJHU softpkg Descriptor. User written file Compiler Generated files 7XHVGD\ -XQH WK . Component Assembly Package. DVVHPEOHU CORBA Component Package. Assembly Descriptor. Deployment Tool GHSOR\HU. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . 1H[W7XWRULDO6WHSV „ 'HILQLQJ&25%$FRPSRQHQWW\SHV „ $EVWUDFW &RPSRQHQW 0RGHO DQG 20* ,'/  H[WHQVLRQV. „ 3URJUDPPLQJ&25%$FRPSRQHQWFOLHQWV „ &OLHQWVLGH 20* ,'/ PDSSLQJ. „ ,PSOHPHQWLQJ&25%$FRPSRQHQWV „ &RPSRQHQW ,PSOHPHQWDWLRQ )UDPHZRUN &,)

(40) „ /RFDO VHUYHUVLGH 20* ,'/ PDSSLQJ „ &RPSRQHQW ,PSOHPHQWDWLRQ 'HILQLWLRQ /DQJXDJH &,'/

(41). „ 3XWWLQJ&25%$FRQWDLQHUVWRZRUN „ 3DFNDJLQJ&25%$FRPSRQHQWV „ $VVRFLDWHG ;0/ '7'V. „ 'HSOR\LQJ&25%$FRPSRQHQWDSSOLFDWLRQV „ &RPSRQHQW GHSOR\PHQW REMHFWV DQG ³EDVLF´ SURFHVV 7XHVGD\ -XQH WK . F

(42) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(43) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 'HILQLQJ&25%$&RPSRQHQWV. „ 7KH$EVWUDFW&RPSRQHQW0RGHO „ 20*,'/([WHQVLRQV „ 7KH'LQLQJ3KLORVRSKHUV([DPSOH. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . 7KH$EVWUDFW&RPSRQHQW0RGHO „ $OORZVFRPSRQHQWGHVLJQHUVWRFDSWXUHKRZ&25%$. FRPSRQHQWVDUHYLHZHGE\RWKHUFRPSRQHQWVDQGFOLHQWV „ :KDW D FRPSRQHQW RIIHUV WR RWKHU FRPSRQHQWV „ :KDW D FRPSRQHQW UHTXLUHV IURP RWKHU FRPSRQHQWV „ :KDW FROODERUDWLRQ PRGHV DUH XVHG EHWZHHQ FRPSRQHQWV „ „. 6\QFKURQRXV YLD RSHUDWLRQ LQYRFDWLRQ $V\QFKURQRXV YLD HYHQW QRWLILFDWLRQ. „ :KLFK FRPSRQHQW. SURSHUWLHV DUH FRQILJXUDEOH. „ :KDW WKH EXVLQHVV OLIH F\FOH RSHUDWLRQV DUH LH. KRPH

(44). „ ([SUHVVHGYLD20*,'/H[WHQVLRQV „ 6\QWDFWLF FRQVWUXFWLRQ IRU ZHOO NQRZQ GHVLJQ SDWWHUQV „ 0DSSHG WR 20* ,'/ LQWHUIDFHV IRU FOLHQWV DQG LPSOHPHQWHUV 7XHVGD\ -XQH WK . F

(45) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(46) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. :KDWLVD&25%$&RPSRQHQW" „ component LVDQHZ&25%$PHWD W\SH ([WHQVLRQRIObject ZLWKVRPHFRQVWUDLQWV

(47) „ +DVDQLQWHUIDFHDQGDQREMHFWUHIHUHQFH „ $OVRDVW\OL]HGXVHRI&25%$LQWHUIDFHVREMHFWV „. „ 3URYLGHVFRPSRQHQWIHDWXUHV DOVRQDPHG SRUWV

(48) „ &RXOGLQKHULWIURPDVLQJOHFRPSRQHQWW\SH „ &RXOG supports PXOWLSOHLQWHUIDFHV „ (DFKFRPSRQHQWLQVWDQFHLVFUHDWHGDQG. PDQDJHGE\DXQLTXHFRPSRQHQWKRPH. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . &RPSRQHQW)HDWXUHV „ $WWULEXWHV. FRQILJXUDEOHSURSHUWLHV. „ )DFHWV. RIIHUHGRSHUDWLRQLQWHUIDFHV. „ 5HFHSWDFOHV. UHTXLUHGRSHUDWLRQLQWHUIDFHV. „ (YHQWVRXUFHV SURGXFHGHYHQWV „ (YHQWVLQNV. FRQVXPHGHYHQWV. „ 1DYLJDWLRQDQGLQWURVSHFWLRQVXSSRUWHG 7XHVGD\ -XQH WK . F

(49) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(50) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. $&25%$&RPSRQHQW Component interface. OFFERED. Receptacles My Business Component. Event sinks. Event sources. REQUIRED. Facets. Attributes 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . %XLOGLQJ&&0$SSOLFDWLRQV $VVHPEOLQJ&25%$&RPSRQHQW,QVWDQFHV. 7XHVGD\ -XQH WK . F

(51) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(52) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. &RPSRQHQW$WWULEXWHV „ 1DPHGFRQILJXUDEOHSURSHUWLHV. 9LWDONH\IRUVXFFHVVIXOUHXVDELOLW\ „ ,QWHQGHGIRUFRPSRQHQWFRQILJXUDWLRQ „. „ HJ RSWLRQDO EHKDYLRUV PRGDOLW\ UHVRXUFH KLQWV HWF. &RXOGUDLVHH[FHSWLRQV „ ([SRVHGWKURXJKDFFHVVRUV DQGPXWDWRUV „. „ &RXOGEHFRQILJXUHG. %\YLVXDOSURSHUW\VKHHWPHFKDQLVPVLQDVVHPEO\RU GHSOR\PHQWHQYLURQPHQWV „ %\KRPHVRUGXULQJLPSOHPHQWDWLRQLQLWLDOL]DWLRQ „ 3RWHQWLDOO\UHDGRQO\ WKHUHDIWHU „. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . &RPSRQHQW)DFHWV „ 'LVWLQFWQDPHGLQWHUIDFHVWKDWSURYLGHWKH. FRPSRQHQW¶VDSSOLFDWLRQIXQFWLRQDOLW\WRFOLHQWV. „ (DFKIDFHWHPERGLHVDYLHZRIWKHFRPSRQHQW. FRUUHVSRQGVWRDUROHLQZKLFKDFOLHQWPD\DFW UHODWLYHO\WRWKHFRPSRQHQW. „ $IDFHWUHSUHVHQWVWKHFRPSRQHQWLWVHOIQRWD. VHSDUDWHWKLQJFRQWDLQHGE\WKHFRPSRQHQW. „ )DFHWVKDYHLQGHSHQGHQWREMHFWUHIHUHQFHV. 7XHVGD\ -XQH WK . F

(53) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(54) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. &RPSRQHQW5HFHSWDFOHV „ 'LVWLQFWQDPHGFRQQHFWLRQSRLQWVIRUSRWHQWLDO. FRQQHFWLYLW\. $ELOLW\WRVSHFLDOL]HE\GHOHJDWLRQFRPSRVHIXQFWLRQV „ 7KHERWWRPRIWKH/HJRLI\RXZLOO „. „ 6WRUHDVLPSOHUHIHUHQFHRUPXOWLSOHUHIHUHQFHV „. %XWQRWLQWHQGHGDVDUHODWLRQVKLSVHUYLFH. „ &RQILJXUDWLRQ. 6WDWLFDOO\GXULQJLQLWLDOL]DWLRQVWDJHRUDVVHPEO\VWDJH „ '\QDPLFDOO\PDQDJHGDWUXQWLPHWRRIIHULQWHUDFWLRQV ZLWKFOLHQWVRURWKHUFRPSRQHQWV HJFDOOEDFN

(55) „. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . &RPSRQHQW(YHQWV „ 6LPSOHSXEOLVKVXEVFULEHHYHQWPRGHO ³SXVK´PRGHRQO\ „ 6RXUFHV NLQGV

(56) DQGVLQNV „. „ (YHQWVDUHYDOXHW\SHV 'HILQHGZLWKWKHQHZeventtype PHWDW\SH „ valuetype VSHFLDOL]DWLRQIRUFRPSRQHQWHYHQWV „. 7XHVGD\ -XQH WK . F

(57) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(58) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. &RPSRQHQW(YHQW6RXUFHV „ 1DPHGFRQQHFWLRQSRLQWVIRUHYHQWSURGXFWLRQ „. 3XVKDVSHFLILHGeventtype. „ 7ZRNLQGV3XEOLVKHU (PLWWHU. publishes PXOWLSOHFOLHQWVXEVFULEHUV „ emits RQO\RQHFOLHQWFRQQHFWHG „. „ &OLHQWVXEVFULEHVRUFRQQHFWVWRGLUHFWO\. FRPSRQHQWHYHQWVRXUFH. „ &RQWDLQHUPHGLDWHVDFFHVVWR &RV1RWLILFDWLRQ. FKDQQHOV „. VFDODELOLW\TXDOLW\RIVHUYLFHWUDQVDFWLRQDOHWF. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . &RPSRQHQW(YHQW6LQNV „ 1DPHGFRQQHFWLRQSRLQWVLQWRZKLFKHYHQWVRID. VSHFLILFW\SHPD\EHSXVKHG. „ 6XEVFULSWLRQWRHYHQWVRXUFHV „. 3RWHQWLDOO\PXOWLSOH QWR

(59). „ 1RGLVWLQFWLRQEHWZHHQHPLWWHUDQGSXEOLVKHU „. %RWKSXVKLQHYHQWVLQNV. 7XHVGD\ -XQH WK . F

(60) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(61) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. :KDWLVD&25%$&RPSRQHQW+RPH" „ 0DQDJHVDXQLTXHFRPSRQHQWW\SH 0RUHWKDQRQHKRPHW\SHFDQPDQDJHWKHVDPH FRPSRQHQWW\SH „ %XWDFRPSRQHQWLQVWDQFHLVPDQDJHGE\DVLQJOH KRPHLQVWDQFH „. „ home LVDQHZ&25%$PHWD W\SH +RPHGHILQLWLRQLVGLVWLQFWIURPFRPSRQHQWRQH „ +DVDQLQWHUIDFHDQGDQREMHFWUHIHUHQFH „. „ &RXOGLQKHULWIURPDVLQJOHKRPHW\SH „ &RXOG supports PXOWLSOHLQWHUIDFHV „ ,VLQVWDQWLDWHGDWGHSOR\PHQWWLPH 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . $&25%$&RPSRQHQW+RPH Home interface. MyBusinessHome c1 …. cN. 7XHVGD\ -XQH WK . F

(62) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(63) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. &RPSRQHQW+RPH)HDWXUHV „ $OORZVOLIHF\FOHFKDUDFWHULVWLFVRUNH\W\SHWR. YDU\HYROYHZLWKRXWFKDQJLQJFRPSRQHQW GHILQLWLRQ. „ 2SWLRQDOXVHRI primarykey IRUEXVLQHVV. FRPSRQHQWLGHQWLW\DQGSHUVLVWHQF\SULPDU\NH\. „ 6WDQGDUG factory DQGfinder EXVLQHVVORJLF. RSHUDWLRQV. „ ([WHQVLEOHZLWKDUELWUDU\XVHU GHILQHGEXVLQHVV. ORJLFRSHUDWLRQV. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . 3ULPDU\.H\V „ 9DOXHVH[SRVHGWRFOLHQWVWRFUHDWHILQGDQGGHVWUR\. FRPSRQHQWLQVWDQFHV. „ 8QLTXHO\ LGHQWLILHV D FRPSRQHQW LQVWDQFH ZLWKLQ D KRPH „ $VVLJQHG DW FUHDWLRQ WLPH RU LQ SUHH[LVWLQJ GDWDEDVH „ 0XVW EH D YDOXH W\SH GHULYHG IURP. Components::PrimaryKeyBase. HPSW\ DEVWUDFW

(64). „ $VVRFLDWLRQEHWZHHQDSULPDU\NH\DQGDFRPSRQHQWLV. GHILQHGDQGPDLQWDLQHGE\LWVKRPH. „ 'LIIHUHQW KRPH W\SHV PD\ GHILQH GLIIHUHQW NH\ W\SHV RU QR NH\

(65) IRU WKH VDPH FRPSRQHQW W\SH. „ 3ULPDU\ NH\ LV QRW QHFHVVDULO\ D SDUW RI WKH FRPSRQHQW¶V VWDWH. 7XHVGD\ -XQH WK . F

(66) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(67) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 2WKHU20*,'/([WHQVLRQV „ 7KHQHZimport NH\ZRUG ,PSRUWDWLRQRI20*,'/VFRSHV „ 7RUHSODFH#include „. „ 7KHQHZtypeprefix NH\ZRUG „. 7RUHSODFH#pragma prefix. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . 7KH'LQLQJ3KLORVRSKHUV([DPSOH 7KLQNLQJ +XQJU\ 6WDUYLQJ (DWLQJ 'HDG. 7KLQNLQJ +XQJU\ 6WDUYLQJ (DWLQJ 'HDG. )RUN 'HVFDUWHV .DQW. )RUN )RUN. 7KLQNLQJ +XQJU\ 6WDUYLQJ (DWLQJ 'HDG. $ULVWRWOH. 7XHVGD\ -XQH WK . F

(68) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(69) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 'LQLQJ3KLORVRSKHUVDV &25%$&RPSRQHQWV. Component Base ref. Facet Receptacle Event Sink. Philosopher QDPH. Fork. Event Source. .DQW. Fork Philosopher QDPH. Fork 'HVFDUWHV. Philosopher QDPH. $ULVWRWOH. 7XHVGD\ -XQH WK . Observer. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . 20*,'/IRU'LQLQJ3KLORVRSKHUV // Importation of the Components module // when access to OMG IDL definitions contained // into the CCM's Components module is required.. import Components; module DiningPhilosophers {. // Sets the prefix of all these OMG IDL definitions. // Prefix generated Java mapping classes.. typeprefix DiningPhilosophers "omg.org"; . . . }; 7XHVGD\ -XQH WK . F

(70) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(71) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 7KH)RUN,QWHUIDFH exception InUse {}; interface Fork { void get() raises (InUse); void release(); };. Fork Manager. // The fork component. component ForkManager { // The fork facet used by philosophers. provides Fork the_fork; }; // Home for instantiating ForkManager components. home ForkHome manages ForkManager {}; 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . 7KH)RUN0DQDJHU&RPSRQHQW exception InUse {}; interface Fork { void get() raises (InUse); void release(); };. Fork Manager. // The fork component. component ForkManager { // The fork facet used by philosophers. provides Fork the_fork; }; // Home for instantiating ForkManager components. home ForkHome manages ForkManager {}; 7XHVGD\ -XQH WK . F

(72) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(73) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 7KH)RUN0DQDJHU&RPSRQHQW)DFHW exception InUse {}; interface Fork { void get() raises (InUse); void release(); };. Fork Manager. // The fork component. component ForkManager { // The fork facet used by philosophers. provides Fork the_fork; }; // Home for instantiating ForkManager components. home ForkHome manages ForkManager {}; 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. 7KH)RUN0DQDJHU+RPH. . ForkHome. exception InUse {}; interface Fork { void get() raises (InUse); void release(); };. Fork Manager. // The fork component. component ForkManager { // The fork facet used by philosophers. provides Fork the_fork; }; // Home for instantiating ForkManager components. home ForkHome manages ForkManager {}; 7XHVGD\ -XQH WK . F

(74) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(75) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 7KH3KLORVRSKHU6WDWH7\SHV enum PhilosopherState { EATING, THINKING, HUNGRY, STARVING, DEAD }; eventtype { public public public public public };. Philosopher QDPH. ;;;. StatusInfo string name; PhilosopherState state; unsigned long ticks_since_last_meal; boolean has_left_fork; boolean has_right_fork;. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . 7KH3KLORVRSKHU&RPSRQHQW component Philosopher { attribute string name;. // The left fork receptacle. uses Fork left;. Philosopher QDPH. ;;;. // The right fork receptacle. uses Fork right; // The status info event source. publishes StatusInfo info; }; home PhilosopherHome manages Philosopher { factory new(in string name); }; 7XHVGD\ -XQH WK . F

(76) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(77) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 7KH3KLORVRSKHU&RPSRQHQW5HFHSWDFOHV component Philosopher { attribute string name;. // The left fork receptacle. uses Fork left;. Philosopher QDPH. ;;;. // The right fork receptacle. uses Fork right; // The status info event source. publishes StatusInfo info; }; home PhilosopherHome manages Philosopher { factory new(in string name); }; 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . 7KH3KLORVRSKHU&RPSRQHQW5HFHSWDFOHV component Philosopher { attribute string name;. // The left fork receptacle. uses Fork left;. Philosopher QDPH. ;;;. // The right fork receptacle. uses Fork right; // The status info event source. publishes StatusInfo info; }; home PhilosopherHome manages Philosopher { factory new(in string name); }; 7XHVGD\ -XQH WK . F

(78) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(79) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 7KH3KLORVRSKHU&RPSRQHQW(YHQW6RXUFH component Philosopher { attribute string name;. // The left fork receptacle. uses Fork left;. Philosopher QDPH. ;;;. // The right fork receptacle. uses Fork right; // The status info event source. publishes StatusInfo info; }; home PhilosopherHome manages Philosopher { factory new(in string name); }; 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . 7KH3KLORVRSKHU+RPH PhilosopherHome component Philosopher { attribute string name;. // The left fork receptacle. uses Fork left;. Philosopher QDPH. ;;;. // The right fork receptacle. uses Fork right; // The status info event source. publishes StatusInfo info; }; home PhilosopherHome manages Philosopher { factory new(in string name); }; 7XHVGD\ -XQH WK . F

(80) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(81) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 7KH2EVHUYHU&RPSRQHQW. component Observer { // The status info sink port. consumes StatusInfo info; };. Observer. // Home for instantiating observers. home ObserverHome manages Observer {};. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . 7KH2EVHUYHU&RPSRQHQW. component Observer { // The status info sink port. consumes StatusInfo info; };. Observer. // Home for instantiating observers. home ObserverHome manages Observer {};. 7XHVGD\ -XQH WK . F

(82) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(83) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 7KH2EVHUYHU+RPH Observer Home. component Observer { // The status info sink port. consumes StatusInfo info; };. Observer. // Home for instantiating observers. home ObserverHome manages Observer {};. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . 3URJUDPPLQJ&25%$&RPSRQHQW&OLHQWV. „ 7KH&OLHQW6LGH20*,'/0DSSLQJ „ 7KH&OLHQW3URJUDPPLQJ0RGHO „ &OLHQW8VH([DPSOHV. 7XHVGD\ -XQH WK . F

(84) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(85) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 7KH&OLHQW6LGH20*,'/0DSSLQJ „ (DFK20*,'/FRQVWUXFWLRQKDVDQHTXLYDOHQW. LQWHUPVRI20*,'/. „ &RPSRQHQWDQGKRPHW\SHVDUHYLHZHGE\FOLHQWV. WKURXJKWKH&&0FOLHQW VLGH20*,'/PDSSLQJ. „ 3HUPLWVQRFKDQJHLQFOLHQWSURJUDPPLQJ. ODQJXDJHPDSSLQJ „. &OLHQWVVWLOOXVHWKHLUIDYRULWH,'/RULHQWHGWRROVOLNH &25%$VWXEJHQHUDWRUVHWF. „ &OLHQWVGR127KDYHWREH³FRPSRQHQW DZDUH´ „. 7KH\MXVWLQYRNHLQWHUIDFHRSHUDWLRQV. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . 7KH&OLHQW6LGH20*,'/0DSSLQJ &RPSRQHQW &OLHQW. &RPSRQHQW 'HVLJQHU. &OLHQW $SSOLFDWLRQ. 8VHU ZULWWHQ &RPSLOHU *HQHUDWHG ILOHV. 20* ,'/ . XVHV 20* ,'/  &RPSLOHU. &OLHQWVLGH 20* ,'/ [. LPSOHPHQWHG E\ &OLHQW 6WXE 7XHVGD\ -XQH WK . F

(86) 3KLOLSSH0HUOH/,)/ ,15,$. 25%. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. Component . .

(87) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 0DLQ&OLHQW6LGH20*,'/0DSSLQJ5XOHV „ $FRPSRQHQWW\SHLVPDSSHGWRDQLQWHUIDFH. LQKHULWLQJIURPComponents::CCMObject. „ )DFHWVDQGHYHQWVLQNVDUHPDSSHGWRDQ. RSHUDWLRQIRUREWDLQLQJWKHDVVRFLDWHGUHIHUHQFH. „ 5HFHSWDFOHVDUHPDSSHGWRRSHUDWLRQVIRU. FRQQHFWLQJGLVFRQQHFWLQJDQGJHWWLQJWKH DVVRFLDWHGUHIHUHQFH V

(88). „ (YHQWVRXUFHVDUHPDSSHGWRRSHUDWLRQVIRU. VXEVFULELQJDQGXQVXEVFULELQJWRSURGXFHGHYHQWV. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . 0DLQ&OLHQW6LGH20*,'/0DSSLQJ5XOHV „ $QHYHQWW\SHLVPDSSHGWR „. $YDOXHW\SH. „ LQKHULWLQJ IURP. „. Components::EventBase. $FRQVXPHULQWHUIDFH „ LQKHULWLQJ IURP. Components::EventConsumerBase. „ $KRPHW\SHLVPDSSHGWRWKUHHLQWHUIDFHV „. 2QHIRUH[SOLFLWRSHUDWLRQVXVHUGHILQHG „ LQKHULWLQJ IURP. Components::CCMHome. 2QHIRULPSOLFLWRSHUDWLRQVJHQHUDWHG „ 2QHLQKHULWLQJIURPERWKSUHYLRXVLQWHUIDFHV „. 7XHVGD\ -XQH WK . F

(89) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(90) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. &OLHQW6LGH0DSSLQJIRU )RUN0DQDJHU &RPSRQHQW component ForkManager { provides Fork the_fork; };. Fork Manager. ,VPDSSHGWR interface ForkManager : ::Components::CCMObject { Fork provide_the_fork(); };. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. &OLHQW6LGH0DSSLQJ IRU)RUN+RPH. . ForkHome. home ForkHome manages ForkManager {}; Fork Manager ,VPDSSHGWR interface ForkHomeExplicit : ::Components::CCMHome {}; interface ForkHomeImplicit : ::Components::KeylessCCMHome { ForkManager create(); }; interface ForkHome : ForkHomeExplicit, ForkHomeImplicit {}; 7XHVGD\ -XQH WK . F

(91) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(92) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. &OLHQW6LGH0DSSLQJIRU 6WDWXV,QIR (YHQW7\SH eventtype StatusInfo {. . .}; ,VPDSSHGWR valuetype StatusInfo : ::Components::EventBase { . . . }; interface StatusInfoConsumer : ::Components::EventConsumerBase { void push_StatusInfo(in StatusInfo the_StatusInfo); }; 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . &OLHQW6LGH0DSSLQJ IRU2EVHUYHU&RPSRQHQW component Observer { consumes StatusInfo info; };. Observer. ,VPDSSHGWR interface Observer : ::Components::CCMObject { StatusInfoConsumer get_consumer_info(); };. 7XHVGD\ -XQH WK . F

(93) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(94) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. &OLHQW6LGH0DSSLQJ IRU2EVHUYHU+RPH home ObserverHome manages Observer {};. Observer Home. ,VPDSSHGWR. Observer. interface ObserverHomeExplicit : ::Components::CCMHome {}; interface ObserverHomeImplicit : ::Components::KeylessCCMHome {. Observer create(); };. interface ObserverHome : ObserverHomeExplicit, ObserverHomeImplicit {}; 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . &OLHQW6LGH0DSSLQJ IRU3KLORVRSKHU&RPSRQHQW component Philosopher { attribute string name; uses Fork left; uses Fork right; publishes StatusInfo info; }; ,VPDSSHGWR. Philosopher QDPH. ;;;. interface Philosopher : ::Components::CCMObject { attribute string name; .../... 7XHVGD\ -XQH WK . F

(95) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(96) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. &OLHQW6LGH0DSSLQJ IRU3KLORVRSKHU&RPSRQHQW. Philosopher QDPH. ;;;. void connect_left(in Fork cnx) raises(…); Fork disconnect_left() raises(…); Fork get_connection_left(); void connect_right(in Fork cnx) raises (…); Fork disconnect_right() raises (…); Fork get_connection_right(); Components::Cookie subscribe_info( in StatusInfoConsumer consumer) raises(…);. StatusInfoConsumer unsubscribe_info( in Components::Cookie ck) raises(…); }; 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. &OLHQW6LGH0DSSLQJ IRU3KLORVRSKHU+RPH. . PhilosopherHome. home PhilosopherHome. Philosopher. manages Philosopher { };. factory new(in string name); ,VPDSSHGWR. QDPH. ;;;. interface PhilosopherHomeExplicit : ::Components::CCMHome {. Philosopher new(in string name); }; interface PhilosopherHomeImplicit : ::Components::KeylessCCMHome {. Philosopher create(); };. interface PhilosopherHome : PhilosopherHomeExplicit, PhilosopherHomeImplicit {}; 7XHVGD\ -XQH WK . F

(97) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(98) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 7KH&OLHQW3URJUDPPLQJ0RGHO „ &RPSRQHQWDZDUHDQGXQDZDUHFOLHQWV „ &OLHQWVVHHWZR GHVLJQSDWWHUQV „. )DFWRU\ ± &OLHQW ILQGV D KRPH DQG XVHV LW WR FUHDWH D QHZ FRPSRQHQW LQVWDQFH. „. )LQGHU  &OLHQW VHDUFKHV DQ H[LVWLQJ FRPSRQHQW LQVWDQFH WKURXJK 1DPH 6HUYLFH 7UDGHU 6HUYLFH RU KRPH ILQGHU RSHUDWLRQV. „ 2SWLRQDOO\GHPDUFDWLRQRIWUDQVDFWLRQV „ &RXOGHVWDEOLVKLQLWLDOVHFXULW\ FUHGHQWLDOV „ ,QYRNHVRSHUDWLRQVRQFRPSRQHQWLQVWDQFHV „. 7KRVH GHILQHG E\ WKH FOLHQWVLGH PDSSLQJ. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . &25%$&RPSRQHQW+RPH)LQGHU „ $EURNHUDJHRIKRPHVWRFOLHQWV +RPHLPSOHPHQWDWLRQVUHJLVWHUZLWKKRPHILQGHU „ &OLHQWVUHTXHVWKRPHVIURPKRPHILQGHU „. „ +RPHILQGHUPDNHVGHWHUPLQDWLRQRIZKDWLVWKH. ³EHVW´KRPHIRUDFOLHQWEDVHGRQWKHFOLHQW¶V UHTXHVWDQGDQ\DYDLODEOHHQYLURQPHQWDORU FRQILJXUDWLRQGDWD. „ $KRPHILQGHUFRQVWLWXWHVDGRPDLQRI. KRPHFRQWDLQHULPSOHPHQWDWLRQYLVLELOLW\. 7XHVGD\ -XQH WK . F

(99) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(100) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 8VLQJ&25%$&RPSRQHQWV ZLWK20*,'/VFULSW # Obtains the component home finder. chf = CORBA.ORB.resolve_initial_references (“ComponentHomeFinder”) # Finds a home by its home type. forkHome = chf.find_home_by_type(ForkHome.id()) # Creates a fork manager component. forkManager = forkHome.create() # Obtains the fork facet. fork = forkManager.provide_the_fork () # Uses the fork facet. fork.get() . . . . . . .. fork.release() 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . &RQQHFWLQJ&25%$&RPSRQHQWV ZLWK20*,'/VFULSW # Obtaining CORBA components to be interconnected. kant = Philosopher(“corbaname:…”) observer = Observer(“corbaname:…”). Philosopher QDPH. .DQW. Observer. # Connects kant and observer. ck = kant.subscribe_info(observer.get_consumer_info()) . . . . . . # Disconnects kant and observer. kant.unsubscribe_info(ck) 7XHVGD\ -XQH WK . F

(101) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(102) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 1DYLJDWLRQDQG,QWURVSHFWLRQ „ 1DYLJDWLRQIURPDQ\IDFHWWRFRPSRQHQWEDVH. UHIHUHQFHZLWK CORBA::Object::get_component

(103) 5HWXUQVQLOLIWDUJHWLVQ¶WDFRPSRQHQWIDFHW „ 5HWXUQVFRPSRQHQWUHIHUHQFHRWKHUZLVH „. „ 1DYLJDWLRQIURPFRPSRQHQWEDVHUHIHUHQFHWR. DQ\IDFHWYLDJHQHUDWHGIDFHW VSHFLILFRSHUDWLRQV. „ 1DYLJDWLRQDQGLQWURVSHFWLRQFDSDELOLWLHVSURYLGHG. E\ CCMObject. 9LDWKHNavigation LQWHUIDFHIRUIDFHWV „ 9LDWKHReceptacles LQWHUIDFHIRUUHFHSWDFOHV „ 9LDWKHEvents LQWHUIDFHIRUHYHQWSRUWV „. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . ,PSOHPHQWLQJ&25%$&RPSRQHQWV „ &RPSRQHQW,PSOHPHQWDWLRQ)UDPHZRUN &,)

(104) „ /RFDO6HUYHU6LGH20*,'/0DSSLQJ. 7XHVGD\ -XQH WK . F

(105) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(106) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. &RPSRQHQW,PSOHPHQWDWLRQ)UDPHZRUN „ &,)GHILQHVDSURJUDPPLQJPRGHOIRU. FRQVWUXFWLQJFRPSRQHQWLPSOHPHQWDWLRQV „. +RZFRPSRQHQWVVKRXOGEHLPSOHPHQWHG. „ )DFLOLWDWHVFRPSRQHQWLPSOHPHQWDWLRQ „. ³RQO\´EXVLQHVVORJLFVKRXOGEHLPSOHPHQWHG „ 1RW DFWLYDWLRQ LGHQWLI\ SRUW PDQDJHPHQW DQG LQWURVSHFWLRQ. !/RFDOVHUYHUVLGH20*,'/PDSSLQJ „ ,QWHUDFWLRQV EHWZHHQ LPSOHPHQWDWLRQV DQG FRQWDLQHUV. „ 0DQDJHVVHJPHQWDWLRQDQGSHUVLVWHQF\. !&RPSRQHQW,PSOHPHQWDWLRQ'HILQLWLRQ/DQJXDJH. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . &RPSRQHQW,PSOHPHQWDWLRQ)UDPHZRUN WR&RPSRQHQW6NHOHWRQ*HQHUDWLRQ 20* ,'/ . Component executor. 20* &,'/. 6HUYHU6LGH 0DSSLQJ. ,V PDSSHG WR. 7XHVGD\ -XQH WK . F

(107) 3KLOLSSH0HUOH/,)/ ,15,$. Skeletons managing ports, life cycle, persistency, etc. + GIOP/IIOP. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(108) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. ([HFXWRUVDQG+RPH([HFXWRUV „ 3URJUDPPLQJDUWLIDFWVLPSOHPHQWLQJD. FRPSRQHQW¶VRUFRPSRQHQWKRPH¶VEHKDYLRU „. /RFDO&25%$REMHFWVZLWKLQWHUIDFHVGHILQHG E\WKHORFDOVHUYHUVLGH20*,'/PDSSLQJ. „ &RPSRQHQWH[HFXWRUVFRXOGEHPRQROLWKLF „. $OOFRPSRQHQWDWWULEXWHVVXSSRUWHGLQWHUIDFHVIDFHW RSHUDWLRQVDQGHYHQWVLQNVLPSOHPHQWHGE\RQHFODVV. „ &RPSRQHQWH[HFXWRUVFRXOGDOVREHVHJPHQWHG „ „. &RPSRQHQWIHDWXUHVVSOLWLQWRVHYHUDOFODVVHV ,PSOHPHQWVExecutorLocator LQWHUIDFH. „ +RPHH[HFXWRUVDUHDOZD\VPRQROLWKLF 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . ([HFXWRUV$UH+RVWHGE\&RQWDLQHU „ &RQWDLQHULQWHUFHSWVLQYRFDWLRQVRQH[HFXWRUV. IRUPDQDJLQJDFWLYDWLRQVHFXULW\WUDQVDFWLRQV SHUVLVWHQF\DQGVR. „ &RPSRQHQWH[HFXWRUVPXVWLPSOHPHQWDORFDO. FDOOEDFNOLIHF\FOHLQWHUIDFHXVHGE\WKHFRQWDLQHU SessionComponent IRUWUDQVLHQWFRPSRQHQWV „ EntityComponent IRUSHUVLVWHQWFRPSRQHQWV „. „ &RPSRQHQWH[HFXWRUVFRXOGLQWHUDFWZLWKWKHLU. FRQWDLQHUVDQGFRQQHFWHGFRPSRQHQWVWKURXJK DORFDOFRQWH[WLQWHUIDFH. 7XHVGD\ -XQH WK . F

(109) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(110) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. $0RQROLWKLF&RPSRQHQW([HFXWRU &RPSRQHQWFRQWDLQHU. 0RQROLWKLFH[HFXWRU. &RPSRQHQW VSHFLILF FRQWH[W. &RQWDLQHU FRQWH[W. Component-oriented context interface Container-oriented context interface Context use Container interposition. Main component executor interface Facet or event sink executor interface SessionComponent or EntityComponent 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . $6HJPHQWHG&RPSRQHQW([HFXWRU &RPSRQHQWFRQWDLQHU 0DLQVHJPHQW. 6HJ. 6HJ. 6HJ. &RPSRQHQW VSHFLILF FRQWH[W. &RQWDLQHU FRQWH[W. ExecutorLocator 7XHVGD\ -XQH WK . F

(111) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(112) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 0RQROLWKLFYHUVXV6HJPHQWHG$SSURDFK „ 0RQROLWKLFDSSURDFK 3RRUOLIHF\FOHFRQWURORIIDFHWH[HFXWRUV „ %XWVLPSOLFLW\RILPSOHPHQWDWLRQ „ 6KRXOGEHXVHGIRUKDQGFRGHGLPSOHPHQWDWLRQ „. „ 6HJPHQWHGDSSURDFK )LQHJUDLQOLIHF\FOHFRQWURORIIDFHWH[HFXWRUV „ %XWFRPSOH[LW\RILPSOHPHQWDWLRQ „ 6KRXOGEHXVHGIRU&,'/EDVHGLPSOHPHQWDWLRQ „. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . 7KH6HUYHU6LGH20*,'/0DSSLQJ &RPSRQHQW &OLHQW &OLHQW $SSOLFDWLRQ. &RPSRQHQW 'HVLJQHU. &RPSRQHQW ,PSOHPHQWHU. 20* ,'/ . &RPSRQHQW ([HFXWRU. XVHV. LPSOHPHQWHG E\ 20* ,'/  &RPSLOHU. &OLHQWVLGH 20* ,'/ [. 8VHU ZULWWHQ &RPSLOHU *HQHUDWHG ILOHV. LPSOHPHQWHG E\. 7XHVGD\ -XQH WK . F

(113) 3KLOLSSH0HUOH/,)/ ,15,$. /RFDO VHUYHUVLGH 20* ,'/ [. GHOHJDWHV WR. &OLHQW 6WXE. 25%. &RPSRQHQW 6NHOHWRQ. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(114) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 0DLQ6HUYHU6LGH20*,'/0DSSLQJ5XOHV „ $FRPSRQHQWW\SHLVPDSSHGWRWKUHHORFDOLQWHUIDFHV „ 7KH PDLQ FRPSRQHQW H[HFXWRU LQWHUIDFH „ ,QKHULWLQJ IURP. Components::EnterpriseComponent. „ 7KH PRQROLWKLF FRPSRQHQW H[HFXWRU LQWHUIDFH „ 2SHUDWLRQV WR REWDLQ IDFHW H[HFXWRUV DQG UHFHLYH HYHQWV. „ 7KH FRPSRQHQW VSHFLILF FRQWH[W LQWHUIDFH „ 2SHUDWLRQV WR DFFHVV FRPSRQHQW UHFHSWDFOHV DQG HYHQW VRXUFHV. „ $KRPHW\SHLVPDSSHGWRWKUHHORFDOLQWHUIDFHV „ 2QH IRU H[SOLFLW RSHUDWLRQV XVHUGHILQHG „ ,QKHULWLQJ IURP. Components::HomeExecutorBase. „ 2QH IRU LPSOLFLW RSHUDWLRQV JHQHUDWHG „ 2QH LQKHULWLQJ IURP ERWK SUHYLRXV LQWHUIDFHV. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . ,PSOHPHQWLQJ&25%$&RPSRQHQWV „ 'LQLQJ3KLORVRSKHUV([DPSOH „ ,Q-DYD „ ,Q&. 7XHVGD\ -XQH WK . F

(115) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(116) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. ,PSOHPHQWDWLRQ5XOHV „ *HQHUDO. /RFDOVHUYHUVLGHHTXLYDOHQW,'/LQWHUIDFHVDUH LPSOHPHQWHGDFFRUGLQJWRWKHXVHGODQJXDJHPDSSLQJ „ &KRLFHEHWZHHQPRQROLWKLFDQGORFDWRULPSOHPHQWDWLRQ „ HQWU\SRLQW IDFWRU\IRUHDFKKRPHW\SH „. „ -DYDVSHFLILF. ([HFXWRUFODVVHVLQKHULWIURP org.omg.CORBA.LocalObject „ (QWU\SRLQWV VWDWLFPHWKRGVRIKRPHH[HFXWRUFODVVHV „. „ &VSHFLILF „. (QWU\SRLQWV H[WHUQ³&´IXQFWLRQVWKDWFDQEHIRXQG LQVKDUHGOLEUDU\. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU)RUN0DQDJHU &RPSRQHQW. . Fork Manager. )RUN0DQDJHU. GHSHQGV RQ XVHG VWUDWHJ\ )RUN. 6HVVLRQ&RPSRQHQW. &&0B)RUN. ([HFXWRU. &&0B)RUN0DQDJHUB&RQWH[W. 6HVVLRQ&RQWH[W. 7XHVGD\ -XQH WK . F

(117) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(118) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU)RUN0DQDJHU &RPSRQHQW. Fork. // Executor interface for the the_fork facet. local interface CCM_Fork : Fork { // No declarations added. }; // Component-specific context interface. local interface CCM_ForkManager_Context : // Container context interface. ::Components::CCMContext { // Empty because no receptacles or event sources. };. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. )RUN)DFHW,PSOHPHQWDWLRQLQ-DYD -XVW%XVLQHVV2SHUDWLRQV. . Fork. public class ForkImpl extends org.omg.CORBA.LocalObject implements CCM_Fork { private boolean available_ = true; public void get() throws InUse { // Check if there is no current philosopher. if (!available_) throw new InUse(); available_ = false; } public void release() { available_ = true; } } 7XHVGD\ -XQH WK . F

(119) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(120) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. )RUN)DFHW,PSOHPHQWDWLRQLQ& -XVW%XVLQHVV2SHUDWLRQV. Fork. class Fork_impl : virtual public CCM_Fork { bool available_; public: Fork_impl() { available_ = true; } void get() { if (!available_) throw InUse(); available_ = false; } void release() { available_ = true; } }; 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU)RUN0DQDJHU &RPSRQHQW. . Fork Manager. )RUN0DQDJHU. &&0B)RUN0DQDJHU. )RUN. 6HVVLRQ&RPSRQHQW. &&0B)RUN. 0RQROLWKLFH[HFXWRU. &&0B)RUN0DQDJHUB&RQWH[W. 6HVVLRQ&RQWH[W. 7XHVGD\ -XQH WK . F

(121) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(122) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU)RUN0DQDJHU &RPSRQHQW. Fork Manager. // Monolithic executor interface. local interface CCM_ForkManager : // Executors base interface. ::Components::EnterpriseComponent { // Requested by container. CCM_Fork get_the_fork(); // No attributes. };. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. )RUN0DQDJHU ([HFXWRU 0RQROLWKLFLQ-DYD. . Fork Manager. public class MonolithicForkManagerImpl // Fork implementation. extends ForkImpl implements CCM_ForkManager, // Is monolithic. // Is a session executor org.omg.Components.SessionComponent { // Required by CCM_ForkManager interface. public CCM_Fork get_the_fork() { // Itself as it extends ForkImpl. return this; } // Also SessionComponent operations. } 7XHVGD\ -XQH WK . F

(123) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(124) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. )RUN0DQDJHU ([HFXWRU 0RQROLWKLFLQ&. Fork Manager. // IDL implied by the IDL to C++ mapping. local interface MyFork : CCM_ForkManager, CCM_Fork, Components::SessionComponent {}; // C++ class ForkManager_impl : virtual public MyFork, virtual public Fork_impl { public: // Required by CCM_ForkManager interface. CCM_Fork_ptr get_the_fork() { return CCM_Fork::_duplicate(this); } // Also SessionComponent operations. }; 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU)RUN0DQDJHU &RPSRQHQW. . Fork Manager. )RUN0DQDJHU. &&0B)RUN0DQDJHUB([HFXWRU ([HFXWRU/RFDWRU. 0DLQVHJPHQW )RUN. 6HVVLRQ&RPSRQHQW &&0B)RUN0DQDJHUB&RQWH[W. &&0B)RUN. 6HJ 6HVVLRQ&RQWH[W. 7XHVGD\ -XQH WK . F

(125) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(126) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU)RUN0DQDJHU &RPSRQHQW. Fork Manager. // Main component executor interface. local interface CCM_ForkManager_Executor : // Executors base interface. ::Components::EnterpriseComponent { // Empty because no attributes. };. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. 6HJPHQWHG)RUN0DQDJHU ([HFXWRU :LWK7ZR6HJPHQWVLQ-DYD. . Fork Manager. public class MainSegForkManagerImpl extends org.omg.CORBA.LocalObject implements CCM_ForkManager_Executor, org.omg.Components.SessionComponent { // SessionComponent to implement. }. 7XHVGD\ -XQH WK . F

(127) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(128) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 6HJPHQWHG)RUN0DQDJHU ([HFXWRU :LWK7ZR6HJPHQWVLQ&. Fork Manager. class MainSegForkManager_impl : virtual public CCM_ForkManager_Executor, virtual public Components::SessionComponent { // SessionComponent to implement. };. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU)RUN0DQDJHU &RPSRQHQW. . Fork Manager. // Container callback implemented by the main segment. local interface ExecutorLocator : ::Components::EnterpriseComponent { // Obtain the specified port executor segment. Object obtain_executor(in string name) raises(CCMException); // Release a port executor. void release_executor(in Object obj) raises(CCMException); // Notify configuration completion. void configuration_complete() raises(CCMException); };. 7XHVGD\ -XQH WK . F

(129) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(130) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 6HJPHQWHG)RUN0DQDJHU ([HFXWRU ([HFXWRU/RFDWRULQ-DYD. Fork Manager. public class ForkManagerExecutorLocatorImpl extends org.omg.CORBA.LocalObject implements ExecutorLocator { private CCM_Fork fork_; private CCM_ForkManager_Executor mgr_; public ForkManagerExecutorLocatorImpl() { fork_ = new ForkImpl(); mgr_ = new MainSegForkManagerImpl(); }. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. 6HJPHQWHG)RUN0DQDJHU ([HFXWRU ([HFXWRU/RFDWRULQ-DYD FRQWG

(131). . Fork Manager. public org.omg.CORBA.Object obtain_executor(String name) throws org.omg.Components.CCMException { if (name.equals("ForkManager")) return mgr_; if (name.equals("the_fork”)) return fork_; throw new org.omg.Components.CCMException(); } public void release_executor(org.omg.CORBA.Object obj) throws org.omg.Components.CCMException { // Nothing to do. } public void configuration_complete() throws org.omg.Components.CCMException { // Nothing to do. } } 7XHVGD\ -XQH WK . F

(132) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(133) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 6HJPHQWHG)RUN0DQDJHU ([HFXWRU ([HFXWRU/RFDWRULQ&. Fork Manager. class ForkManagerExecutorLocator_impl : virtual public ExecutorLocator { CCM_Fork_var fork_; CCM_ForkManager_Executor_var mgr_; public: ForkManagerExecutorLocator_impl() { fork_ = new Fork_impl; mgr_ = new MainSegForkManager_impl; }. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. 6HJPHQWHG)RUN0DQDJHU ([HFXWRU ([HFXWRU/RFDWRULQ& FRQWG

(134). . Fork Manager. CORBA::Object_ptr obtain_executor(const char* name){ if (strcmp(name, “ForkManager”)==0) return CORBA::Object::_duplicate(mgr_); else if (strcmp(name, “the_fork”)==0) return CORBA::Object::_duplicate(fork_); throw Components::CCMException(); } void release_executor(CORBA::Object_ptr obj) { // Nothing to do. } void configuration_complete() { // Nothing to do. } }; 7XHVGD\ -XQH WK . F

(135) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(136) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU)RUN+RPH +RPH. ForkHome Fork Manager. )RUN+RPH. &&0B)RUN+RPH. 0RQROLWKLFH[HFXWRU. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU)RUN+RPH +RPH. . ForkHome Fork Manager. local interface CCM_ForkHomeExplicit : // Base home executors interface ::Components::HomeExecutorBase { // Empty as no user-defined home operations. }; local interface CCM_ForkHomeImplicit { ::Components::EnterpriseComponent create() raises(::Components::CreateFailure); }; local interface CCM_ForkHome : CCM_ForkHomeExplicit, CCM_ForkHomeImplicit {}; 7XHVGD\ -XQH WK . F

(137) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(138) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. )RUN+RPH ([HFXWRU LQ-DYD. ForkHome Fork Manager. public class ForkHomeImpl extends org.omg.CORBA.LocalObject implements CCM_ForkHome { // Required by CCM_ForkHome interface. public org.omg.Components.EnterpriseComponent create() { // Return locator or monolithic instance. return new ...ForkManager...Impl(); }. // Called at deployment time. public static org.omg.Components.HomeExecutorBase create_home() { return new ForkHomeImpl(); } } 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. )RUN+RPH ([HFXWRU LQ&. . ForkHome Fork Manager. class ForkHome_impl : virtual public CCM_ForkHome { // Required by CCM_ForkHome interface. Components::EnterpriseComponent_ptr create() { // Return locator or monolithic instance. return new ...ForkManager..._impl; } };. extern “C” { Components::HomeExecutorBase_ptr create_ForkHome() { return new ForkHome_impl; } } 7XHVGD\ -XQH WK . F

(139) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(140) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU2EVHUYHU&RPSRQHQW. Observer. 2EVHUYHU. &&0B2EVHUYHU. 6HVVLRQ&RPSRQHQW. &&0B6WDWXV,QIR&RQVXPHU. 6WDWXV,QIR&RQVXPHU. 0RQROLWKLF([HFXWRU. &&0B2EVHUYHUB&RQWH[W. 6HVVLRQ&RQWH[W. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU2EVHUYHU&RPSRQHQW. . Observer. // Container callback implemented by the component local interface SessionComponent : ::Components::EnterpriseComponent { // The context is fixed by the container. void set_session_context(SessionContext ctx) raises(CCMException); // Called when component is activated. void ccm_activate() raises(CCMException); // Called when component is deactivated. void ccm_passivate() raises(CCMException); // Called when component is removed. void ccm_remove() raises(CCMException); }; 7XHVGD\ -XQH WK . F

(141) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(142) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU2EVHUYHU&RPSRQHQW. Observer. // Info event sink executor interface. local interface CCM_StatusInfoConsumer { void push(in StatusInfo ev); }; // Main component executor interface. local interface CCM_Observer_Executor : ::Components::EnterpriseComponent { }; // Monolithic executor interface. local interface CCM_Observer : CCM_Observer_Executor { void push_info(in StatusInfo ev); }; // Component-specific context interface. local interface CCM_Observer_Context : ::Components::CCMContext {}; 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. 2EVHUYHU([HFXWRU 0RQROLWKLFLQ-DYD. . Observer. public class ObserverImpl extends org.omg.CORBA.LocalObject implements CCM_Observer, org.omg.Components.SessionComponent { // Required for monolithic interface. public void push_info(StatusInfo event) { … update GUI … }. 7XHVGD\ -XQH WK . F

(143) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(144) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 2EVHUYHU([HFXWRU 0RQROLWKLFLQ-DYD FRQWG

(145). Observer. // Required for SessionComponent interface. public void set_session_context(SessionContext ctx) throws CCMException { ... } public void ccm_activate() throws CCMException { … display GUI … } public void ccm_passivate() throws CCMException { … hide GUI … } public void ccm_remove() throws CCMException { … free GUI … } } 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. 2EVHUYHU([HFXWRU 0RQROLWKLFLQ&. . Observer. // IDL implied by the IDL to C++ mapping. local interface MyObserver : CCM_Observer, Components::SessionComponent {}; class Observer_impl : virtual public MyObserver { public: // Required for monolithic interface. void push_info(StatusInfo * event) { … update GUI … }. 7XHVGD\ -XQH WK . F

(146) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(147) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 2EVHUYHU([HFXWRU 0RQROLWKLFLQ& FRQWG

(148). Observer. // Required for SessionComponent interface. void set_session_context( Components::SessionContext_ptr ctx) { ... } void ccm_activate() { … display GUI … } void ccm_passivate() { … hide GUI … } void ccm_remove() { … free GUI … } };. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU2EVHUYHU+RPH +RPH. . Observer Home Observer. 2EVHUYHU+RPH. &&0B2EVHUYHU+RPH. 0RQROLWKLFH[HFXWRU. 7XHVGD\ -XQH WK . F

(149) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(150) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU2EVHUYHU+RPH +RPH. Observer Home Observer. local interface CCM_ObserverHomeExplicit : ::Components::HomeExecutorBase {}; local interface CCM_ObserverHomeImplicit { ::Components::EnterpriseComponent create() raises(::Components::CreateFailure); }; local interface CCM_ObserverHome : CCM_ObserverHomeExplicit, CCM_ObserverHomeImplicit {}; 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. 2EVHUYHU+RPH ([HFXWRU ,Q-DYD. . Observer Home Observer. public class ObserverHomeImpl extends org.omg.CORBA.LocalObject implements CCM_ObserverHome { // Required by CCM_ObserverHome interface. public org.omg.Components.EnterpriseComponent create() { return new ObserverImpl(); }. // Called at deployment time. public static org.omg.Components.HomeExecutorBase create_home() { return new ObserverHomeImpl(); } }. 7XHVGD\ -XQH WK . F

(151) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(152) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 2EVHUYHU+RPH ([HFXWRU ,Q&. Observer Home Observer. class ObserverHome_impl : virtual public CCM_ObserverHome { Components::EnterpriseComponent_ptr create () { return new Observer_impl; } }; extern “C” { Components::HomeExecutorBase_ptr create_ObserverHome () { return new ObserverHome_impl; } }. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU3KLORVRSKHU&RPSRQHQW. . Philosopher QDPH. ;;;. 3KLORVRSKHU. &&0B3KLORVRSKHU. 6HVVLRQ&RPSRQHQW. &&0B3KLORVRSKHUB&RQWH[W. 0RQROLWKLF([HFXWRU 6HVVLRQ&RQWH[W. 7XHVGD\ -XQH WK . F

(153) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(154) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU3KLORVRSKHU&RPSRQHQW. Philosopher QDPH. ;;;. // Main component executor interface. local interface CCM_Philosopher_Executor : ::Components::EnterpriseComponent { attribute string name; }; // Monolithic executor interface. local interface CCM_Philosopher : CCM_Philosopher_Executor { };. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU3KLORVRSKHU&RQWH[W. . Philosopher QDPH. ;;;. local interface CCM_Philosopher_Context : ::Components::CCMContext { // To obtain the connected left fork. Fork get_connection_left();. // To obtain the connected right fork. Fork get_connection_right(); // To push an info event to all subscribers. void push_info(in StatusInfo ev); };. 7XHVGD\ -XQH WK . F

(155) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(156) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 3KLORVRSKHU([HFXWRU 0RQROLWKLFLQ-DYD. Philosopher QDPH. ;;;. public class PhilosopherImpl extends org.omg.CORBA.LocalObject implements CCM_Philosopher, org.omg.CORBA.SessionComponent, java.lang.Runnable { // Transient state. private String name_; // Constructor. public PhilosopherImpl(String n) { name_ = n; }. // Required by the CCM_Philosopher // Executor interface. public void name(String n) { name_ = n; } public String name() { return name_; } 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. 3KLORVRSKHU([HFXWRU 0RQROLWKLFLQ-DYD 

(157). . Philosopher QDPH. ;;;. // The philosopher behavior state machine. private java.lang.Thread behavior_; // The philosopher CCM context. private CCM_Philosopher_Context the_context_; public void set_session_context(SessionContext ctx) throws CCMException { the_context_ = (CCM_Philosopher_Context)ctx; } public void ccm_activate() throws CCMException { behavior_ = new Thread(this); behavior_.start(); } public void ccm_passivate() throws CCMException { behavior_.stop(); } public void ccm_remove() throws CCMException {...} 7XHVGD\ -XQH WK . F

(158) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(159) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 3KLORVRSKHU([HFXWRU 0RQROLWKLFLQ-DYD 

(160). Philosopher QDPH. ;;;. public void run() { // The state machine. ... // Pushes the current status to all observers.. the_context_.push_info(...); ... // Takes the left fork.. the_context_.get_connection_left().get(); ... // Takes the right fork.. the_context_.get_connection_right().get(); ... // Releases the left fork.. the_context_.get_connection_left().release(); ... // Releases the right fork.. the_context_.get_connection_right().release(); ... } 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. 3KLORVRSKHU([HFXWRU 0RQROLWKLFLQ&. . Philosopher QDPH. ;;;. // IDL implied by the IDL to C++ mapping. local interface MyPhilosopher : CCM_Philosopher, Components::SessionComponent {}; // C++ class Philosopher_impl : virtual public MyPhilosopher { CCM_Philosopher_Context_var ctx_; CORBA::String_var name_; public: // Constructor. Philosopher_impl(const char* nn) { name_ = nn; } void name(const char* nn) { name_ = nn; } char* name() { return CORBA::string_dup(name_); } 7XHVGD\ -XQH WK . F

(161) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(162) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 3KLORVRSKHU([HFXWRU 0RQROLWKLFLQ& 

(163). Philosopher QDPH. ;;;. void set_session_context( Components::SessionContext_ptr ctx) { ctx_ = CCM_Philosopher_Context::_narrow (ctx); } void ccm_activate() {. … start philosopher thread … }. void ccm_passivate() {. … stop philosopher thread … }. void ccm_remove() {. … }. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. 3KLORVRSKHU([HFXWRU 0RQROLWKLFLQ& 

(164). . Philosopher QDPH. ;;;. void timer() { // The state machine. ... ctx_->push_info(...); ... ctx_->get_connection_left()->get(); ... ctx_->get_connection_right()->get(); ... ctx_->get_connection_left()->release(); ... ctx_->get_connection_right()->release(); ... }. 7XHVGD\ -XQH WK . F

(165) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(166) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU3KLORVRSKHU+RPH +RPH. PhilosopherHome Philosopher. 3KLORVRSKHU+RPH. &&0B3KLORVRSKHU+RPH. 0RQROLWKLFH[HFXWRU. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. /RFDO6HUYHU6LGH(TXLYDOHQW,'/ IRU3KLORVRSKHU+RPH +RPH. . PhilosopherHome Philosopher. local interface CCM_PhilosopherHomeExplicit : ::Components::HomeExecutorBase { ::Components::EnterpriseComponent new(in string name); }; local interface CCM_PhilosopherHomeImplicit { ::Components::EnterpriseComponent create() raises(Components::CreateFailure); }; local interface CCM_PhilosopherHome : CCM_PhilosopherHomeExplicit, CCM_PhilosopherHomeImplicit {}; 7XHVGD\ -XQH WK . F

(167) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(168) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 3KLORVRSKHU+RPH([HFXWRU LQ-DYD. PhilosopherHome Philosopher. public class PhilosopherHomeImpl extends org.omg.CORBA.LocalObject implements CCM_PhilosopherHome {. // Required by CCM_PhilosopherHomeImplicit interface. public org.omg.Components.EnterpriseComponent create() { return new PhilosopherImpl(“”); } // Required by CCM_PhilosopherHomeExplicit interface.. public org.omg.Components.EnterpriseComponent _new(String name) { return new PhilosopherImpl(name); }. // Called at deployment time. public static org.omg.Components.HomeExecutorBase create_home() { return new PhilosopherHomeImpl(); } } 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. 3KLORVRSKHU+RPH([HFXWRU ,Q&. . PhilosopherHome Philosopher. class PhilosopherHome_impl : virtual public CCM_PhilosopherHome { Components::EnterpriseComponent_ptr create() { return new Philosopher_impl(“unnamed”); } Components::EnterpriseComponent_ptr _cxx_new(const char * name) { return new Philosopher_impl(name); } }; extern “C” { Components::HomeExecutorBase_ptr create_PhilosopherHome() { return new PhilosopherHome_impl; } } 7XHVGD\ -XQH WK . F

(169) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(170) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. ,PSOHPHQWLQJ&25%$&RPSRQHQWV ZLWK&,'/. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . &RPSRQHQW,PSOHPHQWDWLRQ'HILQLWLRQ /DQJXDJH &,'/

(171) „ 'HVFULEHVFRPSRQHQWFRPSRVLWLRQ „. $JJUHJDWHHQWLW\ZKLFKGHVFULEHVDOOWKHDUWLIDFWV UHTXLUHGWRLPSOHPHQWDFRPSRQHQWDQGLWVKRPH. „ 0DQDJHVFRPSRQHQWSHUVLVWHQFHVWDWH. :LWK20*3HUVLVWHQW6WDWH'HILQLWLRQ/DQJXDJH 36'/

(172) „ /LQNVVWRUDJHW\SHVWRVHJPHQWHGH[HFXWRUV „. „ *HQHUDWHVH[HFXWRUVNHOHWRQVSURYLGLQJ. 6HJPHQWDWLRQRIFRPSRQHQWH[HFXWRUV „ 'HIDXOWLPSOHPHQWDWLRQVRIFDOOEDFNRSHUDWLRQV „ &RPSRQHQW¶VVWDWHSHUVLVWHQF\ „. 7XHVGD\ -XQH WK . F

(173) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(174) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. %DVLF&,'/&RPSRVLWLRQ)HDWXUHV „ &RPSRQHQWOLIHF\FOHFDWHJRU\ „. 6HUYLFHVHVVLRQSURFHVVHQWLW\. „ 1DPHRIKRPHH[HFXWRUVNHOHWRQWRJHQHUDWH „ &RPSRQHQWKRPHW\SHLPSOHPHQWHG „. ,PSOLFLWO\WKHFRPSRQHQWW\SHLPSOHPHQWHG. „ 1DPHRIPDLQH[HFXWRUVNHOHWRQWRJHQHUDWH 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . &,'/&RPSRVLWLRQIRU 2EVHUYHU&RPSRQHQW #include <philo.idl> // or import DiningPhilosophers; composition service ObserverComposition {. home executor ObserverHomeServiceImpl {. implements DiningPhilosophers::ObserverHome; manages ObserverServiceImpl; }; };. 7XHVGD\ -XQH WK . F

(175) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(176) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. 20*&,'/&RPSLODWLRQ3URFHVV &RPSRQHQW 'HVLJQHU. &RPSRVLWLRQ 'HVLJQHU. 20* ,'/ . LQFOXGHV LPSRUWV. /RFDO 6HUYHUVLGH 20* ,'/. 20* ,'/  &RPSLOHU. GHOHJDWHV WR. &RPSRQHQW 6NHOHWRQ. SDUWLDOO\ LPSOHPHQWHG. 7XHVGD\ -XQH WK . &RPSRQHQW ,PSOHPHQWHU &RPSRQHQW ([HFXWRU. 20* &,'/. 20* &,'/ &RPSLOHU. LQKHULWHG E\ DQG FRPSOHWHG. &RPSRQHQW ([HFXWRU 6NHOHWRQ. 8VHU ZULWWHQ &RPSLOHU *HQHUDWHG ILOHV. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . $GYDQFHG&,'/&RPSRVLWLRQ)HDWXUHV „ $VVRFLDWHGDEVWUDFWVWRUDJHKRPHW\SHIRU. FRPSRQHQWSHUVLVWHQF\. „ 0XOWLSOHH[HFXWRUVHJPHQWV. ,PSOHPHQWDVXEVHWRIWKHFRPSRQHQW¶VIDFHWV „ &RXOGKDYHDQDVVRFLDWHGDEVWUDFWVWRUDJHKRPH „. „ &RPSRQHQWIHDWXUHVVWRUHGDXWRPDWLFDOO\ „. $WWULEXWHYDOXHVUHIHUHQFHVFRQQHFWHGWRUHFHSWDFOHV DQGHYHQWVRXUFHVDUHGHOHJDWHGWRVWRUDJH. „ 3UR[\KRPHV 7XHVGD\ -XQH WK . F

(177) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(178) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. &,'/&RPSRVLWLRQ IRU)RUN0DQDJHU &RPSRQHQW #include <philo.idl> // or import DiningPhilosophers; composition session ForkManagerComposition { home executor ForkHomeSessionImpl { implements DiningPhilosophers::ForkHome; manages ForkManagerSessionImpl { segment Seg { provides facet the_fork; } }; }; }; 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . 20*36'/IRU'LQLQJ3KLORVRSKHUV #include <philo.idl> abstract storagetype Person { state string name; state DiningPhilosophers::PhilosopherState philosopher_state; . . . }; abstract storagehome PersonHome of Person { factory create(); }; storagetype PersonBase implements Person {}; storagehome PersonHomeBase of PersonBase implements PersonHome {};. 7XHVGD\ -XQH WK . F

(179) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . .

(180) &25%$&RPSRQHQW0RGHO7XWRULDO 2UODQGR20*0HHWLQJ. 7XHVGD\-XQHWK. &,'/&RPSRVLWLRQIRU'LQLQJ3KLORVRSKHUV #include <philo.psdl> composition process PhilosopherComposition { home executor PhilosopherHomeProcessImpl { implements DiningPhilosophers::PhilosopherHome; bindsTo PersonHome; manages PhilosopherProcessImpl; }; };. 7XHVGD\ -XQH WK . &25%$ &RPSRQHQW 0RGHO 7XWRULDO. . 20*&,'/ 36'/&RPSLODWLRQ3URFHVV 20* ,'/. 'DWDEDVH 'HVLJQHU 20* 36'/. . LQFOXGHV. 20* 36'/ &RPSLOHU. 6WRUDJH 6WXE. &RPSRVLWLRQ 'HVLJQHU. &RPSRQHQW ,PSOHPHQWHU. 20* &,'/. &RPSRQHQW ([HFXWRU. 20* &,'/ &RPSLOHU. XVHV. LQKHULWHG E\ DQG FRPSOHWHG. &RPSRQHQW ([HFXWRU 6NHOHWRQ. 'DWDEDVH 7XHVGD\ -XQH WK . F

(181) 3KLOLSSH0HUOH/,)/ ,15,$. &25%$ &RPSRQHQW 0RGHO 7XWRULDO. 8VHU ZULWWHQ &RPSLOHU *HQHUDWHG ILOHV . .

Riferimenti

Documenti correlati

Al fine di coprire interamente le spese per la progettazione preliminare, definitiva ed esecutiva, i lavori di ristrutturazione, il coordinamento della sicurezza, la direzione

In Italia è presente in tutte le regioni del versan- te tirrenico dalla Liguria alla Calabria, in Sicilia, Sardegna e Isole minori, nel versante adriatico dalle Marche alla

[r]

Tiberio Rabboni, Assessore Agricoltura, economia ittica, attività faunistico-venatoria della Regione Emilia-Romagna. Utilizzo del RUC: alcuni esempi

9.30 – Introduzione ai lavori e presentazione servizi del Punto Impresa Digitale (PID) della Camera di commercio di Torino Paolo Veneruso, Camera di commercio di Torino, Punto

[r]

COMPLEMENTI DI ANALISI MATEMATICA - 16

The WHO Traditional Medicine Strategy 2014-2023 will help health care leaders to develop solutions that contribute to a broader vision of improved health and patient autonomy.