áłá˛áŤáľ, ááĽá!
áŠáŁááŤá˝á á¨á˘á áá-ááá á¨áśááľáá áááľááá˝á á áááááľ áá áŤá°áŽá¨ á˛áá á¨áĽááá ááľáĽ á¨á áá áłáá áľááť á¨áááá á á¨áá°á á¨áááľ á áááᎠáĽá á¨á°ááľ áá°áľ á á EDMS ááᢠá áá áŤááľ á¨áááśáťá˝á áľáŞáśá˝ á JavaEE á´áááááá˝ áá á¨á°áá°á¨áą áá¸áᣠááá áá á áááᎠá°ááŞáľ áá á áááľ áĽá¨áá¨áá ááᢠá¨áĽáá°áá á áááľ áááľááá˝ á áŁá á˝áá áŤááŁá¸á á áŤáŁá˘áá˝ á ááą á¨áá áŤááľ ááŤáá˝ á¨áá á¨á°ááŤáŠ áááľ áľáááśá˝á áááááľ ááᢠá¨ááá ááá á¨áľá-á áá áľáłááᣠá¨á´áááá ááá áĽá ááááá˝ ááá á˘ááá á¨áá á°áľ á˝ááŽá˝ ááá áľáá áŤáľ ááłáľ áá°áĄáááŁááá áá á á áἠáá áĽáá°áá á áááľ á˝ááŽá˝á á áááłáľ á¨ááľ ááťáťá áłááˇáá˘
áá° áĽááľá áľáŠá¨áľ áŁááŁááľ á˝áá ááľáĽ NPO "Krista" á á°á°á¨áá áŚáł áľááá áááľ áĽá á¨áľá-á áá áĽááľ áĽáááŤáá. áĽáá˛áá ááá á°áľ á˝áá ááá áááľáá á¨áá°áá áŞáŤ ááᢠáĽááł á ááťá áĽáááá¨áłáá áĽá á¨áá áááááľ á áľá°ááᣠáá áĽáá°á°á°á á áááá áĽááááŤáá.
ááľá°áŁá áŤ
á á áááš ááľáĽ á¨á°ááášáľ á¨áľá-á áá áĽá á´áááŤá áááľááá˝ á á°áá°á áľáŤáá˝ á ááľ ááľáĽ á áá áááľ áá á ááááŽá á áĽá ááá áá. áĽááá áááľááá˝ áááá°áá áá¸á áĽáá á ááááŠá áĽá á ááá˝ á¨á á ááá áááłáá˝ ááľáĽ áĽáŠ áááá áá˝ááá˘
BPM á¨áĽáą áá áá áááááľ á áá?
áá áá áĽáŤá áááááľáŁ á¨áááľáááťá˝áá á°ááŁáŤá á˝ááŽá˝ á áááá á áĽáááľ ááááá á ááĽáᢠá áĽá á¨á°ááá°á á¨ááĽááľ áľáááľ ááľáĽ áŤáá á¨áááľ á áááᎠáá á áŤá áá¨áá á á°á áá á áááá˝ áŁá áĽá áĽá á áŤáľ-á°á á ááŁáŤáľ áá áá ááἠáá° áłáłá¤á ááľáĽ á ááľááŁáľ á á ááłááľ á¨áľáŤ áá°áśá˝ á áá¨ááá ᣠáá° áá áľáááľ / á¨áľááłá áłáłá¤á / áá á°á á áá°á ᣠáŞáááśá˝á á áááá¨áľ ááᢠ. áľááá áá°áá áá˝ á¨áľáááą ááá á°ááŁá ááľáŁá á¨áááľ áá°áłá¸áá á ááśáá˛á ááľá¨á áá.
ááážáľ á˛áŁá âá°ááľâ á¨áááá áá á áááááľ ááľáĽ á¨ááá ááá á¨á°áá°á á¨áľáŤ áá°áľ âááŤáŤáâ á áá˝á á¨á፠ááá á¨á°ááá° á¨ááἠáľáĽáľáĽ áĽáá° áá áá፠ááá˘
áá áľá áá
á°áľ á ááááŽáľ? á¨ááá á áá ᣠá¨áá
á°áľ á°ááŁáŠ á¨á°áá á¨á á áľáááą á ááá´áá¸á áá ᣠá á°áá áá áĽáŤá áłááá áá° áááá˝ âá¨á°áá¨á â ᣠáá áá á áá á á°ááŤáŠ ááááŤáśá˝ á°á˝áá áľá áá á˘
- á áŽááá á á á°áá˘;
- áá°á á˛á áááá˝ áááśá˝ á¨á°ááᥠáááľ áľáááśá˝á áĽáá°áá áĽá á áá á ááá ááááŤáľ;
- á°ááŁáŤá áŁááá ááľáááśá˝ áá á áááľá¨áľ á á ááá´ááą ááłá.
á¨áááľ á áááᎠá áá á°áľ á ááśá˝ áĽááłáá áá áĽá á¨á áááŹá˝áá ááᢠá¨áľáááąá á¨áľá-á áá ááá¨á ááľá áá áłáá˝ á áĽáááľ á¨áááá¨áľ á áľáááááľá áááľáłááľ á¨áá á°áľ áááá á¨ááá á¨áľáŤ áá°áľ á¨áááľ á áááᎠáááá¨áľ áľáá áá°á á áᢠáá á áŤááľ á ááŤáł áĽá áá˝ á áᾠᣠáá ááááľ áá¤áłáááąá áŤáłáŤá á˘
- á¨áá á°áľ á˝ááŽá˝á áááłáľ áĽááá áá á ááá á¨áľáŤ áá°áľ á áááá áá áŁáá ááľá á¨á¤ááľá´áá˝á ááĽáŚá˝ ááááŤáľ á á°ááłá°á áĽáŞ ááá áá° ááá á ááŤáŽá˝ ááááłá (á¨á°ááłá°á áá á°áľ ááłáśá˝ á¨áá á áłá˝ á°áĽáŤáá°áá)á˘
- á¨áá áááľ áľáááľ ááĽá¨áááľ á ááŤáľáááá áľ áá á¨ááááľ á ááśá˝ á ááá áá° áá á¨áááľ ááá ááľáĽ áááŁá á˘
- á¨áá°áá áŞáŤá ááᢠáá á°áąá á˝á á áááľ áĽá á¨áľáŤ áá°áąá á áááἠá ááá áá°áĽá¨á áá˝áá;
- áľáááą á¨á°á ááá áĽááł á ááľ áá ááá áŤááá ᣠá áááľ áľáááśá˝ ááŤá¨á âáľááľâ ááľá°ááá ᣠáĽá áĽá á¨á°á áá ááááá˝ ááłáŤá ᣠáá á ááἠá¨á ááľ áááľ áľáááľ áá° áá ááľá°ááá ááááŤáá˘
ááá á ááŤá¨áĽ á¨áá á°áľ áááááśá˝á áĽáá° ááá á¨áááľ ááá áĽá á¨áľáŤ áá°áľ áá á áŤá á áľáá ááá á ááᢠá¨á áááŹá˝á ááᢠáĽááśá˝ áá° á°áá áĽááłáááą ááá¨áá¨áᣠá á˛áľ á¨áá á°áľ ááľá°ááĽá ááá á ááá áĽá áĽá¨áľ á¨áá˝ ááá á áá áľáŁ áááľáá áááá¨áĽ á ááľá°á á ááŤáŽá˝á˘ áá á áááľá¨á á¨áááľáá á áá á¨áŁáľ ááᥠááłáŞáŤá áá°á ááá âáŤáąá á áĽáአáá áĽáá˛á°áŠáľâ áłááá áľááľ áá°á ááá á¨áááááľá á¨á°ááŤáŠ á ááŤáŽá˝á ááá á¨áĽ á¨ááŤáľá˝á áááá ááá á áá áľá˘ á ááľ áááá˛áľ á áá á°áľ á°ááŁáŤáľ á ááľ ááľáĽ ááááłá¸á á¨áááŁá¸á áĽá áĽáŤááá˝ á á ááá áá á áááŹá˝á ááᢠá áĽááľ á°áááľ áľáŤá ááŤáľáĽáŁá¸á á¨ááááŁáŁá¸áᥠá¨ááĽááľ áá°áᣠááĽááľáŁ á°áááľááľáŁ á°á áááľáŁ áááᣠáááľ áĽá á¨ááĽáľ áľáááľáŁ ááľááᣠáááťáᣠá¨áľáááľ áĽá á¨áááŤá¨á á ááśá˝ ááá°. á¨áá°áá áŞáŤ ááá˘áá˝ á áľááá ááá á¨áááľá á áĽááśá˝á áá á¨áĽ á áľááá áá, ááĽáá°áá á áááľ áĽáŤááá˝ áá áááśá˝ ááľááá á°á°áĽááá. áĽááá á áĽááśá˝ á áľááá á°á á ááá á ááŁá¸áᥠá¨áááľ á áááᎠá áŁá áĽá áá ááááŁáᣠáá á áľá á°áśá˝á á¨ááľá°ááá á á°áá áá¨ááŤáᣠá¨áľá á°áśá˝ áá á áá á°á á°á¨á áá ááá¨áľ á áá áľá˘
áá BPM á¨áĽáą áá áá áááááľ á áá? á¨áľáŤ áá°áľá ááá°áá á áĽá á ááŤáŽá˝ á áá˘
á áĽááṠᣠáá á¨áááľ áĽáŤ áá°áśá˝ áľáá ፠á áĽá áááľááá˝ ááľáĽ á áŁá áłáá áá - á áááľ á˝ááá á˛áŤááŤá ááá፠ááá፠áĽá áá˝áááŽá˝ á¨áááľ á áááᎠá°ááŁáŁáŞáá˝ áááááľá˘ á áá
ááłá áá ᨠ"á°ááą" á áááľ áĽáŤ áá°áľ ááľáĽ áŤááá áá
áłá á áá á¨áááľáá ááᾠᨠ"á°ááą" á¨áŤáą áŁá
᪠áá.
á ááŽáááľ á
áá áá áá°áą áá
á áááľáá
á¨áá áľáá ፠á°ááłá ááľ ááĽá°á á¨áááľ áá°áśá˝á á ááá á á ááťáŤá áááááľ áĽá ááĽááľ ááááŤáľ áá. áááᣠá¨áśááľáá á˛áľá°áá˝ áá áἠááľáĽáľáĽ á˛ááᣠá ááśááľáľ á¨ááá á¨áááą áá°áľ á áŤá áŤáľáá áĽá á¨á áá ááľáĽáľáĽ ááááᢠáĽáŤááłááą á áááŤá á áľáአáĽáá˛ááá á¨áá áľá áľ, á¨áá°áśá˝á áááá˝ áĽáá°áá áĽá á áá ááá, áĽáá˛áá á¨á áááŤáá˝á áá°áśá˝ áŤáľááááłá. á áĽáá°áá ááááľ áááłáá˝ ááľáĽ ááłáŞáŤá á¨áááá˝ áááá, áĽá á¨áľá´áľ á˝ááá á˛áŤááŤá á¨áá¨á áááąá áŤáŁá (á¨áá á°áľ áááááśá˝ á áľáá ááľáĽ á ááŤá˝ á ááłáŠá).
á¨áĽá á°á°ááá ááľáááśá˝ ááĽáŤáŞáŤ á áá áá°áą áá
á áááľááá˘
á¨áá
áááł áááŁáľ á¨áá°áá áá
á°áľ áá á
ááľáĽáľáĽ á¨áááľ áá°áľ áľáá˝ ááá
á á¨á á áá ááľáĽ, áááľáá á¨áá á ááá áŤá á á ááá¨á: á ááľáá ááłáŞáŤáá˝ á ááŤáááľ á¨áááľ áá°áśá˝á áááá á áŤáá á¨áá°á á¨ááá áľ áĽáŤ á°ááŁáááľ áŤáá á¨áááłáááľ á áááŤážá˝á áááááľ á áááá°á, áĽá ááłáŞáŤá áŤáą á ááá˘áá˝ ááŤá¨á á áŁá á¨áááá°áą áá¸á. á á°á¨ááŞá áľá áá°áŠ ááľáŁá ááá á á áŹáłáá˝ áá áŠ, áá á áĽá "áááśá˝" áĽá "ááŤá˝" áĽáá˛áłáŠ á áľááá.
jBPMá á¨áá áá ááá á áááłá áá˝áł á¨áááľ áĽáŤ áá°áľ ááłá á¨áŤáą á¨áá áá áááł áááŠá áĽá áá áĽá ááłáąá ááá ááᢠá á°ááŤáŠ á áááŹá˝áá˝ ááŤá¨á ááľáĽáľáĽ áá á°áľ ááŽáśáŽáá˝á á ááááśá˝ áĽá á áááĽááśá˝ á áá áá áŤáá°ááłá°á áááááśá˝á ááá°áá á á¨áá°áľ á ááŤá¨áĽá á¨áá áá áĽáľáá á áá°ááᢠá áá ááľáĽ á¨ááŤááἠáááł ááአááłá áá ááŤááłá.
á¨áá á á°á áá°á áá á¨áľ áá°áá°á áĽáá˝ááá- á BPM ááᤠááľáĽ áŤáá á¨áá°áľ á ááŤá¨áĽ á¨áá áá° áá ááľáĽáľáĽ á¨áááľ áĽáŤ áá°áśá˝á á áŤáľ-á°á ááá áŤáľ ᣠá¨áá á°áľ áĽáá áľáá´áá˝á áá° áĽááá áá°áśá˝ áááľáááľ áĽá á¨á°á°áá á¨áá áá°áľ á á°ááŁáŁá ááľáłááť á¨ááłá¨áľ á˝ááłá ááá á á á°á áĽáŤáá˝á ááááłáľ áŤáľá˝áááá˘
á¨á°ááłá°á áĽáŞáá˝ ááłáśá˝ áĽáá° á¨áá á°áľ ááľá
á¨á°ááłá°á áá á°áľ áááá á¨áááľ áĽáŞá áŤááááłáᢠá ááľ áááľ áľáááľ áĽáá° á áááá áá áá á¨áá°áŤ áĽá á¤áá áá á ááááá áá´ áŤáááŁáᢠáá áááľ áľáááľ á¨á°áá áá áá áá áá áŤá áĽá á áľááááá áá áĽáŞ áŤá°ááá áĽá áá¤áąá áá áĽááᢠá áľáááą á ááá´áá¸á áá á áááľá¨áľ á¨á°áá áá áĽá á¨á áááá ááá˝ á á ááľ áá°áá áŞáŤ áĽá áá°áľ ááľáĽ ááá á á°ááŤáŠ ááľáĽ ááá áá˝ááᢠá ááá°áá ááłá áá á ááłáᾠᨠRPC á á°ááŁá áá áá°áá á áĽá á¨áááŞáŤáá˝á áĽá á¨áĽáŞáá áá¤áľ áááťá ááľá áľ áŤáľáááááłá.
áá á¨ááááľ ááľá á áŁá áľáá á¨áľáááśá˝ áľáĽáľáĽ á áá, ááá áá á áááááą ááááŤáľ á á°ááŁá á á°áá áĽá á áá áááá. á¨á á°ááŁá አááĽááľ ááááŤá áĽá á¨áá áá°áŚá˝á á áááĽáá áľ áá á°áááá áĽáá˛á ááá áľ áŤáľááľáľááłá, áááľááá áĽáá° á´áááŤá ááł áááááŁá. ááá áá áááľ á¨ááá¸á ááá˘áá˝ áłáŤáááľ á˛á ááá áľ áá¨á°áłá, á ááá á ááłá áááá˝á á áááááĄá.
á áááľ áľáááľ áááááľ ááľáĽ á áŁá ááá˝ á¨áááá áá᪠á á°á¨ááŞáŁ âá áá°áâ áĽá âá ááá áĽâ ááĽááśá˝ áá áĽáá ááá˝ áŤááá á˝ááŽá˝á á áᢠá áĽáááĽ, á¨á˘áááľ á áááᎠá ááłááľ áááŚá˝á áŤá°á¨á, ááĽááśá˝á ááľáá¨áľ á ááťáá, áĽá ááĽááśá˝, á á°áŤá, á áĽááá áááŚá˝ á¨á°ááą á¨á°áá°á á¨áá°áá áŞáŤ ááĽáśá˝á áŤááą. áááľá á ááą áááľ áľáááľ á¨ááá ááá˝ áĽáľáŞá áĽá áľá¨áľ ááĽááąá áá ááá áĽá áááááŤáášá ááľáááľ á áá˝ááᢠáá á á¨á°ááŤáŠ á°á áááá˝á á¨áááἠáĽáľáá á áĽá á áá¨ááŤá.
- á¨áľáááą ááá˝ á°áŞááľ á ááˇá, á°á áááá˝ ááĽáŤááá˝ áááľ áááááľ á¨á á áá áá áĽáá;
- á á°á¨ááá á¨áá áááł ááááŤáľ á áááአá á á ááá áá°á áá áĽáŤááá˝ ááá˝ ááľá áľ áŤáááᥠá áĽááá ááŽá˝ á ááĽááľ á á°áŤá ááĽá áľ áá á°áááááá˘
- Deadlocks ááłá¨áľ ááááŤá: áŤáá¸áá ááľá°áľ áĽáľáá¸á á áĽáĽá ááĽááśá˝ áááł áá, á¨áááľ ááá áĽá ááĽááą ááľáĽ á°áłáłá áááááŤáá˝ áá á áá ááá°áá;
- á¨ááĽááľ áá ááĽá፠áľá á°áśá˝ ááłáŤá;
- áľáŤá á¨áá°á áá á áŤáá áááĽá áááá á áĽá áááἠá¨áááá á¨áá á áááአᨠOutOfMemory áá âáááľááâ áĽá á¨á°ááłá°á áá á°áśá˝ áááŤá¸á áá°áąá áá° âáááâ ááĽááśá˝ ááá¨ááá á áŁá á¨áŁáľ áŤá°ááááá˘
á¨áĽá ááá áĽááł á ááá ᣠá áá á°áľ áá áľ áĽáŞáá˝á áááľ á¨ááá°áŚá˝á áááľ áľáááśá˝ áĽáŤáľ áá ááĽáĽáá áá° ááŁáľ áŤááŤá-á¨á ááľ áááľ áľáááľ á¨áá áááľ áľáááľ á¨áĽáŤáľ á áááŤážá˝ á°ááĽá á¨á ááľá áááľ áľáááľ ááá á¨áĽáŤáľ á áááŤážá˝á áá¨ááἠá ááťááᢠáááľ áľáááśá˝ á á°ááŤáŠ áĄáľáá˝ á¨á°ááᥠá¨áá, áá áľáá á˝áá áá.
áĽá¨á°áááą áŤááľ áááľ áľáááśá˝ á á°ááŤáŠ á áááŹá˝áá˝ ááľáĽ á¨áá áĽá á áááąá á áŠá á°ááłáłá áááŚá˝á ááľá¨á áŤááĽááľ áááŽá˝ á¨á áá á áľá°áłá˝ ááááᢠá¨áĽááá á áááŚá˝ ááĽááľ áĽáá´áľ áá¨ááἠááťáá?
á á°áአááĽááśá˝ ááľáĽ áááŚá˝ á¨á°á°á¨á ᣠá¨á፠á áľá°ááá áአá áŤáŤá áĽá ááŤáŤáť áá á¨áĽ áŤáľáááááłá ᣠáĽá áá á¨á°ááłá°á áá á°áľ áá áĽá áá˝á áá á áá áŤáľáááłá - áááááľá˘
á¨á°á¨ááá ááĽááśá˝á áá° á áĽááŻá¸á áááŁá, ááá áá á áááľáááťá˝á ááľáĽ á áá áááŁá¸áá: á áľá°áááááľá áá¨ááἠá áľá¸á᪠áá.
"áłá" áááĽááľ á˝áá áááľá áá
á áááᎠá áááááśá˝ á°ááłá
ááľ áĽá¨á¨áᨠá áááŁáą ááááľ
áá ááľá á¨áá á¨á°á ááąáľá á¨á¨á á áá ááĽááśá˝ á˝ááŽá˝ á áľááá áááłá ᣠáĽáá˛áá á¨áľáááąá áááł á¨áááľ á áááᎠáá á¨áááŤáľ á á áá˝á áŤá°ááá-á¨á°áłáŤ ááĽááľ á áá á¨áá¨ááá ááŤáŤáť áľáááąá áá° ááľáá áááł ááááľ á áá˝áá ᣠáá áŤá ááĄá˘ á ááŤá á¨ááἠáá°áľ ááááľ. áá á°áá áá°áąá áá° "áĽáŠ" áá¨á¨áť ááááŁáľ á ááááá áľ áá á á°áłáŤ áááł á¨á°á ááá á¨ááἠáá°áľ á°á¨ááá˝á á¨ááľáá áĽáá˛áá ᥠáŤáľá˝áááłá.
á¨ááááá áááᣠá áááá˛á á˛áľá°á ááľáĽ áá áľááá°-áĽááľ áĽáá˛á áá á¨á°áŁáአáááľ áľáááśá˝á áá° áá á°áľ á˛áᣠá áá áá áĽá áá¨á á áá á ááአááĽááśá˝ ááááŤáľ á¨ááᥠá ááłá á°á áĽááá˝ áĽá á°ááá á¨ááĽá¨áľ áááááŤáá˝ ááľá°áááá˘
á¨á˘áááľ áá°áłá˝á áá á á°áŤáŤá á BPM ááá¤áŁ âáłááľâá áá°áá á á áŁá ááá áá á°áááˇáᥠá¨âáłáâ ááá°áŁá áĽááááá˝ á áááľ áá°áą ááľáĽ áĽáá° áĽáá áľáá´áá˝ ááááš áá˝áá ᣠáĽá á¨áááľ áĽáŤá ááŁáááľ áŤáá áááł áĽáá˛áᢠᨠ"áłá" ááľáŁá áááłá áááľáá. áááľáᣠááá á°á¨á᪠á¨ááľá°áŁá á áá´ á áááááᢠá¨ááŤáľáááá áĽáá° áááᣠ"á˘áŤááľ á ááľ áá" ááľáľááá˝á á¨áá°áá á¨áááááľ á°áá áĽáť áá.
áá áá áááľá á¨áŤáą âááâ á áááĄ-
- á¨áááľ áĽáŤ á áááᎠá¨á áá á¨á°ááłá°á áááá: ááŤáŤáť ááľáŤáľ áŤáľáááá;
- á á°áá ááááá˛á áľáááśá˝ áľááłá ááá á¨áá˝á áá ááĽááľá áá°á á áľááá áááá á˘
- á ááá´ááą áľáá˝ á¨á°ááłá°á ááááᣠáĽá á°á¨á᪠á¨áááĽááľ á°áá ááááľ ááłáŤáá˘
- á°á¨á᪠á¨ááľáľá áĽá á¨á áľá°áłá°á ááłáŞáŤáá˝ áŤáľáááá (ááá áĽááłá á á á ááá áá áĽáŠ á˘ááá á¨áľáááľ á áááááľ áĽáŤáľ áá¨ááŤá).
ááááá˛á áľáááśá˝, "Sag" ááá áá áá¨áááŤá á áŁá ááá˝ á áá°áá. ááááᎠá°ááŞáľ áĽá ááá˝ SOA ᣠááááŁáľ ááľááá á°áá á á ᣠáĽá á ááŽáááą ááááŞáŤ áá áá ááĽááľ á¨áá áá ᾠᣠáá áá ááľá á¨áá áá áĽá ááš á¨ááłáą á áĽá á áá áᥠáá˝áá ᣠá á°ááá á áááľ á áááᎠááľáĽ ááš á¤áá á áŤáᢠá°á¨á.
á áááᎠá áááááśá˝ ááľáĽ á¨áááľ áááá áá ááá
á áááᎠá°ááŞáľ ááá¨á áľáááá ááááŤáłá áĽáŤá á°ááłáĄ á¨á፠áááĽá áááááľ á¨ááŤá¨ááἠá áááááľ áá á á°áŤáŤá á¨á፠áááľ á áááᎠá¨áľ áá ááľááἠáŤáá áľ?
á¨á°ááŤáŠ á˘áá¤áá¤áľáá˝á á ááá´áá¸á áľáááá¨áľáŁ á¨áááľ áááá á¨á ááľ ááá¨áľ ááááŤáłá áááľá áá˝ááᥠá¨ááľá¨á ááĽááĽá áĽá á¨á፠áá á¨áá áááᎠá áááááśá˝ á¨á፠á˘áááľ áááá áááľáá¸á á áŤáŁá˘ áĽá ááŤáŁ ááá áŠáŁ áĽá á¨á፠áááĽá á˝ááľ áĽáá° á áŁá ááá áĽá ááá ááĽá°áľ áŤáá¸á áááᎠá°ááŞáľ á¨á°áᨠááĽááĽá. á áá ááłá áá á¨áááľ áĽáŤ áá°áśá˝ á¨ááááľ ááĽááĽá á áááááśá˝á áŚááŹáľáľáŤ áŤá¨áááá.
áá á ááŤá¨áĽ á áŁá áľáá áĽá á á áá: á¨ááááľá áŤá á á¨ááľá¨áá á°ááŁáŤáááľ ááłá°á áá˝áá, áĽá á°ááłá á¨ááľá¨á áááᎠá°ááŞáľ á˝áá áĽáť á¨áá "áľáĽ" áááá. á¨á¨áľááá á፠á¨ááᥠá¨áááľ áá°áśá˝ áá áĽáá°ááá á¨ááłáŞáŤ áľáááąá á á˛áąá á°ááŁá áá áá áá˝ááá˘
á¨á áá áááá áĽááľ á¨áá áá´ ááá ááłáśá˝á á áłááˇá-
- á¨áĽá ááŤáá˝á á¨áááľ á áááᎠá á ááľ áá á¨ááŤáľáá˝á á¨ááľá¨á á áááááľ áĽáá° á ááľ á¨ááľááľ ááĽáĽ áľáá á á°ááá˝á áŤáľá¨áľááᢠá á˘áááľ á áááᎠáá á°á°ááá áááŚá˝ áá° áľáá á°-á°á ááľááśá˝ á¨ááŤáአáľá á°áśá˝á á¨áááἠáĽáľáá áá¨ááŤá;
- á¨á ááťá¸á ááłáŽá˝áĄ á¨áááľ á áááᎠá¨ááᥠáá á á áŁáĽ áĽá áááá á áááá˝ áá°áŤááĄ
- ááᥠáĽáá°áá ááŁá áá áĽá á á ááłá¨áá¨áĽ ááá ááľáĽ áááŁá áŁ
- á á áááááą ááŤá á¤áá á á°á¨á áá áŤá áĽáŤááá˝á ááááŤáľ á á á á á áŁáááአá¨á፠á áááááľ ááááľ á áááᎠáá°áľ á¨ááŤáľáááá á áá áĽá áá¨ááá˝á áá°áŁáá˘
- á ááŤáł áááá°á á¨áááľ áĽáŤ á ááááŽáá˝ á°ááłáłá áááĽá áááľáŹáľ á°áááá áá áá áá˝áá (áá á˝áá á¨áá¸áἠá¨ááá-áá áááá˝á á áá¨áá ááááľ áá˝áá ᣠáá áá á¨á áá á ááá´áá¸áá áŤááłáľá áá áĽá á¨ááἠá°ááá ááľ áĽá á¨áá¸á፠ááľá ááľ á˝ááŽá˝ áááĽáŤá)
- á¨ááĽááľ á˝ááŽá˝áĄ-
- á ááľá¨á á áááááľ á¨á°á¨áḠááŁáááľ áŤáá á¨áááľ áĽáŤ áá°áśá˝ á¨á፠áá¨á áá á¨áááŁáŁá áá¸á ᣠáĽá áá áá á˝áá ááááłáľ ááá ááááśá˝ á¨áá á˘
- á¨á፠áá¨áá á¨ááĽááą áá áááľáĄ- á¨á፠áááľ á áááᎠááááŞáŤ á¨á ááá ááἠáľááááááľ áŤáŁáŤ á áá áááŚá˝á ááľá¨á á¨ááá á á°á°áŤá ááἠáá á¨ááľáľá ááἠááá áĽáá°áá˝á ááľáá¨áľ áŤáľááááᢠá¨áá áá¨áá áááľ á˝ááŠá ááááłáľ áá¨áłá, ááá áá áĽáá˛á ááááą áááľá á°á¨á᪠á á°ááá˝á áŤáľá¨áľáá áĽá á¨áľáááąá á á ááá á áľá°áááááľ ááááłá;
- á ááááá áľ áá á°á¨á᪠á˝ááŽá˝áĄ á á ááłááľ áááłáá˝ á¨á˝ááľ á áááááľ áĽá á¨áááľ á áááᎠá á°ááłáłá áá ááá á áĽáĽá á á°á á°á¨á°á áááá á ááŁá¸áá˘
á áá¨á¨áťáŁ áá° áá°á¨áłá áááŽá˝ ááááľ áá á¨áĽáᥠá¨á፠áá¨áá áĽá á¨áśááá áááľ á áááᎠáá° á ááľ áááᎠá áááááľ áá¸ááᢠáá á áŤááľ áááᎠá°ááŞáľ áĽáá° á¨áľáááą áá á áŤá áŤááá áááᤠááá áŤá°áááá áĽá á¨áá á¨á°á ááąáľá á˝ááŽá˝ á áŤááŁá. áá áĽáá˛á á ááť á áá°áĽááĄ-
- á¨áááľ á áááᎠ(á á°áá á¨á°á áá áĽáá áľáá´áá˝á áĽáá° á¨áááľ áá°áśá˝ á áŤá ááá á¨áĽ) áĽá á¨á¤áá á ááľá¨á á áááááśá˝á ááááááľ á¨á¤áá á á°á¨á áá ááľ áŤáľááááᢠáá¤áá á áááŚá˝áŁ áá° ááľ áĽá áá° áá á°áłááááľ á¨á áá áĽááá áá áááá˘
- á¨á˘áááľ á áááᎠá á áŤá áĽáá° áĽáŤááłááą á¨áĽáá á á áááááľ á áŤá ááá¨ááἠá°á¨á᪠á¨áŠáŤ áá á¤á°-ááťáááľ áá¨áá á áľááá áá, áĽá áá ááĽáá°áá ááááśáš á¤á°-ááťáááľ á áłá˛áľ ááľáááśá˝á áŤááŁá: áááááľ áĽá á ááľá°á á¨áá¸áááŞáŤ áĽáááá˝;
- á¨áááľ á áááᎠááá˘áá˝ á¨á¤á°-ááťá ááľ áľáŞáśá˝á áá¨áłá°á á ááŁá¸á-áááᎠá áááááľ áá¨á á áá áŤáá°á ááá ááááŁáľ áĽá áá áŤááá áľ á¨á¤á°-ááťáááľ áĽáŞáľ ááááᢠáá á á˛áľ áŁá áŞá ááá¨áá áŤáá°á á á áĽáá ááľ ááá áá˝áá áĽá á áľáŞáśá˝ ááŤá¨á á¨áááŁáŁá áááŚá˝ áŤá á¨áľáŽáá á¨á˘áááľ á áááᎠáá° á á˛áľ á¨á¤á°-áá˝áááľ áľáŞáśá˝ ááááá áá áá áá˝ááá˘
á¨ááľá¨á á áááááśá˝ ááĽááĽá á áĽáá°áá ááááľ á ááá´áá¸á ááľáĽá á á ᣠáá áá ááĽááĽá á¨á áá á áá á¨á፠á¨áááľ áĽáŤ á áááᎠáááľáá¸á፠ááŤáŁ á áááĽáá ᣠáá á áŤáŁá˘á áĽáť áá ᣠá¨áłáľ âá¨ááŁáŞáŤ áľáááľâ á°ááŁáŤáľá áá°áŁáᢠáĽáá˛á ááááą ááĽááĽá á¨ááŤáľáááá á¨á፠áááᎠá áááááľá ááá ááĽá°áľ ááá á á áĽáť áłááá á áľá°áłá°áá áááááá ááá áá.
áááłá, á áááľ áá°áśá˝ ááľáĽ á¨á°á áá áĽáá áľáá´áá˝ á°ááŁáŤáľá áŤáááŤá. ááá ááᣠá¨á°ááŁáŽá˝ áá á˛á°áŤ á°á ááá á á á ááá áááአááľáĽ á¨ááá ááŤáá˝ á¨á°ááŁáĄ á°ááŁáŤáľá áá¨áľ á áá áľáŁ áá áááľ á¨á፠á˘áááľ á áááᎠá¨á¸áł á°ááá á¨ááłáŞáŤ áľáááľ á°ááŁá áááᣠá áááááľ ááá á áá áľá˘ á áĽáá°áá ááááľ á ááľ ááľáĽ á¨áááľ áĽáŤ á ááááŽáá˝á ááá¨áľ á áŁá á˝áá áŤáá áľ áá ᣠáĽá áá á¨áá á ááá´áá¸á áá áľááááľ ááá˘
á áá°áá áŞáŤ ááᢠáááá˝ á áŠá á¨áááľ áá°áśá˝á áááááľ
á¨áá áĽáá°á°áááá á ááľ á°á á áĽáŠ áááľ áááłáááľ áá áĽáá˛á°ááá á¨áá°áá áŞáŤ ááᢠá¨áĽá á áááŹá˝áá˝ ááľá°ááĽá á¨áá°áá አá´áááŤá áĽá áá ááľáľá áŁá áŞáŤáľ áááá á áá áľá˘
á á°áá áá˝áá á¨á°ááá°ááá á áŁá á áľá¸á᪠á¨áá á¨áá á°áľ á˝áá ááááłáľ áĽááááᢠáá áśáľáľ áá°áá áŞáŤáá˝á á¨ááŤáŤáľáľ á¨"á¨ááł" á°ááŁá áááááŁáĽáŤááłááłá¸á á¨á°áá°ááá á¨á፠áľá á¨áááášá áľáĄ "app1", "app2", "app3".
á áĽáŤááłááą áá°áá áŞáŤ ááľáĽ á áá á°áľ á ááśáĄáľ á áŠá "áłáľ ááŤááľ" á¨áááአá¨áááľ áá°áśá˝ á°ááá¨áá. "áłáľ" á¨áá áľá áŤáá¸á áááááśá˝ áĽáá° áłáľ áá áŤá.
á¨á¨ááłá á áááľ:
- á¨ááááŞáŤá á°áŤáá˝ á áľáá᪠ááᢠááá˝ á°áŤáážá˝á áá° á¨ááłá áááĽáá, á¨ááłáá ááááŤá áĽá á ááááá áá ááŤá áá áá áá˝áá;
- ááá˝ á°áŤáážá˝ á á¨ááłá ááľáĽ áŤáá¸áá á°áłáľá áŤááá, áĽááľ á áĽááľ áĽá á¨ááááŞáŤáá á°áŤáá˝ "áá°ááá ";
- áłáąá á¨á°áá á á áá á°áŤááš áá á°áłáłá á°áŤáá˝ ááááŁá áĽá áłáąá ááĽáą áŤáľá°ááááᢠá á ááá á¨ááľá°ááááŤáá˝ áĽááľ ááá áŤá;
- áĽáŤááłááą á°áŤáá˝ á áĽáŤááłááą á¨áłáľ á áĽáĽá á¨ááááľ âááá áľâ á ááᢠááá á˛áŤáá á°áŤááš á¨ááłáá áá á áááŁáąá á ááľáłáá ;
- á°áŤááš áĽáťáá á¨á°á°á áá˛áŤáá áááŁáąá áŤáľáłááá;
- ááá á°áŤáážá˝ á˛áááą á¨ááááŞáŤá á°áŤáá˝ á¨ááłá áá áááá áŤáááᢠá¨ááłáá áá°á áĽá á¨á°á°á á¨ááłáá ááá ááá á¨ááłáá ááá¨áłá°á áááŤáá˘
áá áá á˝áá ááááłáľ á¨áĽáá DSL ááááľ áá°áśá˝ áĽá áááá, áá á á áŽáľáá ááľáĽ áŤááá á áááᎠá áľááš á áľááš áŚááá ááááá˝ áŤáľá˝ááá.
á¨ááááŞáŤá á°áŤáá˝ (á¨á¨ááłá áá᪠á ááŁá á¨ááłááá) á¨áááľ áá°áľ á áá°áá áŞáŤ1 áá°áá áŞáŤ ááľáĽ áá°áŤááĄ-
ááá á¨ááááŞáŤ á°áŤáá˝
import ru.krista.bpm.ProcessInstance
import ru.krista.bpm.runtime.ProcessImpl
import ru.krista.bpm.runtime.constraint.UniqueConstraints
import ru.krista.bpm.runtime.dsl.processModel
import ru.krista.bpm.runtime.dsl.taskOperation
import ru.krista.bpm.runtime.instance.MessageSendInstance
data class PlayerInfo(val name: String, val domain: String, val id: String)
class PlayersList : ArrayList<PlayerInfo>()
// ĐŃĐž кНаŃŃ ŃкСоПпНŃŃĐ° ĐżŃĐžŃĐľŃŃĐ°: инкапŃŃНиŃŃĐľŃ ĐľĐłĐž внŃŃŃонноо ŃĐžŃŃĐžŃнио
class InitialPlayer : ProcessImpl<InitialPlayer>(initialPlayerModel) {
var playerName: String by persistent("Player1")
var energy: Int by persistent(30)
var players: PlayersList by persistent(PlayersList())
var shotCounter: Int = 0
}
// ĐŃĐž докНаŃĐ°ŃĐ¸Ń ĐźĐžĐ´ĐľĐťĐ¸ ĐżŃĐžŃĐľŃŃĐ°: ŃОСдаоŃŃŃ ĐžĐ´Đ¸Đ˝ ŃаС, иŃпОНŃСŃĐľŃŃŃ Đ˛ŃоПи
// ŃкСоПпНŃŃаПи ĐżŃĐžŃĐľŃŃĐ° ŃООŃвоŃŃŃвŃŃŃогО кНаŃŃĐ°
val initialPlayerModel = processModel<InitialPlayer>(name = "InitialPlayer",
version = 1) {
// ĐĐž ĐżŃавиНаП, поŃвŃĐš игŃОк ŃвНŃĐľŃŃŃ Đ¸Đ˝Đ¸ŃиаŃĐžŃОП игŃŃ Đ¸ дОНМон ĐąŃŃŃ ĐľĐ´Đ¸Đ˝ŃŃвоннŃĐź
uniqueConstraint = UniqueConstraints.singleton
// ĐĐąŃŃвНŃоП Đ°ĐşŃивнОŃŃи, иС кОŃĐžŃŃŃ
ŃĐžŃŃĐžĐ¸Ń ĐąĐ¸ĐˇĐ˝ĐľŃ-ĐżŃĐžŃĐľŃŃ
val sendNewGameSignal = signal<String>("NewGame")
val sendStopGameSignal = signal<String>("StopGame")
val startTask = humanTask("Start") {
taskOperation {
processCondition { players.size > 0 }
confirmation { "ĐОдкНŃŃиНОŃŃ ${players.size} игŃОкОв. ĐĐ°ŃинаоП?" }
}
}
val stopTask = humanTask("Stop") {
taskOperation {}
}
val waitPlayerJoin = signalWait<String>("PlayerJoin") { signal ->
players.add(PlayerInfo(
signal.data!!,
signal.sender.domain,
signal.sender.processInstanceId))
println("... join player ${signal.data} ...")
}
val waitPlayerOut = signalWait<String>("PlayerOut") { signal ->
players.remove(PlayerInfo(
signal.data!!,
signal.sender.domain,
signal.sender.processInstanceId))
println("... player ${signal.data} is out ...")
}
val sendPlayerOut = signal<String>("PlayerOut") {
signalData = { playerName }
}
val sendHandshake = messageSend<String>("Handshake") {
messageData = { playerName }
activation = {
receiverDomain = process.players.last().domain
receiverProcessInstanceId = process.players.last().id
}
}
val throwStartBall = messageSend<Int>("Ball") {
messageData = { 1 }
activation = { selectNextPlayer() }
}
val throwBall = messageSend<Int>("Ball") {
messageData = { shotCounter + 1 }
activation = { selectNextPlayer() }
onEntry { energy -= 1 }
}
val waitBall = messageWaitData<Int>("Ball") {
shotCounter = it
}
// ТопоŃŃ ĐşĐžĐ˝ŃŃŃŃиŃŃоП ĐłŃĐ°Ń ĐżŃĐžŃĐľŃŃĐ° иС ОйŃŃвНоннŃŃ
Đ°ĐşŃивнОŃŃоК
startFrom(sendNewGameSignal)
.fork("mainFork") {
next(startTask)
next(waitPlayerJoin).next(sendHandshake).next(waitPlayerJoin)
next(waitPlayerOut)
.branch("checkPlayers") {
ifTrue { players.isEmpty() }
.next(sendStopGameSignal)
.terminate()
ifElse().next(waitPlayerOut)
}
}
startTask.fork("afterStart") {
next(throwStartBall)
.branch("mainLoop") {
ifTrue { energy < 5 }.next(sendPlayerOut).next(waitBall)
ifElse().next(waitBall).next(throwBall).loop()
}
next(stopTask).next(sendStopGameSignal)
}
// ĐавоŃаоП на Đ°ĐşŃивнОŃŃи дОпОНниŃоНŃĐ˝ŃĐľ ОйŃайОŃŃики Đ´ĐťŃ ĐťĐžĐłĐ¸ŃОваниŃ
sendNewGameSignal.onExit { println("Let's play!") }
sendStopGameSignal.onExit { println("Stop!") }
sendPlayerOut.onExit { println("$playerName: I'm out!") }
}
private fun MessageSendInstance<InitialPlayer, Int>.selectNextPlayer() {
val player = process.players.random()
receiverDomain = player.domain
receiverProcessInstanceId = player.id
println("Step ${process.shotCounter + 1}: " +
"${process.playerName} >>> ${player.name}")
}
á¨áááľ áĽáŤ á áááᎠá¨ááľáá¸á á á°á¨ááŞáŁ á¨áá áŤáá áŽáľ á¨áááľ áĽáŤ áá°áľá áá´á ááŤáᣠáá˝ááᣠáá á á áĽááá ááá፠ááá ááłáŤáᢠááľáá ááľá¨ááŤáá áĽáľáŤáá á áá°á°áá ááááᣠáľááá áĽáąá áááłá áľáá˝ áá ááłáá áá á¨áĽá (áĽáá áá á¨á˛áŤááŤáá ááĽááľ á¨á°á°á á áŽáľ áá áááťáťá á¨á á á á áááá á á°ááá¨á° ᨠBPMN ááľáłááťá á áľááš ááá á áľááááá)
app2 á¨áááá á°áŤáá˝ á¨áááľ áá°áľ áŤáŤáľáłááĄ-
ááá RandomPlayer
import ru.krista.bpm.ProcessInstance
import ru.krista.bpm.runtime.ProcessImpl
import ru.krista.bpm.runtime.dsl.processModel
import ru.krista.bpm.runtime.instance.MessageSendInstance
data class PlayerInfo(val name: String, val domain: String, val id: String)
class PlayersList: ArrayList<PlayerInfo>()
class RandomPlayer : ProcessImpl<RandomPlayer>(randomPlayerModel) {
var playerName: String by input(persistent = true,
defaultValue = "RandomPlayer")
var energy: Int by input(persistent = true, defaultValue = 30)
var players: PlayersList by persistent(PlayersList())
var allPlayersOut: Boolean by persistent(false)
var shotCounter: Int = 0
val selfPlayer: PlayerInfo
get() = PlayerInfo(playerName, env.eventDispatcher.domainName, id)
}
val randomPlayerModel = processModel<RandomPlayer>(name = "RandomPlayer",
version = 1) {
val waitNewGameSignal = signalWait<String>("NewGame")
val waitStopGameSignal = signalWait<String>("StopGame")
val sendPlayerJoin = signal<String>("PlayerJoin") {
signalData = { playerName }
}
val sendPlayerOut = signal<String>("PlayerOut") {
signalData = { playerName }
}
val waitPlayerJoin = signalWaitCustom<String>("PlayerJoin") {
eventCondition = { signal ->
signal.sender.processInstanceId != process.id
&& !process.players.any { signal.sender.processInstanceId == it.id}
}
handler = { signal ->
players.add(PlayerInfo(
signal.data!!,
signal.sender.domain,
signal.sender.processInstanceId))
}
}
val waitPlayerOut = signalWait<String>("PlayerOut") { signal ->
players.remove(PlayerInfo(
signal.data!!,
signal.sender.domain,
signal.sender.processInstanceId))
allPlayersOut = players.isEmpty()
}
val sendHandshake = messageSend<String>("Handshake") {
messageData = { playerName }
activation = {
receiverDomain = process.players.last().domain
receiverProcessInstanceId = process.players.last().id
}
}
val receiveHandshake = messageWait<String>("Handshake") { message ->
if (!players.any { message.sender.processInstanceId == it.id}) {
players.add(PlayerInfo(
message.data!!,
message.sender.domain,
message.sender.processInstanceId))
}
}
val throwBall = messageSend<Int>("Ball") {
messageData = { shotCounter + 1 }
activation = { selectNextPlayer() }
onEntry { energy -= 1 }
}
val waitBall = messageWaitData<Int>("Ball") {
shotCounter = it
}
startFrom(waitNewGameSignal)
.fork("mainFork") {
next(sendPlayerJoin)
.branch("mainLoop") {
ifTrue { energy < 5 || allPlayersOut }
.next(sendPlayerOut)
.next(waitBall)
ifElse()
.next(waitBall)
.next(throwBall)
.loop()
}
next(waitPlayerJoin).next(sendHandshake).next(waitPlayerJoin)
next(waitPlayerOut).next(waitPlayerOut)
next(receiveHandshake).next(receiveHandshake)
next(waitStopGameSignal).terminate()
}
sendPlayerJoin.onExit { println("$playerName: I'm here!") }
sendPlayerOut.onExit { println("$playerName: I'm out!") }
}
private fun MessageSendInstance<RandomPlayer, Int>.selectNextPlayer() {
val player = if (process.players.isNotEmpty())
process.players.random()
else
process.selfPlayer
receiverDomain = player.domain
receiverProcessInstanceId = player.id
println("Step ${process.shotCounter + 1}: " +
"${process.playerName} >>> ${player.name}")
}
áĽáá
á áá°áá áŞáŤ 3 á áááŹá˝á ááľáĽ áľáá˝ áá¨áľ áŤá áŁá ᪠áŤáá á°áŤáá˝ áĽáá°áŤááᥠá á ááŁá á¨áááĽááá á°áŤáá˝ á¨ááá¨áĽ ááá á áἠáŽá˘á áľáá° ááá áá°á¨áľ áá°áŤááĄ
ááá RoundRobinPlayer
import ru.krista.bpm.ProcessInstance
import ru.krista.bpm.runtime.ProcessImpl
import ru.krista.bpm.runtime.dsl.processModel
import ru.krista.bpm.runtime.instance.MessageSendInstance
data class PlayerInfo(val name: String, val domain: String, val id: String)
class PlayersList: ArrayList<PlayerInfo>()
class RoundRobinPlayer : ProcessImpl<RoundRobinPlayer>(roundRobinPlayerModel) {
var playerName: String by input(persistent = true,
defaultValue = "RoundRobinPlayer")
var energy: Int by input(persistent = true, defaultValue = 30)
var players: PlayersList by persistent(PlayersList())
var nextPlayerIndex: Int by persistent(-1)
var allPlayersOut: Boolean by persistent(false)
var shotCounter: Int = 0
val selfPlayer: PlayerInfo
get() = PlayerInfo(playerName, env.eventDispatcher.domainName, id)
}
val roundRobinPlayerModel = processModel<RoundRobinPlayer>(
name = "RoundRobinPlayer",
version = 1) {
val waitNewGameSignal = signalWait<String>("NewGame")
val waitStopGameSignal = signalWait<String>("StopGame")
val sendPlayerJoin = signal<String>("PlayerJoin") {
signalData = { playerName }
}
val sendPlayerOut = signal<String>("PlayerOut") {
signalData = { playerName }
}
val waitPlayerJoin = signalWaitCustom<String>("PlayerJoin") {
eventCondition = { signal ->
signal.sender.processInstanceId != process.id
&& !process.players.any { signal.sender.processInstanceId == it.id}
}
handler = { signal ->
players.add(PlayerInfo(
signal.data!!,
signal.sender.domain,
signal.sender.processInstanceId))
}
}
val waitPlayerOut = signalWait<String>("PlayerOut") { signal ->
players.remove(PlayerInfo(
signal.data!!,
signal.sender.domain,
signal.sender.processInstanceId))
allPlayersOut = players.isEmpty()
}
val sendHandshake = messageSend<String>("Handshake") {
messageData = { playerName }
activation = {
receiverDomain = process.players.last().domain
receiverProcessInstanceId = process.players.last().id
}
}
val receiveHandshake = messageWait<String>("Handshake") { message ->
if (!players.any { message.sender.processInstanceId == it.id}) {
players.add(PlayerInfo(
message.data!!,
message.sender.domain,
message.sender.processInstanceId))
}
}
val throwBall = messageSend<Int>("Ball") {
messageData = { shotCounter + 1 }
activation = { selectNextPlayer() }
onEntry { energy -= 1 }
}
val waitBall = messageWaitData<Int>("Ball") {
shotCounter = it
}
startFrom(waitNewGameSignal)
.fork("mainFork") {
next(sendPlayerJoin)
.branch("mainLoop") {
ifTrue { energy < 5 || allPlayersOut }
.next(sendPlayerOut)
.next(waitBall)
ifElse()
.next(waitBall)
.next(throwBall)
.loop()
}
next(waitPlayerJoin).next(sendHandshake).next(waitPlayerJoin)
next(waitPlayerOut).next(waitPlayerOut)
next(receiveHandshake).next(receiveHandshake)
next(waitStopGameSignal).terminate()
}
sendPlayerJoin.onExit { println("$playerName: I'm here!") }
sendPlayerOut.onExit { println("$playerName: I'm out!") }
}
private fun MessageSendInstance<RoundRobinPlayer, Int>.selectNextPlayer() {
var idx = process.nextPlayerIndex + 1
if (idx >= process.players.size) {
idx = 0
}
process.nextPlayerIndex = idx
val player = if (process.players.isNotEmpty())
process.players[idx]
else
process.selfPlayer
receiverDomain = player.domain
receiverProcessInstanceId = player.id
println("Step ${process.shotCounter + 1}: " +
"${process.playerName} >>> ${player.name}")
}
á áá áá፠á¨á°áŤááš áŁá ᪠á¨ááłáá á áááá, áľááá áľáá á ááááĽá.
á áá áá áá áá áááľáŹáľ áá°á áŤáľááááá. á¨áá°ááá áŽáľ áĽáť áĽá°áŁáá ᣠá˝ááá á áŚááá áłá áá˝ áĽááłáŤá°áá á (á áĽááἠᣠá¨ááá˝á á¨áááľ áá°áśá˝ áá á°áľ áááá°á˝ áá°á á˛á á¨á°áá á¨áá á¨áá¨áŤ á áŤáŁá˘ á°á áááŠ)
á¨áá¨áŤ á¨ááł()
@Test
public void testGame() throws InterruptedException {
String pl2 = startProcess(app2, "RandomPlayer", playerParams("Player2", 20));
String pl3 = startProcess(app2, "RandomPlayer", playerParams("Player3", 40));
String pl4 = startProcess(app3, "RoundRobinPlayer", playerParams("Player4", 25));
String pl5 = startProcess(app3, "RoundRobinPlayer", playerParams("Player5", 35));
String pl1 = startProcess(app1, "InitialPlayer");
// ТопоŃŃ Đ˝ŃМнО ноПнОгО пОдОМдаŃŃ, пОка игŃОки "пОСнакОПŃŃŃŃ" Đ´ŃŃĐł Ń Đ´ŃŃгОП.
// ĐĐ´Đ°ŃŃ ŃĐľŃоС sleep - пНОŃ
Оо ŃĐľŃонио, СаŃĐž ŃаПОо ĐżŃĐžŃŃОо.
// ĐĐľ доНаКŃĐľ ŃĐ°Đş в ŃĐľŃŃоСнŃŃ
ŃĐľŃŃĐ°Ń
!
Thread.sleep(1000);
// ĐĐ°ĐżŃŃкаоП игŃŃ, СакŃŃĐ˛Đ°Ń ĐżĐžĐťŃСОваŃоНŃŃĐşŃŃ Đ°ĐşŃивнОŃŃŃ
assertTrue(closeTask(app1, pl1, "Start"));
app1.getWaiting().waitProcessFinished(pl1);
app2.getWaiting().waitProcessFinished(pl2);
app2.getWaiting().waitProcessFinished(pl3);
app3.getWaiting().waitProcessFinished(pl4);
app3.getWaiting().waitProcessFinished(pl5);
}
private Map<String, Object> playerParams(String name, int energy) {
Map<String, Object> params = new HashMap<>();
params.put("playerName", name);
params.put("energy", energy);
return params;
}
áá°ááá áĽááŤááľá ááááĄá áĽáááá¨áľáĄ-
á¨áŽááśá áá ááľ
ĐСŃŃĐ° йНОкиŃОвка кНŃŃĐ° lock://app1/process/InitialPlayer
Let's play!
ĐĄĐ˝ŃŃĐ° йНОкиŃОвка кНŃŃĐ° lock://app1/process/InitialPlayer
Player2: I'm here!
Player3: I'm here!
Player4: I'm here!
Player5: I'm here!
... join player Player2 ...
... join player Player4 ...
... join player Player3 ...
... join player Player5 ...
Step 1: Player1 >>> Player3
Step 2: Player3 >>> Player5
Step 3: Player5 >>> Player3
Step 4: Player3 >>> Player4
Step 5: Player4 >>> Player3
Step 6: Player3 >>> Player4
Step 7: Player4 >>> Player5
Step 8: Player5 >>> Player2
Step 9: Player2 >>> Player5
Step 10: Player5 >>> Player4
Step 11: Player4 >>> Player2
Step 12: Player2 >>> Player4
Step 13: Player4 >>> Player1
Step 14: Player1 >>> Player4
Step 15: Player4 >>> Player3
Step 16: Player3 >>> Player1
Step 17: Player1 >>> Player2
Step 18: Player2 >>> Player3
Step 19: Player3 >>> Player1
Step 20: Player1 >>> Player5
Step 21: Player5 >>> Player1
Step 22: Player1 >>> Player2
Step 23: Player2 >>> Player4
Step 24: Player4 >>> Player5
Step 25: Player5 >>> Player3
Step 26: Player3 >>> Player4
Step 27: Player4 >>> Player2
Step 28: Player2 >>> Player5
Step 29: Player5 >>> Player2
Step 30: Player2 >>> Player1
Step 31: Player1 >>> Player3
Step 32: Player3 >>> Player4
Step 33: Player4 >>> Player1
Step 34: Player1 >>> Player3
Step 35: Player3 >>> Player4
Step 36: Player4 >>> Player3
Step 37: Player3 >>> Player2
Step 38: Player2 >>> Player5
Step 39: Player5 >>> Player4
Step 40: Player4 >>> Player5
Step 41: Player5 >>> Player1
Step 42: Player1 >>> Player5
Step 43: Player5 >>> Player3
Step 44: Player3 >>> Player5
Step 45: Player5 >>> Player2
Step 46: Player2 >>> Player3
Step 47: Player3 >>> Player2
Step 48: Player2 >>> Player5
Step 49: Player5 >>> Player4
Step 50: Player4 >>> Player2
Step 51: Player2 >>> Player5
Step 52: Player5 >>> Player1
Step 53: Player1 >>> Player5
Step 54: Player5 >>> Player3
Step 55: Player3 >>> Player5
Step 56: Player5 >>> Player2
Step 57: Player2 >>> Player1
Step 58: Player1 >>> Player4
Step 59: Player4 >>> Player1
Step 60: Player1 >>> Player4
Step 61: Player4 >>> Player3
Step 62: Player3 >>> Player2
Step 63: Player2 >>> Player5
Step 64: Player5 >>> Player4
Step 65: Player4 >>> Player5
Step 66: Player5 >>> Player1
Step 67: Player1 >>> Player5
Step 68: Player5 >>> Player3
Step 69: Player3 >>> Player4
Step 70: Player4 >>> Player2
Step 71: Player2 >>> Player5
Step 72: Player5 >>> Player2
Step 73: Player2 >>> Player1
Step 74: Player1 >>> Player4
Step 75: Player4 >>> Player1
Step 76: Player1 >>> Player2
Step 77: Player2 >>> Player5
Step 78: Player5 >>> Player4
Step 79: Player4 >>> Player3
Step 80: Player3 >>> Player1
Step 81: Player1 >>> Player5
Step 82: Player5 >>> Player1
Step 83: Player1 >>> Player4
Step 84: Player4 >>> Player5
Step 85: Player5 >>> Player3
Step 86: Player3 >>> Player5
Step 87: Player5 >>> Player2
Step 88: Player2 >>> Player3
Player2: I'm out!
Step 89: Player3 >>> Player4
... player Player2 is out ...
Step 90: Player4 >>> Player1
Step 91: Player1 >>> Player3
Step 92: Player3 >>> Player1
Step 93: Player1 >>> Player4
Step 94: Player4 >>> Player3
Step 95: Player3 >>> Player5
Step 96: Player5 >>> Player1
Step 97: Player1 >>> Player5
Step 98: Player5 >>> Player3
Step 99: Player3 >>> Player5
Step 100: Player5 >>> Player4
Step 101: Player4 >>> Player5
Player4: I'm out!
... player Player4 is out ...
Step 102: Player5 >>> Player1
Step 103: Player1 >>> Player3
Step 104: Player3 >>> Player1
Step 105: Player1 >>> Player3
Step 106: Player3 >>> Player5
Step 107: Player5 >>> Player3
Step 108: Player3 >>> Player1
Step 109: Player1 >>> Player3
Step 110: Player3 >>> Player5
Step 111: Player5 >>> Player1
Step 112: Player1 >>> Player3
Step 113: Player3 >>> Player5
Step 114: Player5 >>> Player3
Step 115: Player3 >>> Player1
Step 116: Player1 >>> Player3
Step 117: Player3 >>> Player5
Step 118: Player5 >>> Player1
Step 119: Player1 >>> Player3
Step 120: Player3 >>> Player5
Step 121: Player5 >>> Player3
Player5: I'm out!
... player Player5 is out ...
Step 122: Player3 >>> Player5
Step 123: Player5 >>> Player1
Player5: I'm out!
Step 124: Player1 >>> Player3
... player Player5 is out ...
Step 125: Player3 >>> Player1
Step 126: Player1 >>> Player3
Player1: I'm out!
... player Player1 is out ...
Step 127: Player3 >>> Player3
Player3: I'm out!
Step 128: Player3 >>> Player3
... player Player3 is out ...
Player3: I'm out!
Stop!
Step 129: Player3 >>> Player3
Player3: I'm out!
á¨áá áá áĽá á áá áá°áá°ááŤáá˝á ááľá¨á áĽáá˝ááá-
- á áľááá á¨áá ááłáŞáŤáá˝ áá á¨áá°áá áŞáŤ ááá˘áá˝ á¨áááľ á áááᎠáłáŤááᥠá áá°áá áŞáŤáá˝ ááŤá¨á á¨áá á°áľ áááááśá˝á ááá á áá˝áá á˘
- á¨á˘ááááŞáá áĽááśá˝á á¨ááŤáľáááá á¨áá á°áľ á°ááŁá ááľáĽáľáĽááľ á áááá ááľáĽ áá á ááááŞáŤ á á ááá ááľáĽ á¨á°áŤá°á° áá°á á áá˝ááᢠá¨á˝áá á˝áá áá°á á á áá˝áá, áľááá á áŽáľ ááľáĽ áá á áľá¸á᪠á˝áá áááľáá áá á áááľáá;
- á¨áá á°áľ á áááᎠá˛áłáĽáᣠáá á áľáŽ ááĽááľ áŤáá áĽá á ááá á¨áá á°áľ á°áłáłááá˝ áááł áá áŤá áááŚá˝ á¨ááľáá á áááťáá áááľ ááľáĽ ááľááŁáľ á áľááá ááᢠáá ááŤá ááľá°áśá˝ á ááá áŠá áľ á á°á á°á¨á°á áá ááľá¨áá˝ áááľá¨á á áááᎠááľáĽáľáĽ áĽááľááá áŤáľááľá°ááᢠá áĽá ááłá, á°áŤááš á¨á¨ááłá áááŁáąá áŤáá á áá á á¨ááłá ááľáĽ áááłá°á ááá°áłá: ááá˝ á°áŤáážá˝ áľá áááŁáą áá¨áá áĽáľáŞá°ááľ áĽá á ááá á°áłáłááá˝ áĽáľáŞá°áŤ áľá¨áľ áłáąá ááľá°áááá¸áá áááĽáá. áá á áááᎠá¨á¨ááłá á áááľ á¨á°á¨á°á á áá°áá áĽá á á°áá¨á á á ááá´áá¸á áááá ááľáĽ á¨áľááááľ áááľá ááá˘
á ááá á áľá á¨áááľááŤá˝á á¨á°ááŤáŠ ááľáĽáľáĽ áááŽá˝, áľááááśá˝ áĽá ááá˝ ááĽáŚá˝ áĽáááááŤáá.
ááá áááááśá˝ á á ááľ áá¨á ááľáĽ áá¸áá˘
ááá á¨á°ááá á áááŹá˝áá˝ á¨á ááľ á¨áá á°áľ á ááśáĄáľ áá áá°áŤáᣠáĽáąá á á᪠á°áá áááᣠá ááľ BPMQueue ááááĽááśá˝ áĽá á ááľ BPMTopic áááľ áá˛áááá˝ (ááá áśá˝)ᢠáááá áááĽááśá˝ á á ááľ áá¨á ááľáĽ ááľááἠá áŤáą áľááááľ ááᢠá á˘áááľ á áááᎠá°á¨áᣠá áá á áľáááą ááá á áá áááŚá˝á áłáŤá°áá á¨ááááľá áŤá á á áłá˛áľ á¨áááĽááľ á áááśá˝á ááľá°ááá áá˝ááᢠáá ááá á¨áá áá áá áá, ááá áá á¨á°áá°á á á°ááá˝á áááá, áá á á á°ááá°á á°ááŁáŽáťá˝á á ááľ ááľáĽ ááĽá áŤá áŤá á á áľááá á áááľáá áá á.
ááá ááᣠáĽáá á ááľ á¨áá ááá á áᥠáĽáŤááłááą áá°áá áŞáŤ á ááá˘áŤá áá áŤáá áá¨á âá¨áąáâ áááááśá˝á á ááŤá áľá áŤáŁáŤáᢠááááąá "á¨áłáááľ áá°á" áá° á ááľ áá á áá°áá áŞáŤ ááá°áĽ áŤáľáááá á፠á á˛áááá˝ ááľáĽ áááá˝ áá˝ááᢠáá á¨á ááśáĄáľ áá°áľ áá¨áá á áá áľ, ááá áá á¨áááľ á áááᎠá áá á á፠áľáá˝ ááľáŤáľ á áá áľ: áááááśá˝á áááľá°áááľ - á áľááłá , áá˛áááá˝ - á°ááá.
á¨áá á°áľ á ááśáĄáľ á áľá°áááááľá áá¨áááĽ
á áľá°áááááľ áĽá ááĽáŚá˝á áŤáá áá-
- á¨á°áá¨á á áááĽááľ á°áá á¨áááá ááłá á áŤá áĽá á ááľ á¨ááľááľ ááĽáĽ ááᥠá á á áááł áľá á°áľá á¨áááá ááá á áá áľá˘ á áĽáŠ áľáá áĽá áľáá áá á á¨á°áĽ á áá á¨á°áá¨áŠ á á°ááŁá ááá˝á áĽáť áá áá á ááĽááľ;
- á¨áááĽááľ á°áá á¨áá°á á°ááááľá áá¨ááἠá áľááá áá ᣠááá á á á áŤá á¨á°áááą á áááŹá˝áá˝ ááá¨áľ á áá áľ (á á°ááŁáŤá á¨áááľ ááá á¨áá°á á¨áá°áá áŞáŤáá˝ ááááľ áá¨ááἠá¨á áá á¨áŁáľ áĽá ááľ áá);
- á°ááá "á˘áŤááľ á ááľ áá" á¨áááŞáŤ ááľáľááá˝á á¨ááľá áľ áá´áł á áá áľ. áá á¨áá á°áľ á ááśáĄáą á áľá°ááá áľáŤ áááľáŤáľ á¨áá´áł ááľáááľ ááᢠ"á áľááá á ááľ áá" á°á¨á ááľáľááá˝ á áŤáľáááá: á¨áááľ áá°áśá˝ áĽáá° á ááľ á°ááĽ, ááááĽááśá˝ ááá áááá áśá˝ á°á°ááá áááŁáľ áľááłá á áá°áá, áĽá áá á áľááá á áááá áľ áአá°ááŁáŤáľ ááľáĽ, á°á¨á᪠áźáŽá˝á áá° áááą ááá¨áá ááá áá. á áŁá ááľ á¨áá ááľáľááá˝á áŤáááá¨áĽ á¨áá áá ááá á ááááŽ;
- áááááśá˝á áĽá ááááśá˝á ááá á áááľ áá°áśá˝ áááł áĽá á¨á፠ááἠáááŚá˝ áá á á á ááá ááĽááľ ááľáĽ ááłá°á á áá áľá˘ á¨ááá¨á á á ááŤá áľááá°-áĽááľ áá áá áá
á¨ááĽááľ áłáĽá , ááá áá á áá¨á ááą ááľáĽ á°á¨á᪠á°áá á¨áĽ áĽá á°á°ááá áŤáľááááá. á áᢠá áááŹá˝áá˝ ááľáĽáŁ áá á á áŤáŁá˘áŤá á¨áá˛á¤ áľáŤ á áľáŞáŤá á áá áá áá áá ááťááᣠááá áá á¨á°áá¨á á á°áá áá áŤáá áááááľ ááľáŤáľ ááťá á áá áľá˘XA ; - á¨áᢠáááááśá˝ áĽá ááľá°áśá˝ á°ááŁáŁáŞáá˝ áĽáá˛á á¨áááľ áá°áąá áááł á¨áááἠááĽááľ áá ááĽáŤáľ á ááŁá¸á-áĽáá˛á ááááą ááĽááľ á°áááś á¨á°ááá° á¨áááĽááą á°á¨á°á áá°á¨á á áá áľ áŁ
- á áľá
á°áśá˝ ááááŤáľ áá°ááą á¨ááá˝á áááááśá˝ á á°áᨠáá¨ááť ááľáĽ áááἠá ááŁá¸á
á˛.á¤á.á. (á¨áá° á°áĽáłá¤ áá¨á)ᢠááá áááᣠáĽáá°áá áŤá áááááśá˝á á áá¨ááťá ááľáĽ á¨ááŤá¨áá˝áŁ á áŁá áŞáŤáľ (áááŁá áľáĽáľáĽ áĽá ááá) á¨áá áá áĽá á¤áá áá ááá¨áľáŁ áá° ááľá¨áť á áľáŤáť á¨ááá áĽá áááááśá˝á á¨áá°áá á¨á°áᨠá¨ááŁáŞáŤ áľáááľ áááᎠá°ááŞáľ ááĽá¨ááᢠá¨áľáááľ á áľá°áłáłáŞáá˝ á¨áá á áááááľ áá á áľá á áááá˝ áá°áŠ áá˝áá; - á á°áá á áá áśá˝ ááľáĽ áá° DLQ á¨áááŁáľ áĽáľáá áááááľ á¨áááŞáŤ áá¨áŤáá˝á áĽá á áááŞáŤáá˝ ááŤá¨á áááá¨áśá˝á ááľá°áŤá¨á áŤáľáááááłá (ááἠáááŞáŤáá˝á áááľááľ áá˝á á¨áááťá áá ᣠáá á á°ááŁáŤá áááł ááĽáŤáľ áĽá á áá áŤá áľ áá áĽááąá ááľá°áŤá¨á áá˝áá) );
- á¨á˛á¤ááŞá áá¨ááť áŤáááá¨áĽ ááľáľá áá°á¨áá áľ áááŁáᣠáĽá á¨ááľáľá áľáááą á¨áľáááľ á áľá°áłáłáŞáá˝á ááłáá á áá áľ áľááá áŤáá°áአáááĽááśá˝ á˛á¨á°áą á á°áťá ááĽááľ ááá˝ ááľá áľ áá˝ááᢠáá ááľááľ ááá á¨áááľ ááá áľá á°áľ "á¨á°ááłáá á áŤáŁá˘" ááááłá;
- á¨áá á°áľ á ááśáĄáą ááááŤá á¨áá°áá áŞáŤáá˝ áá á¨áľ ááľá¨áá˝ ááá á áá áľáĄ áá ááľ áááľ ááááἠááá ááá á áá áľ áĽá á¨áá°áá áŞáŤá áľá áአááá á áá áľ áľááá á áááŹá˝á á ááááá áľ áá áá á°á áááĽááśášá áááľáŹáľ á áááááᢠáá¨á
á¨áááľ ááá áá á°á áááľ áá¨áááĽ
á¨áááľ áĽáŤ áá°áľ á°ááłáłá ááłá á á ááľ áá áĽá áááááśá˝á áĽá ááľá°áśá˝á ááá á áá˝áá ᣠáá á áá°áľ á áľáአááááŤáᢠá á°ááłáłá áá, ááá°áá áŞáŤ ááá˘, ááá ááá ááá áĽá áá-á áľá°ááá ááá á áá áľ.
á¨áá°áą á¨áááľ á áááᎠáŤáá á¨áááľ áá°áľ á á°ááĽá á¨áááłáá áĽáŤááłááąá ááŤá ááľá°áľ áŤáľáŹáłáᢠáĽáá°áá áŤá ááľá°áśá˝ ááá áá˝áá-
- á¨áááľ áĽáŤ áá°áľ ááłá áááá;
- á áááľ áá°áľ ááľáĽ áŤáá áĽáá áľáá´ áá á¨á°áŤáŤá á¨á°á áá áĽááá;
- á¨áááľ áĽáŤ áá°áľ ááłá á¨á°áááá á áľ áááĽááľ ááá ááááľ ááá á;
- á áááľ áá°áľ ááłá á¨á°ááá á°ááľ ááŁáŞ áááľááľ;
- á á¤áá á á áŠá áĽáááá áááŁá አ(áááłá á¨áá°áą ááá¨áĽ)á˘
áĽáŤááłááą áĽáá°áá áŤá ááľá°áľ á¨áááľ áĽáŤ áá°áľ áááłá áááἠáá˝áá-á ááłááľ áĽáá áľáá´áá˝ ááŤá á áĽá ááá˝ áááአáá˝áá áĽá á¨áá ááĽá¨áśá˝ áĽá´áśá˝ áááᥠáá˝ááᢠáááááá áĽáá áľáá´ ááááľ á¨áá¨á°ááľ á°ááŁáŤáľ ááľáĽ á ááąá ááá á¨á፠á áá áĽáá˛áá ááŤá°áá áá˝ááᢠáĽáááŤ, á á°áŤá, ááá˝ ááľá°áśá˝á áá á á ááá áá˝áá ááá ááá á°á¨á᪠ááἠá¨ááŤáľáááá¸á á¨áá, á á°ááłáłá ááĽááľ ááľáĽ áá ááá áá˝áá. ááĽááąá á¨ááááą á ááľ, á¨áááľ áĽáŤá á á˛áľ áááł á áá¨á ááą ááľáĽ á°ááá§á, á¨áááĽáá á¨áá ááľá°áľ áĽáľáŞá¨á°áľ áľá¨áľ áá áĽáá.
á áááááľ áłáłá¤á ááľáĽ á¨á°á¨áḠááŁáááľ áŤáá á¨áááľ áĽáŤ áá°áľ ááἠááááá áá¨áĽ á¨á°á áá áá°áľá ááááłá°á á áŁá ááš ááĽáĽ ááᢠá ááľ ááĽááľ ááááἠá¨áá á¨áą á¨áááľ áĽáŤ áá°áľá áááł ááááľ á¨áťá ᣠá áľáአááá ááááľ ááĽááľ ááá ááἠá°ááłáłá áááł ááááľ á áá˝áá ᣠáĽá á¨ááááŞáŤá ááĽááľ á¨á°á ááá á áá ᣠááá°áá - ááľááá á¨á°ááá áá áááł áááá á ááľáľá á°á°áĽáśáłá.
á á˛á˘á¤áá¤áľ á áŠá á ááŤá˝ áááááŤáá˝á á áá áá áááá á áľááá ááľáááśá˝ áĽáááááá˘
ááá ááᣠá°áľá á áľááŤá áááááŤáá˝ á¨ááá፠áááááŤáá˝á áŤáľááŤáŠááᣠáá áááľ á á˘áááľ á áááᎠááľáĽ á á ááłááľ á¨áŁáľ ááłáŽá˝ áá á¨ááľ áááááŤáá˝ á¨á°á¨á°áą áááá áá¨áĽ á ááá áá°áá°á ááááŤáłá áá ááĽááľ á áá áľá˘
ááá á˝áá á¨áááľ áĽáŤ á áá áááłá°á áá. á¨áááľ áĽáŤ áá°áľ ááá ááááľ áááł áŁáááá, á ááἠááł ááľáĽ ááá áááľ á¨áá, áľááá á¨á°ááá¸á áá´ á áá°áŤá. á á ááľ á¨á°áá°á áá°á ááľáĽ á¨áááľ áĽáŤ áá°áľ ááłáá ááŠááľ áá¨ááἠá¨ááá á¨áá°áą ááá áĽá á¨á°ááá áá°á áá á¨á°áŤáŤá á ááľ ááááľ á¨áááłá°á ááá áŤáľáááááłáᢠáá áá á˝áá ááááłáľ á ááŤá á áááááľ á áŠá á áŠá áá á á áá¸áľ á á°áááá á¨áááá° ááĽááľ áá áááá፠áĽááľáááľáľ á¨ááŤáľá˝ááá á¨á°áᨠá¨áááá áá´ áĽáá ááááá˘
á ááłáá á˝á ááľáĽ á¨InitialPlayer á¨áááľ áá°áľ ááá፠ááá
uniqueConstraint = UniqueConstraints.singleton
áľááá , áááἠááľáłááťá á¨á°áááá ááá áľáááá°áľ áĽá áľá áááá áááĽááśá˝á ááá. áááá˝ á¨áááľ áá°áśá˝ áĽáá°áá á áááľ áááááśá˝ á¨ááᥠspecialConstraint á áá°ááááá˘
á¨áá áááł áá á¨áááľ áĽáŤ áá°áśá˝ á˝ááŽá˝
á ááłááľ áá á¨ááŤááἠáááł ááአáá¨áłá, ááá áá á áĽáááą áĽáľááľá áŤááłá.
á˝ááŽá˝ á¨ááááŠáľ á á˘áááľ á áááᎠáĽá/ááá á á˘áááľ áá°áľ áá´á áá ááἠááľá¨á á˛áŤáľááá ááᢠááá áĽáá°áá
áŤá áááŚá˝ á¨ááľáá á¨áááľ áĽáŤ áá°áśá˝ áá á°áłáá á áá°ááᢠá áá¨á ááą ááľáĽ áĽá á¨ááĽáł áááłáá˝ áŤáᣠá°áłáá áŤááá áááŚá˝á ááľá¨á áĽá á˝áá áááĽá áá˝ááᣠáá
á jBPM áľáá áá áĽá áá áŤááĽáááá˘
á áááŚáš áĽáááľ áá á áááľá¨áľ á áááľ ááááśá˝ áĽááá ááá°áľ áá˝áá-
- á á áŽáá áá á¨áááŁáŁá áááŚá˝á ááááľá¨á á á˛áľ á¨áááľ áĽáŤ áá°áľ á áááľ ááá አáĽá á á˛áľ á ááŁááá˝á á˛ááአá¨á áŽáá ááá áá ááá áľá˘ á¨áľáŽ á ááá˝ "áĽáá° ááľáá" ááľáŤáłá¸áá áááĽáá;
- á¨áááľ áĽáŤ á áááᎠá ááŤáááá áľ áá á¨ááŤááἠá¨áááľ áĽáŤ áááłá ááááá˘
á¨ááááŞáŤá ááááľ ááá áá, áá ááąáááśá˝ áĽá ááłáśá˝ á ááľ, áááłá:
- á áĽá á¨áááľ áĽáŤ áá°áľ áá´áá˝ ááľáĽ á¨áááľ áĽáŤ á áááᎠááŁááľ, á¨áááľ áĽáŤ á áááᎠáá¨áá;
- áĽááá áá áá° á á˛áľ á¨áááľ áĽáŤ á áááᎠá ááŁá á˝ááá áŤáľáááá (á ááááľ á°ááŁáŤáľ - áááá áááľ ááťáá);
- ááá˘á áá áŤáááŁá¸á áá´áá˝ á á¨áľáá ááĽáĽ áá°á¨á áĽáá°áá˝á á áŤáá áá˘
á á°ááŁá áááąáá á áŤááśá˝ áĽáá áááááŁááá áá á áááłá˝áá ááá áááľá¨á á ááŤáł ááłááá˝á ááľááááĄ-
- á áá¨á ááą ááľáĽáŁ á¨áááą áá°áľ ááŁáááľ áŤáá áááł á ááá ááá ἠá áá˝á áĽá á ááá á á°á°áŤ á á˝ ááľáĽ áá¨ááťáᥠá JSON á áá¸áľ á áĽá¨áááᢠáá ááá°áľ á áá°áá áŞáŤá ááľáĽá áá á á᪠áĽáá˛á¨ááá áŤáľá˝ááᢠáĽáá° á¨áá¨á¨áť á ááŤá, áĽáŤáľá áá¨á áá˝áá (á á°áá á áá¨á áá á áááľ ááľáĽ á áá áá);
- á¨áá á°áľ áááľ á áááᎠá¨áááľ áĽáŤ áá°áśá˝á áľá á áá ááá ᣠáľáááá á ááááá áá á¨á ááą á°áłáłá áá°áśá˝á áľáá ፠á á á˛áľ áľá á á á˛áľ áá°áŤáľ ááťáá (áááłá ᣠâInitialPlayerV2â)ᢠáá°áŞáŤá á áááĽááľ áĽá á ááááľ áľáá˝ áá¨á°áłá;
- á¨áá°áą áá´á á¨áľáŞáľ ááĽá á áá, á áá áá´á áá á¨áááŁáŁá áááŚá˝á áŤá°á¨áá áĽáá¨ááŤáá, áĽá áá ááĽá á¨áá°áą áááł áá á°ááá§á;
- á¨áá°áą ááŁáááľ áŤáá áááł á¨áá¨á ááą ááááŞáŤ áá° ááš á¨áááŽá˝ áá´á ááá áŁá ᣠáá á á¨á ááłáŤá áĽáŞáľ ááĽá á¨á°ááá á¨ááá°áľ á á°áŤá áá ፠áá˝áá á˘
- á¨ááá°áľ áá°áą á¨áááą ááá ááĽá á°ááá§á áĽá á¨ááἠááłá á ááłá°áľá áľ áá ááĽáŤááłááą á¨áááľ áĽáŤ áá°áľ âá°ááâ ááŁááá˘
- á¨áááá á¨áá°áľ ááłááá˝ áááł á ááĽááľ áĽá á á°ááłáłá ááአáááá á¨áááᣠá¨á áá ááá˛á á¨ááἠááł ááá°áľ áááľááá˝ áĽá á áá ááááᣠáá á¨JSON áá ááľáŤáľ á ááŚáľá˘
ááááľ áĽáŤ áá°áśá˝ áá áááá ááááá?
á á áááš ááľáĽ á¨á°ááášáľ áááľááá˝ á áááłá˝áá á á¨áá°á áááł ááááá, á áá°áá áŞáŤá á¨áĽáľááľ á°á¨á áá á¨á°ááąáľá ááłáŽá˝á áááľááľ áĽá á¨áááľ áĽáŤ á áááᎠáá° áááᎠá°ááŞáľ á¨ááá¨áľ ááłáĽ á¨á áá ááŤáŞ áĽáá˛áá á áľá˝ááá. áá ááá áááłáŤáľ áĽá áľáŤáá˝ á°á°áá°áá, ááááľ áľáŤ áá°áśá˝ á áŁá "ááá ááĽá°áľ" áááá á°ááĽáŻá, áĽáá˛áá á¨á°ááŤáŠ á¨áá°áá áŞáŤáá˝ á˝ááŽá˝ á ááá á°ááá°á á¨ááłáááľá á˝ááŽá˝ ááááłáľ á¨á áááááľ áááá˝ á°ááĽáŻá. áĽááá á áá¤áśá˝ ááááŤáľ áĽá á¨á፠áááá˝á ááááŁáľ á ááť áááľ áľá áááľ ááłá¨áť áááľá¨á ááááľ á áá. áá á¨á°áá°á áá áĽá áĽá¨áľ áá áááᢠá¨áĽáá°áá á áááľ áááľááá˝á ááááľ áá¨áłáłá˝á á°á¨á᪠áá á¨áłáť ááá áá˝ááᢠá áłáá°á á˝áá ááľáĽ, ááĽáŤáą áááá á˝ááłáá˝ á¨áá°á á áľáŠá¨áľ á áŁá áľáá˝ áá, ááá áá á ááłááśáš á¨áá¨áĄáľ ááłááá˝ ááľáĽ ááłáŤá. ááááá˝áá áŤá°áá, á¨á°áᨠá˝áá ááĽáą á°á°áĽáˇá. áĽáľá¨ááŤá áľá¨áľáŁ áááá áĽáŤá áááľ á ááľá áľ áľáá˝ á áľá°áŤá¨áľ áĽáľá°ááá áĽááá°ááááá˘
á áłá°áł áĽááą ááľáĽ á¨á°áááᥠá°á áááá˝ áĽáť ááłá°á áá˝ááá˘
ááááľ áĽáŤ áá°áśá˝ áá áááá ááááá?
-
18,8%á áᣠáá á á¨áá°á ááá áá¨á á áá ááá áá áá˘
-
12,5%áľá áĽááľá á á°ááŁá á á¨á áá áááá ááááľ á ááᣠá áá ááá áá˝áá2
-
6,2%á áá áŤááľ ááááá˝ á ááąá áĽáá ááááᣠááá áá áľááá°áŤáľ áĽáŤá°áĽá áá1
-
18,8%á áá áŤááľ ááááá˝ ááľáĽ á ááąá áĽáá áááá, ááá ááá áĽáŠ áá3
-
18,8%áŤá áááá áĽááľá°áłáľáŤáá3
-
25,0%á¨á áá°á áťá 4
16 á°á áááá˝ áľáá˝ á°áĽá°ááᢠ7 á°á áááá˝ áľáá á°á á
ጠá áľááááá˘
ááá: hab.com