áááºááá¯, áá¬ááá¬!
áá»áœááºá¯ááºááá¯á·ááá¯áá¹ááá®ááẠERP-á¡áááºážá¡á á¬ážáá±á¬á·ááºáá²ááºááŒá±ááŸááºážáá»ááºáá»á¬ážá¡á¬áž ááŒááºá¹áá±á·áááŸááºáá¬áá»á¬ážááᯠá á®ážááœá¬ážáá±ážáá¯áá¹ááááŸáá·áºáá¯ááºáááºážá¡ááœá¬ážá¡áá¬áá»á¬ážá áœá¬ááŒáá·áº á¡áá±á¬ááºážá¡áááºá áá áºáá»á¬ážááŒáá·áº ááááºážááá¯ááºáá¬ážááá·áº ERP-á¡áááºážá¡á á¬ážáá±á¬á·ááºáá²ááºááŒá±ááŸááºážáá»ááºáá»á¬ážá¡á¬áž ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááœáẠá¡áá°ážááŒá¯áá«áááºá áá»áœááºá¯ááºááá¯á·ááá¯ááºáá¯ááºáá»á¬ážá áá±ááºáá®áá¬ážááŸááºážáá»á¬ážááẠJavaEE áááºážááá¬áá»á¬ážááᯠá¡ááŒá±áá¶áá¬ážáá±á¬áºáááºáž microservices áá»á¬ážááá¯áááºáž áááºááŒáœá áœá¬ á ááºážáááºáá±áá«áááºá ááá¯ááŒá±ááŸááºážáá»ááºáá»á¬ážá ááŒá¿áá¬á¡ááŸááá¯á¶áž áááºáááºáá»á¬ážáá²ááŸáá áºáá¯ááŸá¬ áááºáá»ááºááá¯ááááºážáá»á¬ážááŸáá·áº áááºááá¯ááºááá·áº á áá áºááœá²áá»á¬áž áá±á«ááºážá ááºážááŒááºáž ááŒá áºáááºá áá±á«ááºážá ááºáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááẠáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áá±ááá·áº áááá¯áá¬áá¯á¶á á¶áá»á¬ážá áááºážááá¬á¡á á®á¡á á¥áºáá»á¬ážááŸáá·áº áá°áá±á¬ááºáá»á¬ážáááœá²ááŒá¬ážáá² ááŒá®ážáá¬ážáá±á¬áá±á«ááºážáá²á áá¬áá»á¬ážááᯠá¡ááŒá²áá±ážá áœááºážááá¯ááºáá±á¬áºáááºáž áááŒá¬áá±ážáá®á ááá¯ááŒá¿áá¬áá»á¬ážááᯠááŒá±ááŸááºážáá¬ááœáẠááá¯ážáááºááŸá¯ááŸááá¬áá²á·áááºá
áá±á¬ááºážáá«ážááœáẠáááºáá¡á¬áá¯á¶á á°ážá áá¯ááºááŸá¯ááᯠááŒá áºá á±áá±á¬ áá±á¬ááºážáá«ážááœááºá áááºááŸááºáá¬ážáá±á¬ á§áááá¬ááŸá NPO Krista á á¡ááœá±á·á¡ááŒá¯á¶ááŸáá·áº áááá¯áá¬ááá¯ááºáᬠáá¯áá±ááááŒá¯ááŸá¯á¡ááŒá±á¬ááºážááᯠáá»áœááºá¯ááºááŒá±á¬áá«áááºá á¡ááºááá®áá±ážááŸááºážáá±á¬á·ááºáá²áá±ážáá¬ážáá°áá¡ááŒááºá០áá±á«ááºážá ááºááŒá¿áá¬á¡ááœáẠááá¯ážááŸááºážáá±á¬á¡ááŒá±áá áºáá¯á á¥ááá¬áá áºáá¯ááá¯áááºáž ááá·áºááœááºážá ááºážá á¬ážááŒá®áž á€ááá¯ážááŸááºážááŸá¯áá±á¬ááºááœááºááœáẠáá¯á¶ážááœááºáá¬ážáááºáá»á¬ážááᯠááŸá¬ááœá±áá«áááºá
ááŸááºážáááºážáá»ááº
áá±á¬ááºážáá«ážááœáẠáá±á¬áºááŒáá¬ážáá±á¬ áááá¯áá¬ááŸáá·áº áááºážááá¬ááá¯ááºáᬠááŒá±ááŸááºážáá»ááºáá»á¬ážááᯠáá»áœááºá¯ááºá áááºááŸááºáá¬ážáá±á¬ á¡áá¯ááºáá»á¬ážá áááºá ááºááŸá¯ááœáẠááá¯ááºáá±ážááá¯ááºáᬠá¡ááœá±á·á¡ááŒá¯á¶á¡áá±á«áº á¡ááŒá±áá¶á áááºážááŸááºážáá«áááºá á€ááŒá±ááŸááºážáááºážáá»á¬ážááẠuniversal ááŒá áºáááºáᯠááá°ááá² á¡ááŒá¬ážá¡áá¯á¶ážááŒá¯ááŸá¯á¡ááŒá±á¡áá±áá»á¬ážááœáẠá¡áá±á¬ááºážáá¯á¶ážááŒá áºáááºááá¯ááºáá±á
BPM á á¡á²áá«áá²á· áá¬ááá¯ááºáá²á
á€áá±ážááœááºážááá¯ááŒá±ááá¯ááẠáá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·áááŒá±ááŸááºážáááºážáá»á¬ážá á¡áá¯á¶ážáá»ááŒá¿áá¬áá»á¬ážááᯠá¡áá±ážá áááºá¡áá±ážá áááºááŸááºážááŒááẠááá¯á¡ááºáá«áááºá áá»áœááºá¯ááºááá¯á·á áá¯á¶ááŸááºááœá±áá±ážáá»á±ááŸá¯á áá áºááŸá á á®ážááœá¬ážáá±ážáá¯áá¹ááá á¡áááá¡á áááºá¡ááá¯ááºážááŸá¬ áá¯á¶ážá áœá²áá°á¡ááºáá¬áá±á·á áºáá»á¬ážááŸáá áºááá·áº áá±áá¬áá±á·á áºáá²ááá¯á· áá±áá¬áá»á¬ážáááºáá±á¬ááºááŒááºážá á€áá±áá¬ááᯠááá¯ááºááá¯ááºá á áºáá±ážááŒá®áž á¡ááá¯á¡áá»á±á¬ááºá á áºáá±ážááŒááºážá á¡áá»áá¯á·áá±á¬áá¯ááºáááºážá¡ááœá¬ážá¡áá¬áá»á¬ážááŸáááá·áº áááºážááá¯ááŒááºáááºážááŒááºážá á¡ááŒá¬ážá áá Ạ/ ááœá²ááŒááºážá áááºááŒá¬ááŸá¯áá±áá¬áá±á·á Ạ/ áá±á¬áºááœááºážááá¯ááºááá¯á· áá¯ááºáá±ááŒááºážá á¡á á®áááºáá¶á á¬áá»á¬ážáá¯ááºáá±ážááŒááºážá ááá¯á·ááŒá±á¬áá·áº áá±á¬ááºáááºáá»á¬ážá¡ááœáẠá áá áºááá±á¬á·áá»ááºááŸá¬ áááºážááá¯á·á áá¯ááºáááºážááœááºáž áá¯ááºáááºážáá¯ááºáááºážá ááºáá»á¬ážááᯠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºááŒááºáž ááŒá áºáááºá
á¡áááºááŒá±á
á±áááºá¡ááœááºá áá®ážááŒá¬ážáá¯ááºáááºážá¡ááœá¬ážá¡áá¬ááᯠ"áá°ážááœá²" ááá¯ááºááá·áº áá¯á¶áá±á¬á·áá
áºáá¯ááŒáá·áº áá±á«ááºážá
ááºáá¬ážáá±á¬ áá±áá¬á¡á
á¯á¶á á
áááºáá°ážáááºáááºá¡áá»áá¯á·á¡ááŒá
Ạáááºááœááºáá±ážááœáẠ"á
á¬ááœááºá
á¬áááºáž" áá°áá±á¬ á¡áá¯á¶ážá¡ááŸá¯ááºážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
ááá¯á·áá±á¬áº áá±á«ááºážá
ááºážááŒááºážááá¯ááºáᬠáá¯áá¹áááá±áááŸáá·áº áááºáááºá á¡áááºáááºážá áá±á¬ááºáá¯á¶ážááœááºá áá±á«ááºážá
ááºážááŒááºážáá¯ááºáááºážááᯠáá±á¬ááºáááºááá±á¬ááºážááá¯áá»ááºá¡áááá¯ááºáá±á¬áºáááºáž áá¯á¶ážáááœá²ááŒá¬ážááŒá¬ážáá¬ážáá±á¬á¡áá»ááºáá»á¬ážá ááœáŸááºážááá¯ážááŸá¯á¡á±á¬ááºááœáẠá¡á
áááºá¡ááá¯ááºážáá»á¬ážá¡ááŒá
Ạ"ááŒááº" ááá·áºá
áá
áºááááá¯áá¬áááºáá¬ááŒáá·áº áá±á«ááºážá
ááºááœá²á·á
ááºážáá¬ážááŒááºážááŒá
áºáááº-
- Conway á ááœáŸááºážááá¯ážááŸá¯á¡á±á¬ááºááœááºá
- á¡ááŒá¬ážáá¯ááºáá¯ááºáá»á¬ážá¡ááœáẠááááºá áá®ááœááºáá²á·áá±á¬ á áá áºááœá²áá»á¬ážááᯠááŒááºáááºá¡áá¯á¶ážááŒá¯ááŒááºážááŒá±á¬áá·áºá
- á¡áá¯ááºááá¯ááºáá±á¬ ááá¯á¡ááºáá»ááºáá»á¬ážá¡áá±á«áº á¡ááŒá±áá¶á áááá¯áá¬ááá¬ááŸááºá០áá¯á¶ážááŒááºáááºá
á á®ážááœá¬ážáá±ážáá¯áá¹ááááᯠáá±á«ááºážá ááºáááºáá®ážáá¬ážáá±á¬ áá á¹á ááºážáá»á¬ážááŒáá·áº áá áºáááºážá á±áááºááŸáá·áº á áá áºá áááá¯áá¬á¡áááºážá¡áá»ááºážá áá°ážááŒá¬ážáá»ááºáá»á¬ážááᯠá á°ážá ááºážáá±á·áá¬ááŒááºážá០áááºážáá±ážá á±ááẠáá±á«ááºážá ááºááŸá¯ááá¯ááºáᬠáá¯áá¹áááá±áááᯠáááºááá¯ááºáááºážá¡ááœá¬ážá¡áá¬á á á®ážááœá¬ážáá±ážáá¯áá¹ááá០áá±á«ááºážá ááºáá¯áá¹ááááᯠááœá²áá¯ááºááẠááŒá®ážáá¬ážáá±á¬ááœá±ážáá±á¬ááºááŸá¯áá áºáá¯ááŸááá«áááºá á€áá»ááºážáááºááŸá¯ááœáẠá¡á¬ážáá¬áá»ááºáá»á¬ážá áœá¬ááŸááááºá ááá¯á·áá±á¬áº áááºááœá±á·áá¯ááºáá±á¬ááºááŸá¯ááœáẠáááºážá áááá±á¬ááºááŸá¯ááᯠááŒááááº-
- áá±á«ááºážá ááºážááŒááºážááá¯ááºáᬠááŒá¿áá¬áá»á¬ážááᯠááŒá±ááŸááºážááŒááºážááẠá¡áá»á¬ážá¡á¬ážááŒáá·áº áááºááá¯ááºáááºážá¡ááœá¬ážá¡áá¬ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá¬ááœáẠá¡ááá·áºá¡áááºááŸááá±á¬ ááá¯ážáá»á²á·ááŸá¯á¡ááŸááºáá»á¬ážááŒá±á¬áá·áº áá áºááŒáá¯ááºáááºáááºážáá±á«áºááá¯ááŸá¯áá¯á¶á á¶ááœáẠá¡ááá¯ážááŸááºážáá¯á¶ážááœá±ážáá»ááºá áá¬áá»á¬ážáá®ááá¯á· áá»áŸá±á¬áá»ááœá¬ážáááºá
- á¡ááŒá¬ážá áá áºááœá²áá»á¬ážá០áá¯á¶á·ááŒááºáá»ááºááá¯á¡ááºáá±á¬á¡áá«ááœáẠáá±á«ááºážá ááºááŸá¯ááá¯ááºáᬠáá á¹á ááºážáá»á¬ážááẠáááºááá¯ááºáááºážááá¯ááºáᬠáá¯áá¹áááá±áááᯠááá¯ážáá±á¬ááºáááºáá±á¬ááºáá²ááŒá áºáááºá
- á¡ááá®áá±ážááŸááºáž developer ááẠáá±á«ááºážá ááºááŸá¯ááᯠáá»á áºáá»á°ááŸá¯ááŒá®áž á¡áá¯ááºá¡ááœá¬ážá¡áá¬ááᯠááŒá±á¬ááºážáá²ááŒááºážááŒáá·áº áááºážááᯠá¡ááœááºááá° áá»áá¯ážáá»ááºááá¯ááºáááºá
- á áá áºááẠá¡áá¯á¶ážááŒá¯áá°áá¡ááŒááºá០áá áºáá¯áááºážáááŒá áºáá±á¬á·áá²á á áá áºááœá²áá»á¬ážá¡ááŒá¬áž "áá»á¯ááºááá¯ážáá»á¬áž" ááẠáááá¬áááºááŸá¬ážáá¬áᬠá áá áºááœá²áá áºáá¯á០á¡ááŒá¬ážáá áºáá¯ááá¯á· áá±áá¬ááœáŸá²ááŒá±á¬ááºážááŒááºážááᯠá¡á ááŒá¯ááá·áº áááá¯á¡ááºáá±á¬ á¡áá¯á¶ážááŒá¯áá°áá¯ááºáá±á¬ááºááŸá¯áá»á¬áž áá±á«áºáá¬áááºá
á¡ááŒá¬ážáá»ááºážáááºáááºážááŸá¬ áááºáá á®ážááœá¬ážáá±ážáá¯áá¹áááá±áááŸáá·áº á¡áá¯ááºá¡ááœá¬ážá¡áá¬á á¡áá±ážáá«áá±á¬á¡á áááºá¡ááá¯ááºážáá áºáá¯á¡ááŒá Ạáá±á«ááºážá ááºá¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºááŸá¯áá»á¬ážááᯠááá·áºááœááºážá ááºážá á¬ážáááºááŒá áºáááºá á¡ááá®áá±ážááŸááºážáá±á¬á·ááºáá²áá±ážáá¬ážáá°áá»á¬ážá áá»áœááºážáá»ááºááŸá¯ááá¯á¡ááºáá»ááºáá»á¬ážááᯠá¡ááŸáááºá¡áá¯ááºááŒáŸáá·áºááá¯ááºáá±á¬ááºáááºá á¡ááŒá±áá áºáá¯ááœá±ážáá»ááºáááºá¡ááœáẠá¡áááºážáááºáá»áŸáá¬ááœá±ážáá»ááºááŸá¯áá»á¬ážááŒáá·áº áá±á«ááºážá ááºáá¯á¶á·ááŒááºááŸá¯áá»á¬ážá¡áá áºáááºáá®ážááŒááºážááᯠááœááºáá°ááŒá®áž ááá¬ááá»áá»áá¯ááºáá±á¬ááºááá·áºáááºá áááºážááẠáá¯á¶ááá¹áá¬ááºááẠááá¯áááºáá²áááº- á¡áá¯á¶ážááŒá¯áá°á¡á¬áž áááºážáá¡áá¯á¶ážááŒá¯ááŸá¯á¡ááœáẠááá¯á¡ááºáá±á¬ááœá±ážáá»ááºá áá¬áá»áá¯ážá á¯á¶ááᯠáá±ážáá±á¬ááºááẠáá¯á¶áá±á¬ááºáá±á¬ á¡á áœááºážáááºáááẠááŒá áºááŒá®áž áá áºáá»áááºáááºážááœáẠáááºážááá¯á·ááá¯ááºáá°ááá¯á· ááŒá±áá±á¬ááºááœáẠá¡áá áºáá¶áááẠááœáá·áºáááŒá¯áá«á áá±á«ááºážá ááºáá¯ááºáááºážáá¬áááºáá»á¬ážááŸáá·áºáááºáááºá á¡ááºáá»ááºáá®áá¬áá áºáŠážááŒá±ááá¯áááá·áºáá±ážááœááºážáá»á¬ážá áœá¬ááŸááááºá ááá¯á·áá±á¬áº á¡ááºááá®áá±ážááŸááºážáá±á¬á·ááºáá²áá±ážáá¬ážáá°ááẠáááºážááá¯á·ááá±á·á ááºáá¯ááºáááºážááœááºááœáẠáá ááºážá á¬ážááá·áºáá±á¬á¡áá¬- ááœá±áá±ážááœá±áá°áááºááááááºáá»á¬ážá ááá¯ááºáá»á±á¬áá®ááœá±ááŸáááŸá¯á á¡áá¯ááŒá°á áœááºážá¡á¬ážá áá¯á¶ááŒá¯á¶áá±ážá á¡ááá¯ááºážá¡áá¬á áááºááŸáá·áºá¡áááºážá¡ááŒá áºááŒáá·áºááŒá°ážááŸá¯á áááºážááŒá±á¬ááºážáááºááŸááºááŸá¯á áá»á®áááºááŸá¯á ááŒáá·áºááœá¬ážááŒááºážááŸáá·áº áá°ážááŒá±á¬ááºážááŒááºážááá¯ááºáᬠá¡ááŒá±á¬ááºážá¡áá¬áá»á¬áž á áááºááá¯á·ááŒá áºáááºá áááºážááẠá¡ááá®áá±ážááŸááºážáá±á¬á·ááºáá²áá±ážáá¬ážáá°áá»á¬ážááᯠáá»áŸáá»áŸáá ááá¯ážááŸááºážáá±á¬ áá¯á¶ážááŒááºáá»ááºáá¯á¶á á¶áá»á¬áž áá±ážáá±á¬ááºááẠááá¯á¡ááºááŒá®áž áááºážáá±ážááœááºážáá»á¬ážá¡á¬ážáá¯á¶ážá¡ááœáẠá¡ááŒá±áá»á¬ážááᯠááŸááºáá¬ážááŒá®ážááŒá áºáááºá á€áá¯á¶á á¶áá»á¬ážááẠáá¯á¶áá¯á¶áá±á¬ááºáá±á¬áẠáá¯á¶ááŒá¯á¶ááá·áºáááº- áá¯ááºáááºážááá¯ááºáᬠáá¯áá¹áááá±áááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááẠáááŒá¬ááááá¯áááᯠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážááᯠááááºáááºááá¯ááºááŒá±ááᯠááá¯ážáá¬á á±ááŒá®áž á¡ááŸá¬ážá¡ááœááºážáá»á¬ážá áá¯ááºáá»á ááááºááẠá¡ááœááºáááá·áºáá»áá±á¬ á¡ááá·áºááœáẠááŸááá±ááá·áºáááºá
ááá¯á·áá±á¬áº BPM ááẠáááºážááŸáá·áº áááºááá¯á·áááºááá¯ááºááááºážá á¡áá¯ááºá¡ááœá¬ážá¡áá¬ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠááœá±ážáá»ááºá
áá¬áá»á¬ážá
áœá¬ááŸááááº...
á¡ááŸááºá
ááºá
á
áºá á¡ááŒá¬ážá
á®ážááœá¬ážáá±ážáá¯ááºáááºážá
ááºáá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááẠáá»áœááºá¯ááºááá¯á·áááŒá±ááŸááºážáá»ááºáá»á¬ážááœáẠá¡ááœááºáá±áááºážá
á¬ážááẠ- ááá¯ááºáá¶áá±á¬áºá¡áá°ážá¡ááŒá±á¬ááºážáá¯á¶ááŒááºážá ááŒá±ááŒá¬áá»ááºáááºááŸááºááŒááºážááŸáá·áº á¡ááœááºáá°ážááŒá±á¬ááºážááŸá¯áá»á¬ážáá®ááá¯á· á
á®ážááœá¬ážáá±ážáá¯áá¹áááá±áááŸáá·áº ááá¯ááºááœááºáá°áá»á¬ážááᯠáá»áááºáááºááŒááºážáá»á¬ážááŸáááá·áºááŒá
áºáááºá áá
áºáá»áááºáááºážááŸá¬áááºá áá¯ááºáááºážáá¯ááºáááºážá
ááºááœáẠ"á
á¬ááœááºá
á¬áááºáž" ááááºááŸáá¡áá±á¡áá¬ážááá¯áá¯á¶ážááŒááºááá·áºááŒááºáááºááẠ"á
á¬ááœááºá
á¬áááºáž" ááá¯ááºááá¯ááºááá¯ááºáááºáá
áºáá¯ááŒá
áºáááºá
á€áááºááŸá¬ ááá±á¬áá»ááºáá¡á
ááœáẠáá¯ááºáááºážá
ááºáá¯á¶á
á¶ááŒá
áºáááºá
ááá¯ááá¯á·áá±á¬ á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á áá±áááºážá á¬ážááŸá¯ááẠááŸáá¯ááºážáááá¯ážááŸááºážááŸá¯ááŸáá·áº ááá¯ááºážááá¯ážá á®ážááœá¬ážáá±ážáá¯ááºáááºážá ááºáá»á¬ážááᯠáááºáá®ážááŒááºážá á¡ááŸáááºá¡áá¯ááºááŒá±á¬áá·áºááŒá áºáááºá ááá¯á·áá±á¬áºáááºáž áá±á¬á·ááºáá²ááºá áá áºáá»á¬áž ááá¯ááá¯ááŸá¯ááºááœá±ážáá¬áááºááŸáá·áºá¡áá»áŸ áá¯ááºáááºážá á¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºááŸá¯á¡ááá¯ááºážááẠááŒá®ážááœá¬ážáá¬ááŒá®áž ááá¯ááá¯ááŸá¯ááºááœá±ážáá¬áááºá ááœá±ážááŒá±á·ááŒááºážá áá¯ááºáááºážá ááºáá»á¬ážá á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠááŒááºáááºá¡áá¯á¶ážááŒá¯ááŒááºážá¡ááŒáẠá¡ááá¯ááºážá¡áááºáá áºáá¯á á®ááᯠá¡ááŒáá¯ááºáá¯ááºáá±á¬ááºááá¯ááºá á±áááºá¡ááœáẠááœá²áá¯ááºááŒááºážáá¯ááºáááºážá ááºáá»á¬áž ááá¯á¡ááºáá«áááºá ááá¯ááá¯á·áá±á¬á¡ááŒá±á¡áá±áá»á¬ážá¡á±á¬ááºááœááºá áááááá¬ááẠá¡áááºáááŒá±ááŒá áºáá¬ááŒá®áž ááŒááºáááºá¡áá°ážá¡ááŒá±á¬ááºážáá¯á¶ááŒááºážááẠáááºážá á¡áá»ááºá¡áááºá¡ááŒá±á¬ááºážá¡áá¬ááᯠáá¯á¶ážááŸá¯á¶ážááœá¬ážááẠ(áá±á«ááºážá ááºážááŒááºážááá¯ááºáᬠá¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºááŸá¯áá»á¬ážááᯠáá¯á¶ááŒááºážááœáẠáá¯á¶ážááááºáááºááŒááºážáááŸááá«)á
ááá¯á¡ááºáá»ááºáá»á¬ážááᯠááŸááºážáááºážááŒááºáž á¡ááŒáááºááŒáááºááŒá¯áá¯ááºááŒá®ážáá±á¬áẠáá¯ááºáááºážá
ááºááẠáááºáá²á·ááá¯á·ááŒá
áºáá¯á¶ááááºá
á€á¡ááŒá±á¡áá±ááŸááœááºááŒá±á¬ááºáááºáááºážáááºážááŸá¬á¡ááºáá»ááºááá±á«ááºážá
ááºááŸá¯ááŒá
áºáááºá
ááŸá¯ááºááœá±ážáá±á¬ á
á®ážááœá¬ážáá±ážáá¯ááºáááºážá
ááºá áá±ážáááºáá±á¬ á¡á
áááºá¡ááá¯ááºážáá
áºáá¯
áá±ááŸááºááœááºá ááŒá±ááŸááºážáá»ááºááẠáá»áŸá±á¬áºááŸááºážáá»ááºá¡ááá¯ááºážáááŒá áºááá¯ááºáá±- á¡ááŒááºáááááá¬áá»á¬ážááŸáá áºááá·áº áá¯ááºáááºážáá¯ááºáááºážá ááºáá»á¬ážááᯠáááºáá®ážáá¬ááœáẠááŒáá·áºáá¬ážáá±á¬áá¯ááºá¡á¬ážááŒááºážá¡á¬ážá áááºáá¶ááá¯ááºáá±á¬áá¯ááºáá¯ááºá áœááºážá¡á¬ážááœáŸááºážááááºážáá»á¬ážáááŸáááẠááœáá·áºáááŒá¯áá²á áááºážáááááá¬ááẠdeveloper áá»á¬ážááŒá¬ážááœáẠá¡ááŸá áºáááºáá¯á¶ážáá áºáá¯ááŒá áºáá¬áá²á·áááºá á¡ááºáá»ááºáá¡ááœááºážááá¯ááºážááœá²á·á ááºážáá¯á¶ááŸáá·áº áááºáááºá ááá¯ááºááŒá¬ážááŸá¯áá»á¬ážáááºážááŸááá²á·ááŒá®áž âáá¬áá±ážááŸá¯áá»á¬ážâ ááŸáá·áº âáá»áá¯ááºážáá±á¬ááºáá»á¬ážâ á¡áá»á¬ážá¡ááŒá¬áž áá±á«áºááœááºáá¬áá²á·áááºá
jBPM ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá á¡ááá á¡ááŒá¯ááá±á¬áá±á¬ááºááá·áº ááŸá¯áá±á¬áá·áºááŸá¬ áá¯ááºáááºážáá±á¬ááºááœááºááŸá¯ á¥ááá¬áá áºáá¯á¡ááœáẠáááºážá ááá¯ááºááá¯ááºáááºááŒá²áá±á¬ á¡ááŒá±á¡áá±ááŸáááŒááºážá á¡áá»áá¯ážáá»á±ážáá°ážáá»á¬ážááŸáá·áº á¡áá¹ááá¬ááºáá»á¬ážááᯠáá¬ážáááºááá±á¬áá±á«ááºááŒááºážáááºááŒá áºáááºá á¡áá»ááºááŒááŸá¯áá»á¬ážááŸáá·áº áááºáá±á·áá»áºáá»á¬ážááŸáá áºááá·áº ááá°áá®áá±á¬ á¡ááá®áá±ážááŸááºážáá»á¬ážááŒá¬ážááœáẠááŸá¯ááºááœá±ážáá±á¬áá±á«ááºážá ááºážááŸá¯ áááá¯ááá¯áá±á¬áá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠáá¯ááºáááºážá ááºáá»ááºážáááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááá¯áááºáž áá»áœááºá¯ááºááá¯á· ááœá±á·ááŒááºáá²á·ááá«áááºá áááºááŒá²áá±á¬ááá¯ááºáá¶áá áºáá¯ááŸááá±ááŒááºážááẠá€ááá á¹á ááœáẠá¡áá±ážááŒá®ážáá±á¬á¡áááºážááá¹áá០áá«áááºáá«áááºá
á¡áááºáá«á¡áá»ááºááᯠá¡ááŒá±áá¶á áá»áœááºá¯ááºááá¯á· áá±á¬ááºáá»ááºáá»ááá¯ááºáá«áááºá BPM á ááá¯ááºááŸá áá¯ááºáááºážá ááºáá»ááºážáááºááŸá¯ááẠááááºáááẠááá¯ááá¯ááŸá¯ááºááœá±ážáá±á¬ áá¯ááºáááºážáá¯ááºáááºážá ááºáá»á¬ážááᯠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºáááºá¡ááœáẠáá¯ááºáá±á¬ááºá áá¬áá»á¬ážá áœá¬ááᯠááŒá±ááŸááºážááá¯ááºá á±áá¬á á€áá¯ááºáááºážá ááºáá»á¬ážááœáẠáá±á«ááºážá ááºáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááᯠááá¯ááºáá»á±á¬áá®ááœá±ááŒá áºá á±áááºááŸáá·áº ááá·áºáá»á±á¬áºáá±á¬á¡ááŸááºá¡áá¬ážááŒáá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºáá±á¬ááºááœááºáá¬ážááá·áº áá¯ááºáááºážá ááºááᯠá¡ááŒááºá¡á¬áá¯á¶ááŒáá·áº áááºáááºááááºážááááºážáá¬ážááá¯ááºá á±áááºááŒá áºáááºá
áá±á«ááºážá ááºáá¯á¶á á¶áá áºáá¯á¡áá±ááŒáá·áº synchronous áá±á«áºááá¯ááŸá¯áá»á¬ážáá¡á¬ážáááºážáá»ááºáá»á¬áž
Synchronous áá±á«ááºážá ááºážááŸá¯ááẠá¡ááá¯ážááŸááºážáá¯á¶áž ááááºááá¯á·ááŒááºážáá±á«áºááá¯ááŸá¯ááᯠáááºááœáŸááºážáááºá á áá áºááœá²áá áºáá¯ááẠáá¬áá¬áááºááœáẠáá¯ááºáá±á¬ááºááŒá®áž API ááᯠá¡ááá¯ááŸááá±á¬áááºážáááºážááŒáá·áº áá±á¬áºáá¯ááºáááºá á¡ááŒá¬ážá áá áºááœá²áá áºáá¯ááẠáá¯á¶ážá áœá²áá°áááºá០áá¯ááºáá±á¬ááºááŒá®áž ááááºáá áºáá¯áá»áŸá±á¬áºááá·áºáá»ááºááŒáá·áº á¡áá»áááºáááºáá»áŸáẠáá¯ááºážáá±á«áºááá¯áááºá á áá áºááááºáá±á¬ááºáá¯á¶á¡áá±á«áºáá°áááºá client ááŸáá·áº server ááŸá áºáááºááᯠáá°áá®áá±á¬ application ááŸáá·áº process ááœááºááŒá áºá á± ááá¯á·ááá¯áẠááá°áá®áá±á¬á¡áá¬áá»á¬ážááœáẠáááºáá¶áá±á¬ááºááœááºáá±ážááá¯ááºáááºá áá¯áááááá á¹á ááœááºá áááºááẠRPC á á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á¡áá»áá¯á·ááᯠáá»áá·áºáá¯á¶ážáááºááŸáá·áº ááá·áºáááºáá±á¬ááºáá»á¬ážááŸáá·áº áá±á«áºááá¯ááŸá¯áááááºáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáááºááá¯á¡ááºáááºá
ááá¯ááá¯á·áá±á¬ áá±á«ááºážá ááºážááŸá¯áá¯á¶á á¶ááœáẠá¡á¬ážáááºážáá»ááºáá»á¬ážá áœá¬ááŸááááºá ááá¯á·áá±á¬áºáááºážáááá¯ážááŸááºážááŸá¯ááŒá±á¬áá·áº áááºááœá±á·ááœáẠá¡ááœááºááœááºáá»ááºá áœá¬á¡áá¯á¶ážááŒá¯áá«áááºá á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá¡ááŸáááºááẠá áœá²áááºááœááºáá±á¬ááºážááŒá®áž áááºážááᯠáááºážááá¬ááá¯ááºáá¬ááŒáœá±ážááŒá®á¡ááŒá ẠááŒá±ááŸááºážáá»ááºá¡á¬áž áááºážááá¬ááá¯ááºáá¬ááŒáœá±ážááŒá®á¡ááŒá Ạáá±ážáá±ážááá·áº "áá®ážáá±á¬ááº" áááºááŸááºáááºáá»á¬ážá á¡ááŒá±á¡áá±áá»á¬ážááœáẠáááºáá«áááºáá« á¡áá¯á¶ážáá»á á±áááºá ááá¯á·áá±á¬áº á¡ááœá±á·á¡ááŒá¯á¶áááŸááá±á¬ áá±á¬á·ááºáá²á¡ááºáá»ááºáá®áá¬áá»á¬ážá áááºážá¡á¬áž á¡áá¯ááºááá¹ááá¬áá±á¬ááºááá·áº á¡áá»áá¯ážáááºáá»á¬ážááᯠááá±á¬ááá±á«ááºáá² áááá áááºááŒáá·áº á¡áá¯á¶ážááŒá¯áá±ááŒááºážáááºáž ááŒá áºáááºáá«áááºá
á áá áºááœá²áá»á¬ážá áá»áááºáááºááŸá¯ááœáẠá¡áááºááŸá¬ážáá¯á¶áž ááá¯ážááŒáá·áºáá¬ááŸá¯á¡ááŒááºá "ááŒáá·áºááœá¬ážááŒááºáž" ááŸáá·áº "ááá·áºáá¯ááºááŒááºáž" á¡áá±á¬ááºážá¡áááºáá»á¬ážááœáẠáá°ááááá¬áá±á¬ ááŒá¿áá¬áá»á¬ážáááºáž ááŸááá«áááºá á¡ááŸááºá ááºá á áºá áá¯ááºáááºážááá¯ááºáᬠáá¯áá¹áááá±áááẠá¡ááŒá±á¬ááºážá¡áá²áá áºáá¯áᯠááŒá¯áá¯ááºáá«áá á¡áá±á¬ááºážá¡áááºáá»á¬ážááẠáááŸááááŒá Ạááá¯á¡ááºááŒá®áž á¡áá±á¬ááºážá¡áááºááŒá¯áá¯ááºááŒááºážááŒáá·áº á€ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááŒá±á¬áá·áº áááºáá±á¬ááºááá·áº á¡áá»áá¯á·áá±á¬ á¡ááá®áá±ážááŸááºážá¡áááºážá¡ááŒá áºáá»á¬ážááᯠáá±á¬á·ááºáá»ááá¯ááºáááºá ááá¯ááá¯áááºááŸá¬á á áá áºááœá²áá áºáá¯á០á¡ááŒá¬ážáá áºáá¯áá¶á០áá¯á¶á·ááŒááºááŸá¯ááᯠá á±á¬áá·áºááá¯ááºážáááºá¡ááá áááºážááẠááœá±áá±ážááœá±áá°ááᯠá¡ááŒá®ážáááºááŒá®áž áá±á¬á·ááºáá»á¬ážááᯠááœáŸááºáá±ážááá¯ááºáááºááá¯ááºáá«á áááºážááẠáááºáá±á¬ááºááŸá¯á¡áá»áá¯ážáá»áá¯ážáá¡áá¹ááá¬ááºááᯠáááááá¬áá¬ááá¯ážá á±áááº-
- á áá áºáá¯á¶á·ááŒááºááŸá¯ áá»á±á¬ááºáá¯á¶ážááœá¬ážáááºá á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠáá±á¬ááºážááá¯áá»ááºáá»á¬ážá¡ááœáẠá¡ááŒá±á¡ááœáẠá¡áá»áááºá¡ááŒá¬ááŒá®áž á á±á¬áá·áºáá»áŸá±á¬áºáá±áá«áááºá
- áá±áá¯áá»á¡á¬ážááŒáá·áº áá¬áá¬ááẠáá»á¬ážááŒá¬ážáá±áá±á¬ thread pool áá áºáá¯ááŒá±á¬áá·áº áá¯á¶ážá áœá²áá°áá»á¬ážá áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá¯á¶á·ááŒááºááŒááºážááᯠáááºááá·áºáááº- threads á¡áá»á¬ážá á¯ááẠááœá±áá±ážááœá±áá°ááŒáá·áº ááááºážááá¯ááºáá¬ážáá±á¬ á¡áááºážá¡ááŒá áºááá±á¬á·áááºááŸá¯ááœáẠ"áááºáá±áááº"á
- áá±á¬á·áááºááŸá¯áá»á¬áž á áááºáá±á«áºáá¬áááº- áááºážááá¯á·á ááŒá áºáá±á«áºáá¬ááá¯ááºááŒá±ááẠá¡áá±á¬ááºážá¡áááºááŒá¯áá¯ááºááá·áºááŒá¬áá»áááºá áá¯ááºáááºážáá¯áá¹ááááá¬áááŸáá·áº á¡áá±á¬ááºážá¡áááºááœááºáá«áááºáá±á¬ áá±á¬á·ááá±á¬ááºáá»á¬ážáá±á«áºááœáẠááŒááºážáááºá áœá¬áá°áááºáá«áááºá
- ááœá±áá±ážááœá±áá° á¡áá»áááºááœáẠáááºáááºážáá¯áẠá¡ááŸá¬ážáá»á¬áž áá±á«áºáá¬ááŒááºážá
- á¡áá¯ááºááẠáá±áá¬á¡ááŒá±á¬ááºá¡ááŒá¬ážááᯠáá¯ááºáá±á¬ááºáááºááŸáá·áº ááŒá±á¬ááºážáá²ááẠááá¯á¡ááºáá«áá áá¬áá¬ááẠOutOfMemory ááœáẠ"áá»áááº" ááŸáá·áº synchronous áá±á«ááºážá ááºážááŸá¯áá»á¬áž ááŸááá±ááŒááºážááẠáá¯ááºáá±á¬ááºááŒááºážá¡á¬áž "áá±á«á·áá«ážáá±á¬" á¡áá±á¬ááºážá¡áááºáá»á¬ážá¡ááŒá Ạááá¯ááºážááŒá¬ážááẠá¡ááœááºáááºáá²á á±áááºá
áááá¯áá¬á¡ááŒááºá¡áá áá±á«ááºážá ááºááŸá¯á¡ááœááºáž áá±á«áºááá¯ááŸá¯áá»á¬ážááᯠááááºááá¯á·á¡áá¯á¶ážááŒá¯ááŒááºážááẠáá áºáŠážáá»ááºážá áá áºááœá²áá»á¬ážá á¡áááºá¡ááœá±ážááááºážáá»á¯ááºááŸá¯ááᯠáá¯á¶ážááŸá¯á¶ážááœá¬ážá á±áááº- á¡ááŒá¬ážá áá áºááœá²áá áºáá¯á á¡áááºá¡ááœá±ážáá áºááŸááºáá»á¬ážá០áá®ážááŒá¬ážááœá²áá¯ááºáá¬ážáá±á¬ á áá áºááœá²áá áºáá¯á á¡áááºá¡ááœá±ážááᯠáá±áá»á¬á á±ááẠáááŒá áºááá¯ááºáá«á á áá áºááœá²áá»á¬ážááᯠááá°áá®áá±á¬á¡ááœá²á·áá»á¬ážá áá®ááœááºáá«áá á€áááºááŸá¬ ááŒá¿áá¬ááŒá®ážáá áºáá¯ááŒá áºáááºá
áá±á«ááºážá ááºáá¬ážáá±á¬ á áá áºááœá²áá»á¬ážááẠááá°áá®áá±á¬ á¡ááá®áá±ážááŸááºážáá»á¬ážááœáẠááŸááá±ááŒááŒá®áž ááŸá áºáááºá áá¯á¶ážááœáẠáááºáá°áá»áá±á¬ á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠááŒá¯áá¯ááºáááºááá¯á¡ááºáá«á á¡áá¬áá»á¬ážááẠááá¯áá áááºáááºá á¬ážá áá¬áá±á¬ááºážáá«áááºá á€á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠá¡áá±á¬ááºážá¡áááºááŒá áºá¡á±á¬áẠáááºááá¯á·ááŒá¯áá¯ááºáááºáááºážá
áá®ážááŒá¬ážááœá±ááŒá±ážááœáŸá²ááŒá±á¬ááºážááŸá¯áá»á¬ážááœáẠá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠááŒá¯áá¯ááºáá«áá ááá¯ááºáá¬áá±á¬ááŒáœááºážáá»áẠááá¯ááºááœááºááŸá¯ááŸáá·áº áá»á±á¬áºááŒá±ážáá±ážáá±á¬ááºááẠááá¯á¡ááºáááºááŒá áºááŒá®ážá áááºážááẠsynchronous áá±á«ááºážá ááºážááŒááºážá á¡áááá¡á¬ážáá¬áá»áẠ- ááá¯ážááŸááºážááŸá¯ááᯠáá¯á¶ážááááºááŸá¬ážáá±ážáá«áááºá
ááŒáá·áºáá±áá¬ážáá±á¬ ááœá±áá±ážááœá±áá°áá»á¬ážáááºáááºáž áááááá¬áá±á¬áºáááºáž áá»áœááºá¯ááºááá¯á·áááŒá±ááŸááºážáá»ááºáá»á¬ážááœáẠáááºážááá¯á·ááᯠá¡áá¯á¶ážáááŒá¯áá«- áá¯á¶ááŒááºá áááºáá»áááŸá¯ááᯠáá±áá»á¬á á±ááẠáááºáá²áá«áááºá
á¡áá±á¬ááºážá¡áááºááŒá¿áá¬ááá¯ááŒá±ááŸááºážáá»ááºá¡ááŒá Ạ"Saga"
ááá¯ááºáááá¯áááºáá±á¬ááºááŸá¯áá»á¬ážá áá±áááºážá
á¬ážáá¬áááºááŸáá·áºá¡áá»áŸá ááá¯á¡ááºáá»áẠááá¯ážáá¬áá«áááºá
á€áá¯á¶á á¶ááẠááŸááºáá»á¬ážáá±á¬ááœá±ááŒá±ážááœáŸá²ááŒá±á¬ááºážááŸá¯áá¡áááºáá«ááŒá¿áá¬áá»á¬ážááᯠááŒá®ážááŒáá·áºá á¯á¶á áœá¬ááŒá±ááŸááºážááá¯ááºááŒá®áž á á®ážááœá¬ážáá±ážáá¯áá¹áááá±ááááºááŒááºážá០á áá áºáá¡ááŒá±á¡áá±ááᯠá á®áá¶ááá·áºááœá²áááºááŒá áºááá¯ááºáá»á±áá»á¬ážááᯠáá»á²á·ááœááºáá±ážáááº- áá¡á±á¬ááºááŒááºáá±á¬ááœá±áá±ážááœá±áá°ááŒá®ážáá±á¬áẠáá»á±á¬áºááŒá±ážááœá±ááẠá áá áºá¡á¬áž áááºážááá°áá¡ááŒá±á¡áá±ááá¯á· ááŒááºáááŸáá·áºááá¯ááºáá±á¬áºáááºáž á¡ááŒá¬ážááœá±ážáá»ááºá áá¬áá áºáá¯ááᯠáá¶á·ááá¯ážáá±ážáá«áááºá data processing áááºážááŒá±á¬ááºážá áá¯ááºáááºážá ááºááᯠâáá±á¬ááºážááœááºáá±á¬â á¡áá¯á¶ážáááºááá¯á· áá°áá±á¬ááºáá¬ááẠááŒáá¯ážá á¬ážáá±á¬á¡áá«ááœáẠá¡á±á¬ááºááŒááºá áœá¬ ááŒá®ážááŒá±á¬ááºáá²á·áá±á¬ áá±áá¬áá¯ááºáá±á¬ááºááŒááºáž á¡ááá·áºáá»á¬ážááᯠáááºáá«ááá²áá² ááŒá¯áá¯ááºááŒááºážááŸáááºáž ááœáá·áºááŒá¯áá«áááºá
á áááºáááºá á¬ážá áá¬ááŸá¬á monolithic á áá áºáá»á¬ážááœááºá á€áá¯á¶á á¶ááẠáá»á±á¬á·áá²áá²ááœá²áá¬ážáá±á¬ á áá áºááœá²áá»á¬áž áá±á«ááºážá ááºážááŒááºážááŸáá·áº áááºáááºáá¬áá»áŸáẠááŸááºáá»á¬ážáá±á¬ ááœá±áá±ážááœá±áá°áá»á¬ážááŸáá·áº áááºááá¯ááºáᬠá¡áááºážá¡ááŒá Ạáá±á¬á·áááºááŸá¯áá»á¬ážááŒá±á¬áá·áº ááŒá áºáá±á«áºáá¬áá±á¬ ááá¯ážáá»áá¯ážáá»á¬áž ááŸááá«áááºá
BPM áá¯á¶á á¶ááŒáá·áº áá»áœááºá¯ááºááá¯á·á áá¯ááºáááºážáá¯ááºáááºážá ááºáá»á¬ážááŸáá·áº áááºáááºá Sagas ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠá¡ááœááºááœááºáá°ááŒá±á¬ááºáž ááœá±á·ááŸáááá«áááº- Sagas á áá áºáŠážáá»ááºážá á® á¡ááá·áºáá»á¬ážááᯠáá¯ááºáááºážáá¯ááºáááºážá ááºá¡ááœááºáž ááŸá¯ááºááŸá¬ážááŸá¯áá»á¬ážá¡ááŒá ẠáááºááŸááºááá¯ááºááŒá®ážá áá¯ááºáááºážáá¯ááºáááºážá ááºá áááºááŒá²áá±á¬á¡ááŒá±á¡áá±á០á¡áá¯á¶ážá¡ááŒááºáá±ážáá«áááºá á¡ááŒá¬ážá¡áá¬áá»á¬ážá Sagas áááŒááºááœááºážáá±ážá¡ááŒá±á¡áá±á ááá¯ááá¯áááºááŸá¬á áá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºáááºááŸáááŸáá¯ááºážáá±ážááá¹ááá¬ážááᯠáááá¯á¡ááºáá«á áááºááá¯á¡ááºáááºááŸá¬ ááá¯á·áá±á¬ááºááŸá¯áá áºáá¯á¡ááŒá Ạ"á¡áááºážáá¯á¶áž áá áºááŒáááº" á¡á¬ááá¶áá»ááºá¡ááœáẠáá¶á·ááá¯ážáá±ážááá·áº áááºáá±á·ááºá»ááœá²á á¬ážááŒá áºáááºá
ááá¯á·áá±á¬áºááá¯áá²á·ááá¯á·áá±á¬ááŒá±ááŸááºážáá»ááºááœááºáááºážáááá¯ááºááá¯áẠ"á á»á±ážááŸá¯ááºáž" áá«ááŸááááºá
- á á®ážááœá¬ážáá±ážáá¯áá¹áááá±áááẠááá¯ááá¯ááŸá¯ááºááœá±ážáá¬áááº- áá»á±á¬áºááŒá±ážááœá±ááᯠáááºáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáááºá
- monolithic á áá áºáá»á¬ážá¡ááœáẠá¡áá°ážááááá¬ážááá¯ááºááá·áº áá®ááœááºááŸá¯á¡ááŒáá·áºááᯠá áœáá·áºááœáŸááºááẠááá¯á¡ááºáááºááŒá áºáá«áááºá
- áááá¯áá¬áááºáá¬ááẠá¡áááºážáááºááá¯á ááŸá¯ááºááœá±ážáá¬áááºá áááºáá±á·áá»áºááœá²á á¬ážá¡ááœáẠáááºáá±á¬ááºážááá¯á¡ááºáááºá
- áá±á¬ááºáááºá á±á¬áá·áºááŒáá·áºááŒááºážááŸáá·áº á á®áá¶ááá·áºááœá²áá±ážáááááá¬áá»á¬áž ááá¯á¡ááºáááá·áºááẠ(áá±áá¯áá»á¡á¬ážááŒáá·áº áááºážáááºááẠáá±á¬ááºážááœááºáá±á¬áºáááºážá á áá áºáááºáá±á¬ááºááŸá¯á á¡áááºá¡ááœá±áž ááá¯ážáá¬áááº)á
monolithic á áá áºáá»á¬ážá¡ááœááºá "Sags" ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá¡ááœáẠáá»áŸáááŸá¯ááŸá¬ ááááºááááá¬ááŸáá«á microservices ááŸáá·áº á¡ááŒá¬ážáá±á¬ SOA áá»á¬ážá¡ááœáẠááŒá áºááá¯ááºáá»á±áá»á¬ážáá±á¬á¡á¬ážááŒáá·áº ááœá²á á¬ážáá áºáŠážááŸáááŸáá·áºááŒá®áž ááá±á¬áá»ááºá áááºáá»áááºááœáẠáá®ááœááºááŸá¯á¡ááŒáá·áºááŒáá·áº á áá±ážáá¶ááá«áá á€áá¯á¶á á¶ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá á¡áá»áá¯ážáá»á±ážáá°ážáá»á¬ážááẠá¡á¬ážáááºážáá»ááºáá»á¬ážááᯠáááááá¬áᬠáá»á±á¬áºááœááºááá¯ááºááŒá®áž á¡áá°ážáááŒáá·áº á¡áááºááŒá±áá±á¬ API ááŸááá«áá á á®ážááœá¬ážáá±ážáá¯áá¹ááá¡ááá·áºá
microservices áá»á¬ážááœáẠáá¯ááºáááºážááá¯ááºáᬠáá¯áá¹áááá±áá áá¯ááºááá¯ážááŸá¯
áá»áœááºá¯ááºááá¯á·ááẠááá¯ááºáááá¯áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá áááºá ááºážáááºáá±á¬á¡áá«á áá»áá¯ážááŒá±á¬ááºážáá®áá»á±á¬áºáá±á¬áá±ážááœááºážáá áºáᯠáá±á«áºáá¬áááº- ááá¯ááááºážáá±áá¬ááᯠááŒá²ááŒá¶á á±áá±á¬ áááºáá±á¬ááºááŸá¯ááŸáá·áº á ááºáá»ááºážá ááá¯ááááºážá á®ážááœá¬ážáá±ážáá¯áá¹ááááᯠáááºááá·áºáá±áá¬ááœáẠááá·áºááœááºážááááºáááºážá
á¡áá»áá¯ážáá»áá¯ážáá±á¬ BPMS ááááá¯áá¬áááºáá¬ááá¯ááŒáá·áºáá±á¬á¡áá«á á á®ážááœá¬ážáá±ážáá¯áá¹áááá±áááᯠááŒá²ááŒá¶á áœá¬ááœá²áá¯ááºááẠáá»áá¯ážááŒá±á¬ááºážáá®áá»á±á¬áºáá¯á¶áá±á«áºááá¯ááºáááº- ááá¯ááááºážá á®ážááœá¬ážáá±ážáá¯áá¹ááááá¯áá¯ááºáá±á¬ááºáááºá¡ááœáẠááá¬ááááºáááºážáá»ááºááŸáá·áº ááœááºááááºáá¬ááᯠáááºáá®ážáá±ážááá·áº ááááºáá±á¬ááºážááŸáá·áº ááá¯ááááºáž-á¡ááŸá®á¡ááá¯áááºážáá±á¬ microservices á¡ááœáŸá¬áá áºáá¯ááᯠáááºáá®ážááŒá®áž ááá¯ááááºážáá±áá¬ááᯠáá®ážááŒá¬ážá¡ááŒá Ạáááºáá¶á·á¡á±á¬ááºá á®á ááºáá«á á¡ááœááºááá¯ážááŸááºážááŒá®áž áá±á«á·áá«ážáá±á¬ microservices á¡ááœáŸá¬á á€ááá á¹á ááœáẠá á®ážááœá¬ážáá±ážáá¯ááºáááºážá ááºáá»á¬ážááẠááŒá²ááŒá¶ááŸá¯á¡ááœáŸá¬á áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá á¯á ááºážáá±ážáááºá
á€áá»ááºážáááºááŸá¯ááœáẠá¡ááœááºááŒá®ážáá¬ážáá±á¬ á¡á¬ážáá¬áá»ááºáá áºáᯠááŸááááº- áááºááŸá áºáááºááá±á¬áẠááááºáá±á¬ááºážá áá¯ááºáá±á¬ááºááá¯ááºá áœááºážááᯠááá¯ážááŒáŸáá·áºááá¯ááºááŒá®áž áááºááá¯ááºáᬠááááºáá±á¬ááºážá¡áá±ážá á¬ážáááºáá±á¬ááºááŸá¯áá»á¬ážá á¡ááœáŸá¬ááᬠáááºážá០"á¡áá®ááá¯" áá¬áááºááŒá áºáááºá áááºááá·áº ááá¯ááááºážá០áá¯ááºáááºážáá±á¬ááºááœááºáá»ááºáá»á¬ážááẠáááºážááᯠá¡ááºááááºáá¯ááºááŒá®ážáááºááŸáá·áº ááááºáá±á¬ááºážá áá¯ááºáá±á¬ááºááá¯ááºá áœááºážá¡áá áºááᯠá¡áá¯á¶ážááŒá¯ááẠá¡ááœáá·áºá¡áá±ážááᯠáá»ááºáá»ááºážáááŸááááºááŒá áºáááºá
ááá¯ááá¯á¡áá±ážá áááºáá±á·áá¬ááŸá¯áá áºáá¯á á€áá»ááºážáááºááŸá¯á áááá¬áááºááŸá¬ážáá±á¬ áá»áá¯á·ááœááºážáá»ááºáá»á¬ážááᯠáá±á¬áºááŒáá²á·áááº-
- ááá¯ááááºážáá»á¬ážá áœá¬á á á®ážááœá¬ážáá±ážáá¯áá¹ááááᯠáá áºáá»áááºáááºážááœáẠáá¯ááºáá±á¬ááºáá±ážááá·áº ááááºáá±á¬ááºážáááºáá±á¬ááºááŸá¯ááẠáá»ááŸá¯á¶ážááŸá¯áá áºáá¯á¡ááŒá ẠááŒá®ážáá¬ážáá±á¬á¡áá¹ááá¬ááºáá»á¬ážááᯠáááºáá±á¬ááºáá±ážáá«áááºá á á®ážááœá¬ážáá±ážááá¯ááºáᬠáá¯áá¹áááá±áááá¯ááºáᬠáááŒá¬ááááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááẠá áá áºáá áºáá¯áá¯á¶ážáá»ááºááœááºááŸá¯áá»á¬ážáá®ááá¯á· áŠážáááºááœá¬ážá á±ááá·áº áá»áá¯á·ááœááºážááŸá¯á¡áá¹ááá¬ááºááᯠááá¯ážááœá¬ážá á±áááºá
- á
áœááºážáá±á¬ááºáááºááá¯ááºáᬠááŒá¿áá¬áá»á¬áž- á
á®ážááœá¬ážáá±ážáá¯áá¹áááá±áááẠáá»ááºážááŒá±á¬ááºážááŒá®áž ááŸá±ážááœá±ážáá±á¬ á¡ááºáá¬áá±á·á
áºááŸáááá·áº áááºážááá±áá¬ááŸáá·áº á¡áá¯ááºáá¯ááºáááº-
- áá±áá¬ááᯠáá áºááẠáá»á¯ááºááá¯ááºááŒá®áž ááœááºáááºá¡á á¯á¡áá±ážááœáẠá á¯ááºáá°ááœá¬ážáá«áááºá
- áááºáá±á¬ááºááŸá¯á ááŒááºá API á¡ááá·áºááœáẠáá±ážááŒááºážááŸá¯ ááá·áºáááºáá»ááºáá»á¬áž ááá¯á¶áá±á¬ááºááŒááºážááŒá±á¬áá·áº ááá¯ááááºážáááºáá±á¬ááºááŸá¯ááẠáá¯ááºáááºážáá¯ááºáá±á¬ááºááŒááºážá¡ááœáẠááá¯á¡ááºáááºááẠáá±áá¬áá»á¬ážááᯠáááŒá¬áá ááŒááºáá±ážáá«áááºá
- áá¯ááºáááºážááá¯ááºáᬠáá¯áá¹áááá±áááá¯ááºáᬠáá®ážááŒá¬ážá¡ááá¯ááºážáá»á¬ážá áœá¬ááᯠáá¯ááºáá±á¬ááºáááºá¡ááœáẠáá°áá®áá±á¬áá±áá¬ááᯠáááºáá«ááá²áá² áá±á¬ááºážááá¯ááá¯ááºááẠ(áááºááŸáºáá±áá¬ááŸááá±á¬ session beans áá»á¬ážááᯠáá±á«ááºážááá·áºááŒááºážááŒáá·áº á€ááŒá¿áá¬ááᯠáá»áŸá±á¬á·áá»ááá¯ááºáááºá ááá¯á·áá±á¬áº áááºážááẠáááá¯áá¬áááºáá¬ááᯠááá¯ááá¯ááŸá¯ááºááœá±ážá á±ááŒá®áž áá±áá¬áá áºááœááºááŸá¯ááŸáá·áº áááºááŸáºááá¬ážáááºááŒááºážááá¯ááºáᬠááŒá¿áá¬áá»á¬ážááᯠáááºáá®ážááá¯ááºáááº)á
- á¡áá±á¬ááºážá¡áááºááá
á¹á
áá»á¬áž-
- ááááºáá±á¬ááºážáááºáá±á¬ááºááŸá¯á០ááááºážáááºážáá¬ážááá·áº áááºááŒá²áá±á¬á¡ááŒá±á¡áá±ááŸá á á®ážááœá¬ážáá±ážáá¯ááºáááºážá ááºáá»á¬ážááẠááá¯ááááºážáá±áá¬ááŸáá·áº ááœá²ááœá²áá±ááŒá®áž á€ááŒá¿áá¬ááᯠááŒá±ááŸááºážááẠááœááºáá°áá±á¬áááºážáááºážáá»á¬áž áááŸááá«á
- ááá¯ááááºážáá±áá¬ááá±á¬á·áááºááŸá¯ááᯠááœá±áá±ážááœá±áá°á០ááœáŸá±á·ááŒááºáž- ááá¯ááááºážáá¯ááºáááºážááá¯ááºáᬠáá¯áá¹áááá±áááẠá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááŒá¯áá¯ááºááẠááá¯á¡ááºáá«á á¡ááŸááºááááºáá±áá¬áááŸááºáááºááŸá¯ááᯠáŠážá áœá¬á á áºáá±ážááŒá®ážáá±á¬ááºá á á®áá¶áá±á¬ááºááœááºáá¬ážáá±á¬áá±áá¬ááœáẠááŸááºááŒáá¯ááºááá¯ááºáá±á¬ááŒá±á¬ááºážáá²ááŸá¯ááŒá áºááá¯ááºáá»á±ááᯠáááºáá¯ááºááẠááá¯á¡ááºáá«áááºá ááŒááºááá±áá¬ááááºááá¯á·ááŒááºážááẠááŒá¿áá¬ááá¯ááŒá±ááŸááºážáá¬ááœáẠá¡áá±á¬ááºá¡áá°ááŒá áºá á±ááá¯ááºáá±á¬áºáááºážá ááá¯ááŒá±ááŸááºážáá»ááºááẠáá±á¬ááºáááºá¡áá¹ááá¬ááºáá»á¬ážááᯠáááºáá±á¬ááºáá¬ááŒá®áž á áá áºáá¡áá¯á¶ážá á¯á¶áá¯á¶ááŒááºá áááºáá»áááŸá¯ááᯠáá»á±á¬á·áááºážá á±áááºá
- á¡ááºááááºáá¯ááºááá·áºá¡áá« á¡ááá¯ááŸá¯ááºááœá±ážááŸá¯áá»á¬áž- á¡áá»áá¯á·ááá á¹á áá»á¬ážááœááºá áááºááẠááŒá²ááŒá¶áá±á¬áááºáá±á¬ááºááŸá¯ááŸáá·áº áá¯ááºáááºážáá¯áá¹ááááᯠáááŒáá¯ááºáááºáááºáž ááá¯á·ááá¯áẠáááºážáá»ááºáá±á¬ á¡á á®á¡á ááºááŒáá·áº á¡ááºááááºáá¯ááºááẠááá¯á¡ááºáááºá
á¡áá¯á¶ážááœááºá áá»áœááºá¯ááºááẠá¡ááŒá±áá¶áá»á¬ážááᯠááŒááºááœá¬ážááááº- ááá¯ááááºážáá±áá¬ááŸáá·áº ááá¯ááááºážáá¯ááºáááºážááá¯ááºáᬠáá¯áá¹ááááᯠááá¯ááºáááá¯áááºáá±á¬ááºááŸá¯áá áºáá¯á¡ááŒá Ạáá¯ááºááá¯ážáá¬ážáááºá á€áá»ááºážáááºááŸá¯ááẠá áá áºá¡ááœááºážááŸá á¡á áááºá¡ááá¯ááºážáá áºáá¯á¡ááŒá Ạmicroservice ááᯠááá¯ážááŸááºážá á±ááŒá®áž á¡áááºáá±á¬áºááŒáá«ááŒá¿áá¬áá»á¬ážááᯠáááŒá áºáá±á«áºá á±áá«á áá«ááááºáž á¡ááá¬ážááá¯ááºáá«áá°áž-
- áá¯ááºáááºážááá¯ááºáᬠáá¯áá¹áááá±á (á¡áá°ážáááŒáá·áºá áá¯ááºáááºážáá±á¬ááºááœááºáá»ááºáá»á¬ážá áá áºá áááºáá áºááá¯ááºážá¡ááŒá Ạáá¯á¶ážá áœá²áá°áá»á¬ážá áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáááº) ááŸáá·áº API ááááºáá±á¬ááºážáááºáá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº á¡ááŒááºá¡ááŸááºá¡áá»áá¯ážááŒá¯áááºá¡ááœáẠAPI á á¶áááºááŸááºááŸá¯ ááá¯á¡ááºáá«áááºá API á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠááá¯ááá¯ááá¯ááŒá¯áááºá ááŸá±á·ááŸáá·áºáá±á¬ááºááá¯á· ááá¯ááºáááºááŸá¯ááŸáááẠááá¯á¡ááºáá«áááºá
- áááºážáá²á·ááá¯á·áá±á¬ á¡áá±ážá á¬ážáááºáá±á¬ááºááŸá¯áá áºáá¯á á®á áá áºá áááºáá áºááá¯ááºážá¡áá±ááŒáá·áº áá¯ááºáááºážáá¯áá¹áááá±áááá¯ááºáá±á¬ááºááŸá¯ááá¯áá±áá»á¬á á±áááºá¡ááœáẠáá±á¬ááºááẠruntime á á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠáááºááá·áºááẠááá¯á¡ááºááŒá®áž áááºážááẠá¡ááá¯áá«á á¬ááŒáá·áºááá¯ááºáá»á¬ážá¡ááœáẠááá¯á¡ááºáá»ááºá¡áá áºáá»á¬ážááŒá áºáá¬á á±áááº- áá±á«á·áá«ážááŸá¯ááŸáá·áº á¡áá°ážá¡ááŒá±á¬ááºážááŸá®ááá¯ááŸá¯ á¡áááºážáá¯á¶ážáá áºáá¯á
- á á®ážááœá¬ážáá±ážáá¯áá¹áááá±ááá±á¬á·ááºáá²áá±ážáá¬ážáá°áá»á¬ážááẠá á¬ááŒáá·áºááá¯ááºáá¬ážááŸááºážáá»á¬ážááᯠááŒá±áá¬áá¶ááẠááá¯á¡ááºáááº- ááá¯ááºáááá¯áááºáá±á¬ááºááŸá¯áá áºáá¯ááœáẠá¡áá»áááºá¡ááŒá¬ááŒá®áž á¡ááŒá®ážáááºáááŒá®ážáá«áá áááºážááœáẠáá±ááºááá®áá±á¬ á á¬ááŒáá·áºááá¯ááºáá»á¬ážá áá¬ážááŸááºážáá áºáᯠáá«áááºááá¯ááºááœááºááŸááááºá áááºážááẠá¡ááºá¹áá«áááºá¡áá áºááá·áºááœááºážááŒááºážá¡ááœáẠáá»áŸá±á¬áºááá·áºááá¬ážáá±á¬á¡áá¬ážá¡áá®ážáá áºáá¯ááŒá áºááá¯ááºááŒá®áž áá¬ážááŸááºážáá»á¬ážááŒá¬ážááœáẠá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážáááá¬ááááŒá áºáá«á á á¬ááŒáá·áºááá¯ááºáá»á¬ážá áá¬ážááŸááºážá¡áá áºáá»á¬ážááá¯á· ááŒá±á¬ááºážááœáŸá±á·áááºá¡ááœáẠáááºáá±á¬ááºááŸá¯ááá¯ááºáááºážááá¯ááºáᬠáá¯áá¹áááá±á¬ááºážááᯠááá¯á¡ááºááá¯ááºáá«áááºá
ááááºáá±á¬ááºážáááºáá±á¬ááºááŸá¯á¡ááœáŸá¬áá áºáá¯ááẠááá¯ááá¯á·áá±á¬áááá¯áá¬áááºáá¬áá áºáá¯ááœááºáá«ááŸááá±á¬áºáááºážá á€á¡ááœáŸá¬ááẠááá¯ááááºážá á®ážááœá¬ážáá±ážáá¯áá¹áááá±áááá¯áá¯ááºáá±á¬ááºáááºá¡ááœáẠááœááºááááºáá¬áá¯á¶á á¶ááá¯ááºáá±á¬á·áá² á¡ááẠ"ááááºáá±á¬ááºáž" áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážááá·áº áááºážááááºáááºážáá»ááºáá áºáá¯áá¬ááŒá áºáááºá Domain Microservices áá»á¬ážá áá±á«á·áá«ážááŸá¯ááᯠááááºážááááºážáá¬ážáááºáá¬áá á á®áá¶ááá·áºááœá²ááŸá¯ááᯠáááá¯áá»á¯ááºááá¯ááºáááºáááºáž ááá¯áá²á·ááá¯á·áá±á¬ á¡ááœáŸá¬áá áºáᯠááá¯á¡ááºáá«áááºá
á¥ááá¬á¡á¬ážááŒáá·áºá áá¯ááºáááºážáá¯ááºáááºážá ááºáá»á¬ážááœáẠá¡áá¯á¶ážááŒá¯áá°áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠá¡áá¯ááºáá»á¬ážááᯠáá¯ááºáá±ážáááºá ááá¯á·áá±á¬áºá á¡áá¯ááºáá»á¬ážááŸáá·áºá¡áá° áá¯ááºáá±á¬ááºááá·áºá¡áá«á á¡áá¯á¶ážááŒá¯áá°ááẠáá±áá¯áá»á á¬áááºážááŸá ááá¯ááááºážá¡á¬ážáá¯á¶ážá០áá¯ááºáá±á¬ááºá áá¬áá»á¬ážááᯠááŒááºááááºá ááá¯ááá¯áááºááŸá¬ ááá¯ááááºážáá¯ááºáááºážááá¯ááºáᬠáá¯áá¹áááá±áááᯠááŸááºážáá áºááẠááá·áºáá»á±á¬áºáá±á¬ á¡áá¯ááºááŸááºáá¯á¶áááºááŒááºáž ááááºáá±á¬ááºážáá áºáᯠááŸáááááºáᯠááá¯ááá¯áááºá á€á¡ááŒá±á¬ááºážá¡áá¬ááœáẠá á®ážááœá¬ážáá±ážáá¯áá¹áááá±áá áá¯á¶ážááœááºááŸá¯ááᯠááááºážááááºážááŒááºážááẠá¡áá±á¬áºáá±áž ááŒá¿áá¬ááŒá áºááŒá®ážá áááºážááẠá€áááá¯áá¬áááºáá¬á áá±á¬ááºáááºá¡áá±ážá¡áá°áá áºáá¯ááŒá áºáááºá
á¡ááºááá®áá±ážááŸááºážáááºáá®ážáá°áá¡ááŒááºááŒáá·áº áá¯ááºáááºážáá¯ááºáááºážá ááºáá»á¬ážááᯠáá±á«ááºážá ááºááŒááºážá
á¡áááºááœááºáá±á¬áºááŒáá²á·ááŒá®ážááá·áºá¡ááá¯ááºážá áá±á¬ááºážááœááºáá±á¬ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¯ááºáá¯ááºá áœááºážá¡á¬ážááá¯áá±ááœááºááá¯ááºáááºá¡ááá¯á·ááŸá¬ á¡ááá®áá±ážááŸááºážáá»á¬ážá áœá¬áá¡ááŒááºá¡ááŸááºá¡áá»áá¯ážáááºáá±á¬ááºááŸá¯ááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááááºážááá¬ááŸáá·áºá¡ááºáá»ááºáá®áá¬ááá¯ááºáá¬á¡ááºá¹áá«áááºáá»á¬ážááŸáá¯ááºááœááºááá«áááºá
áá±á¬ááºážáá«ážá¡ááœáẠá¡áá°ážáá®ááœááºáá¬ážáá±á¬ á¡áá±á¬áºáá±ážáááºáá²áá±á¬áá±á«ááºážá ááºážááŸá¯ááŒá¿áá¬ááᯠááŒá±ááŸááºážááŒáá«á áá¯á·á áááºážááẠá¡ááá®áá±ážááŸááºáž áá¯á¶ážáá¯áá«áááºááá·áº "ááááºáž" á¡áá¯ááºááŒá áºááŒá®áž áááºážááá¯á·áá áºáá¯á á®ááẠááá¯ááááºážá¡áááºá¡áá»áá¯á·ááᯠáááºááŸááºáááº- "app1", "app2", "app3"á
á¡ááá®áá±ážááŸááºážáá áºáá¯á á®á¡ááœááºážááœáẠáá±á«ááºážá ááºáááºá áºáá¬ážááŸáá áºááá·áº "áá±á¬áá¯á¶ážáá á¬ážááŒááºáž" á áááºááá·áº á á®ážááœá¬ážáá±ážáá¯ááºáááºážá ááºáá»á¬ážááᯠá áááºáá¯ááºáá±á¬ááºáá«áááºá "Ball" áᯠá¡áááºáá±ážáá¬ážáá±á¬ áááºáá±á·áá»áºáá»á¬ážááẠáá±á¬áá¯á¶ážá¡ááŒá Ạáá¯ááºáá±á¬ááºáááºááŒá áºáááºá
ááááºážá ááºážáááºážáá»á¬áž:
- ááááá¯á¶ážáá á¬ážááá¬ážá á¡á ááŒá¯áá°áá«á áá°ááẠá¡ááŒá¬ážáá á¬ážááá¬ážáá»á¬ážááᯠááááºážááá¯á·ááááºáá±á«áºáᬠááááºážááá¯á áááºáᬠá¡áá»áááºáááœá±ážá¡áá¯á¶ážáááºááá¯ááºáááºá
- á¡ááŒá¬ážáá á¬ážááá¬ážáá»á¬ážááẠááááºážááœáẠáááºážááá¯á·ááá«áááºááŸá¯ááᯠááŒá±ááŒá¬áᬠáá áºáŠážááŸáá·áºáá áºáŠáž "áááºážááŸá®áž" áᬠááááá á¬ážááá¬ážá
- áá±á¬áá¯á¶ážáááŸáááŒá®ážáá±á¬áẠáá á¬ážááá¬ážááẠá¡ááŒá¬ážáá«áááºááá·áºáá á¬ážááá¬ážááᯠááœá±ážáá»ááºáᬠáá±á¬áá¯á¶ážáá±ážááá¯á·áááºá áááºááŸááºá á¯á á¯áá±á«ááºážá¡áá±á¡ááœááºááᯠáá±ááœááºáááºá
- áá á¬ážááá¬ážáá áºáŠážá á®ááœáẠááá¯áá á¬ážááá¬ážá áá±á¬áá¯á¶ážáá±ážááá¯á·ááŸá¯ááŸáá·áºá¡áá° áá»á±á¬á·áááºážááœá¬ážááá·áº "á áœááºážá¡ááº" ááŸááááºá á áœááºážá¡ááºáá¯ááºááœá¬ážáá±á¬á¡áá«á áá á¬ážááá¬ážá¡á¬áž ááááºážááŸáá¯ááºáááºááŒá®áž áááºážááá¯á·áá¡áá¬ážáá°ááŒá±á¬ááºážááŒá±ááŒá¬ááŒááºážá
- áá á¬ážááá¬ážáá áºáŠážáááºážáá»ááºáá áºáá«á ááœááºááœá¬ááœá¬ážááŒá±á¬ááºáž áá»ááºáá»ááºážááŒá±áá¬áááºá
- áá á¬ážááá¬ážá¡á¬ážáá¯á¶ážááᯠáááºáá¯ááºááá¯ááºáá²á·á¡áá« ááááá á¬ážááá¬ážá ááááºážááŒá®ážáá¯á¶ážááŒá±á¬ááºáž ááŒá±áá¬áá«áááºá á¡áááºá áá°ááẠááááºážááᯠá á±á¬á á®ážá áœá¬ ááœááºááœá¬ážáá«á ááŒá®ážááŒá±á¬ááºááẠááááºážááᯠááá¯ááºáá¬ááẠáá»ááºáá±áá±ážáááºá
á€ááŒá¿áá¬ááá¯ááŒá±ááŸááºážáááºá ááá·áºá¡á¬áž Kotlin ááœáẠáá¯áá¹áááá±áááᯠá¡áááºážáá¯á¶áž boilerplate áá áºáá¯ááŒáá·áº áá»á áºáá»á áºáá áºáá áºáá±á¬áºááŒááá¯ááºá á±ááá·áº áá¯ááºáááºážáá¯ááºáááºážá ááºáá»á¬ážá¡ááœáẠáá»áœááºá¯ááºááá¯á·á DSL ááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
app1 á¡ááºááá®áá±ážááŸááºážááœááºá ááááá¯á¶ážáá á¬ážááá¬áž (ááááºážáá¡á ááŒá¯áá°áááºážááŒá áºáááº) ááá¯ááºáááºážáá¯ááºáááºážá ááºááẠá¡áá¯ááºáá¯ááºáááá·áºáááº-
á¡áááºážá¡á á¬áž InitialPlayer
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}")
}
á á®ážááœá¬ážáá±ážáá¯áá¹ááááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá¡ááŒááºá á¡áááºáá±á¬áºááŒáá« áá¯ááºááẠáá¯á¶ááŒááºážáá áºáá¯á¡ááŒá ẠááŒááºáá¬ááŒááºáá¬ááá¯ááºáá±á¬ áá¯ááºáááºážáá¯ááºáááºážá ááºáá áºáá¯á á¡áá¬ááá¹áá¯áá¯á¶á á¶áá áºáá¯ááᯠáá¯ááºáá¯ááºááá¯ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠVisualizer ááᯠá¡áá±á¬ááºá¡áááºááá±á¬áºáá±ážáá±á¬ááŒá±á¬áá·áº á¡áá»áááºá¡áááºážáááºááŒá¬á¡á±á¬áẠáá¯á¶ááœá²áá²á·áááẠ(á€áá±áá¬ááœáẠáá»áœááºá¯ááºááẠá¡áááºáá±á¬áºááŒáá«áá¯ááºááŸáá·áº ááŒá±áá¯á¶á ááá¯ááºáá»á±á¬áá®ááœá±ááŒá áºááŸá¯ááᯠááá¯ážáááºá á±ááẠááááºáá»á¬ážá¡áá¯á¶ážááŒá¯ááŒááºážááŸáá·áºáááºáááºááá·áº 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}")
}
áá¯á¶ááŒááºáž-
app3 á¡ááºááá®áá±ážááŸááºážááœááºá áá»áœááºá¯ááºááá¯á·ááẠáá á¬ážááá¬ážá¡á¬áž á¡áááºážáááºááœá²ááŒá¬ážáá±á¬á¡áá°á¡áá¬ááŒáá·áº ááŒá¯áá¯ááºáá±ážáááº- áá±á¬ááºáá á¬ážááá¬ážááᯠáá»áááºážááœá±ážáá»ááºááá·áºá¡á á¬ážá áá°ááẠround-robin algorithm á¡á áá¯ááºáá±á¬ááºáááá·áºáááº-
á¡áááºážá¡á á¬áž 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}")
}
ááá¯ááºáá«á áá á¬ážááá¬ážá á¡ááŒá¯á¡áá°ááẠááááºáá¯á¶á á¶ááŸáá·áº áááœá¬ááŒá¬ážáá±á ááá¯á·ááŒá±á¬áá·áº áá¯á¶ááŒááºážááẠáááŒá±á¬ááºážáá²áá«á
ááᯠá¡á¬ážáá¯á¶ážáá¯ááºáá±á¬ááºááẠá ááºážáááºááŸá¯áá áºáᯠááá¯á¡ááºáá«áááºá áá±á¬ááºážáá«ážááᯠboilerplate ááŒáá·áº áááŸá¯ááºá á±áááºá¡ááœáẠá á¬áá±ážááœá²ááá¯ááºááá¯áᬠáá»áœááºá¯ááºáá±ážááẠ(ááááºáá±á¬á·á á¡ááŒá¬ážá á®ážááœá¬ážáá±ážáá¯ááºáááºážá ááºáá»á¬áž áá±á«ááºážá ááºááŸá¯ááᯠá ááºážáááºáááºá¡ááœáẠá¡á á±á¬ááá¯ááºážá áááºáá®ážáá¬ážáá±á¬ á ááºážáááºáááºáááºážáá»ááºááᯠáá»áœááºá¯ááºá¡áá¯á¶ážááŒá¯áá²á·áááº)á
á ááºážáááºááááºáž()
@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;
}
á ááºážáááºááŸá¯ááá¯áá¯ááºáá±á¬ááºáá«á ááŸááºáááºážááá¯ááŒáá·áºáá«
console á¡ááœááº
ÐзÑÑа блПкОÑПвка клÑÑа 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!
á€á¡áá¬á¡á¬ážáá¯á¶ážá០á¡áá±ážááŒá®ážáá±á¬ áá±á¬ááºáá»ááºáá»á¬ážá áœá¬ááᯠáá¯ááºáá°ááá¯ááºáááºá
- ááá¯á¡ááºáá±á¬ áááááá¬áá»á¬áž áááŸáááá¯ááºáá«áá á¡ááá®áá±ážááŸááºáž developer áá»á¬ážááẠáá¯ááºáááºážááá¯ááºáᬠáá¯áá¹ááááᯠáááœá²áá¯ááºáá² á¡ááá®áá±ážááŸááºážáá»á¬ážááŒá¬áž áá±á«ááºážá ááºážááŸá¯ á¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºááŸá¯áá»á¬ážááᯠáááºáá®ážááá¯ááºáááºá
- á¡ááºáá»ááºáá®áá¬á áœááºážáááºáá»á¬áž ááá¯á¡ááºáá±á¬ áá±á«ááºážá ááºáá¯ááºáááºážáá áºáá¯á ááŸá¯ááºááœá±ážááŸá¯ (ááŸá¯ááºááœá±ážááŸá¯) ááᯠframework á áááºáá±á¬ááºááŸá¯ááœáẠáááŠážááá·áºááœááºážáá¬ážáá»áŸáẠáá°áá±á¬ááºá¡ááœááºáž ááŸááºáá¬ážááá¯ááºáááºá á¡áá¯ááºáá¡áááºá¡áá² (difficulty) ááᯠááŸááºáá¬ážááááá«á ááá¯á·ááŒá±á¬áá·áº áá¯ááºááŸá áááºáá²áá±á¬á¡áá¯ááºá¡ááœáẠááŒá±ááŸááºážáá»ááºááẠááá¯ááºáá»á±á¬áá®ááœá±ááŸááááºááŒá áºáááºá
- áá±á«ááºážá ááºážááŒááºážááá¯ááºáᬠáá¯áá¹áááá±áááᯠáá±á¬áºáá±á¬ááºááá·áºá¡áá«ááœáẠáá±á«ááºážá ááºáá«áááºáá°á¡á¬ážáá¯á¶ážá ááŒááºáááºááŒá±á¬ááºážáá²ááŸá¯á linearizability áááºážáá²á·ááŒááºážááᯠááá·áºááœááºážá ááºážá á¬ážááẠááá¯á¡ááºáá«áááºá áááºážááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž ááŒááºáááŒá áºáááºáá»á¬ážááŒá áºáá±á«áºááá·áºá¡á á®á¡á á¥áºá¡áá±á«áº á¡á¬áá¯á¶ááá¶á á¬ážááá¯ááºá á±áááºá¡ááœáẠáá¯áá¹áááá±áááᯠááŸá¯ááºááœá±ážá á±áá«áááºá áá»áœááºá¯ááºááá¯á·áá¥ááá¬ááœááºá áá á¬ážááá¬ážááẠááááºážááŸááœááºááŒá±á¬ááºážááŒá±áá¬ááŒá®ážáá±á¬áẠááááºážááœááºáá«áááºáááºá¡áááºážá¡áá»ááºááá¯ááºážá á±áááº- á¡ááŒá¬ážáá á¬ážááá¬ážáá»á¬ážááẠáááºážáááœááºáá±á«ááºááŸáá·áºáááºáááºááá·áºá¡áá»ááºá¡áááºááá¯áá±á¬ááºááŸáááŒá®ážáá«áááºáá°á¡á¬ážáá¯á¶ážááŸáá¯ááºáá±á¬ááºááá·áºá¡áá»áááºá¡áááá°á·áá¶áá±á¬áá¯á¶ážáááºáááºáá±ážááá¯á·áááºááŒá áºáááºá á€áá¯áá¹áááá±áááẠááááºážáá ááºážáá»ááºážáá»á¬ážááᯠáááá¯ááºáá¬áá² ááœá±ážáá»ááºáá¬ážáá±á¬ áááá¯áá¬áá±á¬ááºáá±á¬ááºá¡ááœááºáž á¡áá±ážá¡áá°ááŒá±ááŸááºážáá»ááºáá áºáá¯ááŒá áºáááºá
ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·á ááŒá±ááŸááºážáá»ááºá á¡áá±ážá¡áá°áá»á¬ážááŸáá·áº á¡ááŒá¬ážá¡áá»ááºáá»á¬ážá¡ááŒá±á¬ááºáž á¡áá»áá¯ážáá»áá¯ážáá±á¬ ááááá¬ááºáá»á¬ážá¡ááŒá±á¬ááºáž ááœá±ážááœá±ážááŒáá«á áá¯á·á
á á¬ááá¯á¡á¬ážáá¯á¶ážááᯠáááºážá á®áá áºáá¯áááºážááœááº
áá±á«ááºážá ááºáá¬ážáá±á¬ á¡ááá®áá±ážááŸááºážáá»á¬ážá¡á¬ážáá¯á¶ážááẠááŒááºáááœá²á á¬ážá¡ááŒá Ạááá¯ááºá á¬ážááŒá¯áá¬ážááá·áº áá±á«ááºážá ááºáááºá áºáá áºáá¯á áááºáá±á·áá»áºáá»á¬ážá¡ááœáẠBPMQueue áá áºáá¯ááŸáá·áº á¡áá»ááºááŒááŸá¯áá»á¬áž (ááŒá áºáááºáá»á¬ážá¡ááœáẠBPMTopic áá±á«ááºážá ááºáá áºáá¯) ááŸáá·áº á¡áá¯ááºáá¯ááºáá«áááºá áááºážá á®áá áºáá¯áááºážááŸáá áºááá·áº áááºáá±á·áá»áºá¡á¬ážáá¯á¶ážááᯠáá±ážááá¯á·ááŒááºážááẠá¡áá±ážá¡áá°áá áºáá¯ááŒá áºáááºá áá¯ááºáááºážáá¯áá¹ááá¡ááá·áºááœááºá á áá áºáááºáá±á¬ááºáá¯á¶ááᯠááŒá±á¬ááºážáá²ááŒááºážáááŒá¯áá² áááºá¡ááá¯ááŸáááá±á¬áẠáááºáá±á·ááºá»á¡áá»áá¯ážá¡á á¬ážá¡áá áºáá»á¬ážá áœá¬ááᯠááá¯ááááºáááºááá¯ááºáá«áááºá áááºážááẠáááá¬áááºááŸá¬ážáá±á¬ááá¯ážááŸááºážááŸá¯áá áºáá¯ááŒá áºáááºá ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááá¯á¶ááŸááºáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážáá¡ááŒá±á¡áá±ááœááºá áá»áœááºá¯ááºááá¯á·á¡ááœáẠá¡ááœááºá¡áá±ážááá«áá¯á¶áá±á«áºááá·áº á¡áá»áá¯á·áá±á¬á¡áá¹ááá¬ááºáá»á¬ážááᯠáááºáá±á¬ááºáá«áááºá
ááá¯á·áá±á¬áºá á€áá±áá¬ááœáẠááááá¬ááºáá áºáá¯ááŸááááº- á¡ááá®áá±ážááŸááºážáá áºáá¯á á®ááẠáááºážáááá¯ááááºážá¡áááºááŒáá·áº áááºáá±á«ááºááŸá áááºážá á®á០"áááºážá" áááºáá±á·áá»áºáá»á¬ážááᯠá á áºáá¯ááºáááºá ááá¯á·á¡ááŒááºá á¡áááºá áááºááẠsignal á "scope" ááᯠá¡ááºááºáá áºáá¯áááºážááœáẠááá·áºáááºááẠááá¯á¡ááºáá«á signal áá»á¬ážááœáẠdomain ááᯠáááºááŸááºááá¯ááºáá«áááºá áááºážááẠáááºá áºáá¬ážá bandwidth ááᯠááá¯ážááŒáŸáá·áºááá·áºáááºá ááá¯á·áá±á¬áº á á®ážááœá¬ážáá±ážáá¯áá¹áááá±áááẠááá¯á¡áá« ááá¯ááááºážá¡áááºáá»á¬ážááŒáá·áº áá¯ááºáá±á¬ááºááááºááŒá áºáááº- áááºáá±á·áá»áºáá»á¬ážááᯠááááºá á¬áá±ážáááºá¡ááœáẠáááŒá áºááá± ááá¯á¡ááºáááºá á¡áá»ááºááŒááŸá¯áá»á¬ážááᯠááŸá áºáááºááœááºááŒá áºáááºá
áá±á«ááºážá ááºáááºá áºáá¬ážá áá¯á¶ááŒááºá áááºáá»áááŸá¯ááᯠá¡á¬ááá¶áá«áááºá
áá¯á¶ááŒááºá áááºáá»áááŸá¯ááẠá¡áá¬áá»á¬ážá áœá¬ááŒáá·áº ááœá²á·á ááºážáá¬ážáááº-
- ááœá±ážáá»ááºáá¬ážáá±á¬ áááºáá±á·áá»áºááœá²á á¬ážááẠáááá¯áá¬áááºáá¬á á¡áá±ážáá«áá±á¬ á¡á áááºá¡ááá¯ááºážáá áºáá¯ááŒá áºááŒá®áž áá»ááŸá¯á¶ážááŸá¯á áá áºáá¯áááºážáá±á¬á¡áá»ááºááŒá áºáááº- áááºážááẠáá¯á¶áá±á¬ááºáá±á¬ á¡ááŸá¬ážá¡ááœááºážááᯠáá¶ááá¯ááºáááºááŸáááá«áááºá á¡áá±á¬ááºá¡áá¶á·áá±á¬ááºážáá»á¬ážááŸáá·áº ááŒá®ážáá¬ážáá±á¬ á¡ááá¯ááºážá¡ááá¯ááºážáá áºáá¯ááŒáá·áº á¡áá»áááº-á ááºážáááºááŒá®ážáá±á¬ á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬ážááá¯áᬠá¡áá¯á¶ážááŒá¯ááá·áºáááºá
- áá±á«ááºážá ááºážáá¬ážáá±á¬ á¡ááá®áá±ážááŸááºážáá»á¬ážá០áá¯ááºááá¯ááºážá¡á ááá¯ááºážááŒá¬ážáááá·áº áááºáá±á·ááœá²á á¬ážá ááŒáá·áºáá¬ážáá±á¬áááŸáááá¯ááºááŸá¯ááᯠáá±áá»á¬á á±ááẠááá¯á¡ááºááẠ(á¡áá¯á¶ážáá»áá¯ááºáááºážááá¯ááºáᬠáá¯áá¹áááá±áááá¯ááºáᬠá¡ááá®áá±ážááŸááºážáá»á¬áž ááŒáá·áºáá¬ážá áœá¬áááŸáááá¯ááºááŸá¯ááẠáá±ážáá±á¬ááºááẠááá¯ááá¯áááºáá²ááŒá®áž á á»á±ážááŒá®ážáááº)á
- ááœá²á á¬ážááẠ"á¡áááºážáá¯á¶ážáá áºááŒáááº" áá±ážááá¯á·ááŸá¯á¡á¬ááá¶áá»ááºáá±ážáááºáá¬áááºááŸááááºá á€áááºááŸá¬ áá±á«ááºážá ááºáááºá áºá áá¯á¶ááŒááºá áááºáá»ááá±á¬ áááºáááºááŸá¯á¡ááœáẠáááŒá áºááá±ááá¯á¡ááºáá±á¬ ááá¯á¡ááºáá»ááºááŒá áºáááºá "áá áºááŒáááºáááá" á¡ááá·áºá¡á¬ááá¶áá»ááºáá»á¬ážá¡ááœáẠáááá¯á¡ááºáá«- áá¯ááºáááºážáá¯ááºáááºážá ááºáá»á¬ážááẠáá¯á¶ááŸááºá¡á¬ážááŒáá·áº áááºáá±á·áá»áºáá»á¬áž ááá¯á·ááá¯áẠááŒá áºáááºáá»á¬áž áááºáá«ááá²áá²áá±á¬ááºááŸááá¬ááŒááºážá¡áá±á«áº á¡áá²áááºááŒááºážáááŸááááá¯á áááºážááẠá¡áá±ážááŒá®ážáá±á¬ á¡áá°ážá¡áá¯ááºáá»á¬ážááœááºá á¡ááŒá²áááŒááºá¡áá¯á¶ážááŒá¯ááŒááºážááẠáá¯ááºáááºážááá¯ááºáᬠáá¯áá¹áááá±áááá¯ááºáᬠá á áºáá±ážááŸá¯áá»á¬ážááᯠáááºáá±á¬ááºážááá·áºááẠááá¯ááá¯ááœááºáá°ááẠâá á»á±ážááŒá®ážáááºâ âá¡á¬ááá¶áá»ááºá
- áááºáá±á·áá»áºáá»á¬ážááŸáá·áº á¡áá»ááºááŒááŸá¯áá»á¬áž áá±ážááá¯á·ááŒááºážááẠáá¯ááºáááºážáá¯ááºáááºážá
ááºáá»á¬ážááŸáá·áº ááá¯ááááºážáá±áá¬á¡ááŒá±á¡áá±ááŒá±á¬ááºážáá²ááŸá¯ááŸáá·áºá¡áá° áá¯á¶ááœá±áá±ážááœá±áá°áá
áºáá¯ááœáẠáá«áááºááááºá á
áááºááŒáá¯ááºááœá±ážáá»ááºááŸá¯ááŸá¬ áá¯á¶á
á¶ááᯠá¡áá¯á¶ážááŒá¯áááºááŒá
áºáááºá
á¡áá±á¬ááºážá¡áááºááœááºáá¯á¶áž áá«áá±ááá·áº database áá²ááŸá¬ áá±á¬ááºááẠtable áá áºáá¯áá²á· relay áá áºáᯠááá¯á¡ááºáá«áááá·áºáááºá JEE á¡ááá®áá±ážááŸááºážáá»á¬ážááœááºá áá±ááᶠJTA áááºáá±áá»á¬ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº áááºážááᯠááá¯ážááŸááºážá¡á±á¬áẠááŒá¯áá¯ááºááá¯ááºáá±á¬áºáááºáž ááœá±ážáá»ááºáá¬ážáá±á¬ ááœá²á á¬ážááŸáá·áº áá»áááºáááºááŸá¯ááẠáá¯ááºááœáẠá¡áá¯ááºáá¯ááºááá¯ááºááááºXA ; - á¡áááºáááºáá±á·áá»áºáá»á¬ážááŸáá·áº á¡ááŒá áºá¡áá»ááºáá»á¬ážááᯠááá¯ááºááœááºááŒá±ááŸááºážáá°áá»á¬ážááẠáá¯ááºáááºážáá¡ááŒá±á¡áá±á¡á¬áž ááŒá±á¬ááºážáá²ááŒááºážá ááœá±áá±ážááœá±áá°ááŸáá·áºáááºáž áá¯ááºáá±á¬ááºááá«áááº- ááá¯ááá¯á·áá±á¬ ááœá±áá±ážááœá±áá°ááᯠááŒááºáááºáá¯ááºááááºážáá«á áááºáá±á·áá»áºáááºáá¶áááŸáááŸá¯ááá¯áááºáž áááºáá»ááºááááºááŒá áºáá«áááºá
- ááŸá¬ážááœááºážááŸá¯áá»á¬ážááŒá±á¬áá·áº áá±ážááá¯á·ááááá±á¬ áááºáá±á·áá»áºáá»á¬ážááᯠáá®ážááŒá¬ážá
ááá¯ážááœáẠááááºážáááºážáá¬ážááá·áºáááºá
D.L.Q. (Dead Letter Queue)á ááá¯ááá¯á·áá¯ááºáá±á¬ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠáááºážá á¬áá»á¬ážááᯠáááºážáááá¯ááŸá±á¬ááºááŸá¯ááœáẠááááºážáááºážáá¬ážáᬠáááºážááá¯á·á¡á¬áž áááºááœáŸááºážáá»ááºáá»á¬áž (á¡ááŒááºá¡á¯ááºá á¯ááœá²á·ááŒááºážááŸáá·áº ááŸá¬ááœá±ááŒááºážá¡ááœááº) API á¡á¬áž ááŒáá·áºááŸá¯áááºá áŠážáááºáá¬ááááºá á¬ááá¯á· ááŒááºáááºáá±ážááá¯á·ááŒááºážááŸáá·áº áááºáá±á·áá»áºáá»á¬ážááᯠáá»ááºááŒááºážá¡ááœáẠAPI ááᯠáá±á¬áºáá¯ááºáá±ážáá«áááºá á áá áºá á®áá¶ááá·áºááœá²áá°áá»á¬ážááẠáááºážááá¯á·á áááºá¡ááºáá¬áá±á·á áºááŸáááá·áº á€áááºáá±á¬ááºááŸá¯ááŸáá·áº á¡áá¯ááºáá¯ááºááá¯ááºáááºá - ááœá²á á¬ážáááºáááºáá»á¬ážááœáẠáááºááẠDLQ ááá¯á· áááºáá±á·áá»áºáá»á¬ážáááºáá±á¬ááºááá¯ááºááŒá±ááᯠáá»áŸá±á¬á·áá»áááºá¡ááœáẠáá±ážááá¯á·ááŸá¯áá»á¬ážááŒá¬ážááœáẠááŒáá·áºááŒá¬ááŸá¯áá»á¬ážááŸáá·áº áá±ážááá¯á·ááŸá¯áá»á¬ážááŒá¬ážááœáẠááŒáá·áºááŒá¬ááŸá¯áá»á¬áž á¡áá±á¡ááœááºááᯠáá»áááºááŸáááẠááá¯á¡ááºááẠ(á¡áá±á¬ááºážááœááºáá¯á¶áž ááá·áºáááºáá±á¬ááºáá»á¬ážááᯠááœááºáá»ááºááẠáááŒá áºááá¯ááºááá±á¬ááºááŒá áºáá±á¬áºáááºáž áááºážááá¯á·ááᯠáááºááœá±á·áá»áá» áá¯ááºáá±á¬ááºááŒá®áž áá»áááºááŸáááá¯ááºááẠá á áºáááºáá±áž);
- DLQ á ááá¯ážááᯠá ááºáááºáááŒáẠá á±á¬áá·áºááŒáá·áºáá±ááá·áºááŒá®áž á á±á¬áá·áºááŒáá·áºáá±ážá áá áºááẠáá±ážááá¯á·ááá¬ážáá±á¬ áááºáá±á·áá»áºáá»á¬áž ááŒá áºáá±á«áºáá¬ááá·áºá¡áá« áááºááá¯ááºááá»áŸ ááŒááºááŒááºáááºááẠáá¯á¶á·ááŒááºááá¯ááºááẠá áá áºá á®áá¶ááá·áºááœá²áá°áá»á¬ážááᯠá¡ááŒá±á¬ááºážááŒá¬ážááá·áºáááºá áááºážááẠáá»ááŸá¯á¶ážááŸá¯ ááá¯á·ááá¯áẠáá¯ááºáááºážááá¯ááºáᬠáá¯áá¹ááá¡ááŸá¬ážáá áºáá¯á "áá»ááºá á®ážááŸá¯áá¯ááº" ááᯠáá»áŸá±á¬á·áá»áá±ážáááá·áºáááºá
- áá±á«ááºážá ááºážáá±ážáááºá áºááẠá¡ááá®áá±ážááŸááºážáá»á¬ážá áá¬áá®áááŸáááŒááºážá¡ááœáẠá¡á¬áá¯á¶ááá¶á á¬ážááá¯ááºááá«áááº- áá±á«ááºážá ááºá á¬áááºážáá±ážááœááºážááŸá¯áá»á¬ážááẠáá¬ááŸááºáá¶ááááºá ááŸáá·áº á¡ááá®áá±ážááŸááºážáááá¯ááááºážá¡áááºááẠá¡ááá®áá±ážááŸááºážáááŸááá»áááºááœáẠáááºážá á®á០áááºážááááºáá±á·áá»áºááᯠáá áºá á¯á¶áá áºáá±á¬ááºá០áá¯ááºáá±á¬ááºááẠáááŒáá¯ážá á¬ážááá¯ááºá á±ááẠáá±á«ááºážá ááºáá¬ážáá±á¬áááºá áºáá¬ážááŒá áºááá«áááºá
áá¯ááºáááºážááá¯ááºáᬠáá¯áá¹áááá±áááá¯ááºáᬠááŒáá¯ážáá»á¬ážá áá±ážáááºážááŸá¯ááᯠá¡á¬ááá¶áá«áááºá
áá¯ááºáááºážáá áºáá¯á áá°áá®áá±á¬á¥ááá¬ááẠáááºáá±á·áá»áºáá»á¬ážááŸáá·áº á¡ááŒá áºá¡áá»ááºáá»á¬ážá áœá¬ááᯠáá áºááŒáá¯ááºáááºáááºáž áááºáá¶áááŸáááá¯ááºááŒá®áž áááºážááᯠááŒáá¯ááºáá°á áááºáááºááŒá áºáááºá áá áºáá»áááºáááºážááŸá¬áááºá á¡ááºááá®áá±ážááŸááºážáá±á¬á·ááºáá²áá±ážáá¬ážáá°á¡ááœááºá á¡áá¬á¡á¬ážáá¯á¶ážááẠááá¯ážááŸááºážááŒá®áž ááŒáá¯ážáá±ážáááºážááá·áºáááºá
áá¯ááºáááºážá áẠáá¯ááºáááºážááá¯ááºáᬠáá¯áá¹áááá±áááẠá€áá¯ááºáááºáž áá¯ááºáááºážá ááºá¡áá±á«áº áá áºáŠážáá»ááºážá¡áá±á«áº áááºáá±á¬ááºááŸá¯ááŸááá±á¬ ááŒááºáááŒá áºáááºáá áºáá¯á á®ááᯠáá¯ááºáá±á¬ááºáááºá á€ááŒá áºáááºáá»á¬ážáááº-
- á á®ážááœá¬ážáá±ážáá¯ááºáááºážá á¥áºáá áºáá¯á áááºááŒááºáž
- áá¯ááºáááºážáá¯ááºáááºážá ááºáá áºáá¯á¡ááœááºáž áá¯ááºáá±á¬ááºáá»ááºáá áºáá¯ááŸáá·áºáááºá ááºáá±á¬ áá¯á¶ážá áœá²áá°áá¯ááºáá±á¬ááºáá»ááºá
- áá¯ááºáááºážáá¯ááºáááºážá ááºáá áºáá¯á¡á¬áž á á¬áááºážááœááºážáá¬ážááá·áº áááºáá±á·áá»áº ááá¯á·ááá¯áẠá¡áá»ááºááŒáááºáá¶ááŸá¯ á
- áá¯ááºáááºážáá±á¬ááºááœááºá á¥áºá¡á áááºááŸááºáá¬ážáá±á¬ timer ááááºáááºážáá¯ááºáá¯á¶ážááŒááºážá
- API ááŸáá áºááá·áº áá¯ááºáá±á¬ááºáá»ááºááᯠááááºážáá»á¯ááºááŒááºáž (á¥ááᬠáá¯ááºáááºážá áẠáá»ááºááááºážááŒááºáž)á
ááá¯ááá¯á·áá±á¬ááŒá áºáááºáá áºáá¯á á®ááẠá á®ážááœá¬ážáá±ážáá¯ááºáááºážá á¥áºáá áºáá¯áá¡ááŒá±á¡áá±á¡á¬áž ááŒá±á¬ááºážáá²ááá¯ááºáááº- á¡áá»áá¯á·áá±á¬áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠá¡áá¯á¶ážáááºááá¯ááºááŒá®áž á¡ááŒá¬ážá¡áá¬áá»á¬ážá áááºááá¯ááºáááºá áááºááŒá²áá±á¬áá¯ááºááá¹áááá»á¬ážááááºááá¯ážáá»á¬ážááᯠááŒá±á¬ááºážáá²ááá¯ááºáááºá áááºááá·áºáá¯ááºáá±á¬ááºáá»ááºááá¯áááᯠááááºááá¯ááºááŒááºážááŒáá·áº á¡á±á¬ááºáá«áá¯ááºáá±á¬ááºáá»ááºáá áºáᯠááá¯á·ááá¯áẠáá áºáá¯áááºááá¯áá±á¬ áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡áááºáááºáá¬á á±ááá¯ááºáá«áááºá áá áºááẠáááºážááá¯á·ááẠá¡ááŒá¬ážááŒá áºáááºáá»á¬ážááᯠá á±á¬áá·áºááá¯ááºážááŒááºážááᯠáááºááá·áºááá¯ááºáááºá ááá¯á·ááá¯áẠáá±á¬ááºáááºáá±áá¬áá»á¬áž áááá¯á¡ááºáá«áá áááºážááá¯á·ááẠáá°áá®áá±á¬ ááœá±áá±ážááœá±áá°ááœáẠá¡ááŒá®ážáááºááá¯ááºáááºá ááœá±áá±ážááœá±áá°ááᯠáááááºáá®á áá¯ááºáááºážá á¥áºá¡áá áºá á¡ááŒá±á¡áá±áá áºááᯠáá±áá¬áá±á·á áºááœáẠááááºážáááºážáá¬ážááŒá®ážá áááºážááẠáá¬ááá·áº ááŒááºáááŒá áºáááºá¡ááœáẠá á±á¬áá·áºááá¯ááºážáááºááŒá áºáááºá
áááºááœáŸááºáá±á¬áá±áá¬áá±á·á áºááœáẠááááºážáááºážáá¬ážáá±á¬ áááºááá¯ááºáá¯ááºáááºáž áá¯ááºáááºážá ááºáá±áá¬ááẠSELECT FOR UPDATE ááá¯á¡áá¯á¶ážááŒá¯áá±á¬á¡áá«ááœáẠá¡ááœááºá¡áááºááŒá±áá±á¬ áááºáá°ááŒá¯ááŸá¯áá¯ááºáá±á¬ááºááŒááºážá¡áá»ááºááŒá áºáááºá á¡áááºá ááœá±áá±ážááœá±áá°áá áºáá¯ááẠáááºážááá¯ááŒá±á¬ááºážáá²ááẠáá±áá¬áá±á·á áºá០áá¯ááºáááºážáá¯ááºáááºážá ááºá¡ááŒá±á¡áá±ááᯠááá°ááẠá á®áá¶áá¬ážáá«áá á¡ááŒáá¯ááºááœáẠá¡ááŒá¬ážááœá±áá±ážááœá±áá°ááẠá¡ááŒá¬ážááŒá±á¬ááºážáá²ááŸá¯áá áºáá¯á¡ááœáẠáá°áá®áá±á¬á¡ááŒá±á¡áá±áá áºáá¯ááᯠáááŸáááá¯ááºáááºááŒá áºááŒá®áž áááááœá±ááœáŸá²ááŒá±á¬ááºážááŸá¯ááŒá®ážáá¯á¶ážááŒá®ážáá±á¬áẠáá¯ááááá áºáá¯ááẠááŒá±á¬ááºážáá²ááŒá®ážáá¬ážá¡ááŒá±á¡áá±ááᯠá¡á¬ááá¶áá»ááºáá±ážáááºá
DBMS áááºááŒááºážááŸá á¡ááá¯ážááŒááºáá±á¬áá±á¬á·ááá±á¬ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á ááá¯á¡ááºááá·áº ááá¯á¡ááºáá»ááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠááŒáá·áºáááºážáá±ážáá«áááºá
ááá¯á·áá±á¬áºá á¡ááá¯ážááŒááºáá±á¬áá±á¬á·áááºááŸá¯áá»á¬ážááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž ááá±ááá»á¬ááŒá áºáá±á á±ááẠááŒáááºážááŒá±á¬ááºáá»ááºááŸááááºá ááá¯ááá¯áááºááŸá¬ á á®ážááœá¬ážáá±ážááá¯ááºáá¬áá¯áá¹áááá±áááá¯ááºáᬠááá¯ážááœá¬ážáá±á¬ááá á¹á áá»á¬ážááœáẠááá±ááá»á¬ááŒá áºáá±áá«á á¡áá»áá¯á·áá±á¬ááœááºážáá¶ááŸá¯áá»á¬ážááœáẠá¡ááºááááºá¡ááœáẠSELECT ááẠáá»áá¯ážááŒá±á¬ááºážáá®áá»á±á¬áºáá±á¬á¡áá»áááºáá¯ááºáá¯á¶ážááẠááá·áºáááºáá¬ážááá·áºáá²ááŒá áºáááºá
áá±á¬ááºááŒá¿áá¬áá áºáá¯ááá±á¬á· áá¯ááºáááºážá á¥áºá áááºááŒááºážáá²á· áááºáá°ááŒá¯ááŸá¯áá«áá²á á á®ážááœá¬ážáá±ážáá¯ááºáááºážá á¥áºáááŸááá±á¬áºáááºážá áá±áá¬áá±á·á áºááœáẠááŒááºáááºáááŸááá±á¬ááŒá±á¬áá·áº áá±á¬áºááŒáá¬ážáá±á¬áááºážáááºážááẠá¡áá¯ááºáááŒá áºáá«á áá¯ááºáááºážá á¥áºáá áºáá¯á áá®ážááŒá¬ážáááºáááºáá áºáá¯ááœáẠáá°ážááŒá¬ážááŸá¯ááá¯áá±áá»á¬ááá¯áá«áá áá¯ááºáááºážá ááºá¡áááºážá¡á á¬ážááŸáá·áº áááºááá¯ááºáá±á¬áááºáááºááŸáá·áº áááºá ááºáá±áá±á¬ áááºáá°ááŒá¯ááŸá¯áá¯á¶á á¶áá áºáá»áá¯ážáá»áá¯áž ááá¯á¡ááºáá«áááºá á€ááŒá¿áá¬ááá¯ááŒá±ááŸááºážáááºá áá»áœááºá¯ááºááá¯á·ááẠááŒááºááááºáá±á¬ááºááŸá¯ááŸáá áºááá·áº URI áá±á¬áºáááºááŸá áá±á¬á·ááŒáá·áºáááºááŸááºáá¬ážáá±á¬ áááá¬ážáá±á¬á·á¡áááºážá¡ááŒá áºáá áºáá¯áá±á«áºááœáẠáá±á¬á·áááºááá¯ááºá á±ááá·áº ááá°áá®áá±á¬áá±á¬á·áááºááŸá¯ááá¹ááá¬ážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
áá»áœááºá¯ááºááá¯á·áááá°áá¬áá»á¬ážááœááºá InitialPlayer áá¯ááºáááºážáá¯ááºáááºážá ááºááœáẠááŒá±ááŒá¬áá»ááºáá áºáá¯áá«ááŸááááºá
uniqueConstraint = UniqueConstraints.singleton
ááá¯á·ááŒá±á¬áá·áºá ááŸááºáááºážááœáẠáááºááá¯ááºáá¬áá±á¬á·ááá±á¬á·ááᯠáá°ááŒááºážááŸáá·áº áá¯ááºááœáŸááºááŒááºážááá¯ááºáᬠáááºáá±á·áá»áºáá»á¬áž áá«ááŸááááºá á¡ááŒá¬ážáá¯ááºáááºáž áá¯ááºáááºážá ááºáá»á¬ážá¡ááœáẠááá¯áá²á·ááá¯á·áá±á¬ áááºáá±á·áá»áºáá»á¬áž áááŸááá«á unique Constraint ááᯠáááºááŸááºááá¬ážáá«á
á á®ážááœá¬ážáá±ážáá¯ááºáááºážá á¥áº ááŒá¿áá¬áá»á¬áž ááŒá²ááŒá¶áá±áá«áááºá
áá
áºáá«áá
áºáᶠááŒá²ááŒá¶áá±á¬á¡ááŒá±áá±ááŸáááŒááºážá ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááᯠá¡áá±á¬ááºá¡áá°ááŒá
áºá
á±áá¯á¶áá¬áá ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááá¯áááºáž á¡ááŸááºáááẠá¡ááŸá±á¬áá·áºá¡ááŸááºááŒá
áºá
á±áá«áááºá
á
á®ážááœá¬ážáá±áž áá¯áá¹áááá±á ááŸáá·áº / ááá¯á·ááá¯áẠáá¯ááºáááºáž áá¯ááºáááºážá
áẠáá¯á¶á
ᶠááᯠááŒá±á¬ááºážáá²ááẠááá¯á¡ááºáá±á¬á¡áá« ááŒá¿áá¬áá»á¬áž á
áááºáááºá á¡ááá¯áá« ááŒá±á¬ááºážáá²ááŸá¯ááẠáá¯ááºáááºážá á¡ááŒá±á¡áá±áá±á¬ááºážááŸáá·áº ááá¯ááºáá®ááŸá¯ááŸááááºááᯠáááœá±á·áá«á áá±áá¬áá±á·á
áºááœáẠ"ááá¯ááºááá¯ááº" ááŒá
áºáááºáá»á¬ážá
áœá¬ááŸááá±áá«áá jBPM ááá¯á¡áá¯á¶ážááŒá¯áá±á¬á¡áá«ááœáẠáá»áœááºá¯ááºááá¯á·ááŒá¯á¶ááœá±á·ááá±á·ááŸááá±á¬ ááŒá¿áá¬áá»á¬ážá
áœá¬ááᯠááŒá
áºáá±á«áºá
á±ááá¯ááºáááºá
ááŒá±á¬ááºážáá²ááŸá¯á á¡ááááºá¡áááºáá±á«áº áá°áááºá áááºááẠáááºážáááºážááŸá áºáá»áá¯ážááŒáá·áº áá¯ááºáá±á¬ááºááá¯ááºáááº-
- á¡áá±á¬ááºážááŸáá·áº ááá¯ááºáá®ááŸá¯ áááŸááá±á¬ á¡ááŒá±á¬ááºážá¡áá²áá»á¬áž ááá¯ááºááá á±ááẠáá¯ááºáááºáž áá¯ááºáááºážá áẠá¡áá»áá¯ážá¡á á¬ážá¡áá áºááᯠáááºáá®ážááŒá®áž áá¬ááá¡áá áºáá»á¬ážááᯠá áááºáá±á¬á¡áá« á¡áá±á¬ááºážá¡á á¬áž áááºážááᯠá¡áá¯á¶ážááŒá¯áá«á áá¬áááá±á¬ááºážáá»á¬ážááẠ"áááºážáá±á¬ááºáž" ááᯠáááºáááºáá¯ááºáá±á¬ááºáá±áááá·áºáááº;
- áá¯ááºáááºážáá¯áá¹ááááᯠááœááºážáá¶áá±á¬á¡áá«ááœáẠá¡ááŒá²ááŸááá±áá±á¬ á á®ážááœá¬ážáá±ážáá¯ááºáááºážá ááºáá»á¬ážááᯠááœáŸá±á·ááŒá±á¬ááºážáá«á
ááááááºážáááºážááẠááá¯ááá¯ááá¯ážááŸááºážáá±á¬áºáááºáž áááºážá ááá·áºáááºáá»ááºáá»á¬ážááŸáá·áº á¡á¬ážáááºážáá»ááºáá»á¬áž ááŸááááºá á¥ááá¬-
- áá»á¬ážááŒá¬ážáá±á¬ áá¯ááºáááºážáá¯ááºáááºážá ááºáá¯á¶á á¶áá»á¬ážááœáẠá á®ážááœá¬ážáá±ážáá¯áá¹áááá±áá áááºáá°áááºááŒááºážá áá¯ááºáááºážáá¯áá¹ááááá¬á ááá¯ážáá¬ááŒááºážá
- áááŒá¬ááááá¯áááᯠáá¯ááºáááºážáá áºáá áºáá¯ááá¯á· áá»ááºáá»ááºážáá°ážááŒá±á¬ááºážááẠááá¯á¡ááºááẠ(áá±á«ááºážá ááºážááŒááºážááá¯ááºáᬠáá¯ááºáááºážáá±á¬ááºáá¬áá»á¬ážááœáẠá¡ááŒá²áááºážááá¯ááá¯á
- á¡áá¯á¶ážáááŒá¯áá±á¬á·áá±á¬ áá±á¬áºáááºáá»á¬ážááᯠáááºááá·áºá¡áá»áááºááœáẠáá»ááºááá¯ááºáááºááᯠdeveloper á០ááááá«á
áááºááœá±á·ááœááºá áá»áœááºá¯ááºááá¯á·ááẠáááºážáááºážááŸá áºáá¯áá¯á¶ážááᯠá¡áá¯á¶ážááŒá¯áá±á¬áºáááºáž áá»áœááºá¯ááºááá¯á·áááááᯠááá¯ážááŸááºážá á±áááºá¡ááœáẠáá¯á¶ážááŒááºáá»ááºáá»á¬ážá áœá¬ááᯠáá»áá¬ážáááºá
- áá±áá¬áá±á·á áºááœááºá áá¯ááºáááºážáá¯ááºáááºážá ááºá ááŒá²ááŒá¶áá±á¬á¡ááŒá±á¡áá±á¡á¬áž ááœááºáá°á áœá¬áááºááá¯ááºáá±á¬á ááœááºáá°á áœá¬á á®áá¶áá±á¬ááºááœááºáá¬ážáá±á¬áá¯á¶á á¶ááŒáá·áº ááááºážáááºážáá¬ážáááº- JSON áá±á¬áºáááºá á¬áááºážááœáẠááááºážáááºážáá¬ážáááºá áááºážááẠááá·áºá¡á¬áž á¡ááá®áá±ážááŸááºážá¡ááœááºážáá±á¬ á¡ááŒááºáááºáá« ááœáŸá±á·ááŒá±á¬ááºážááŒááºážáá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºá á±áá«áááºá ááœááºáá²áá±á¬ á¡ááŒá±á¡áá±áá»á¬ážááœááºá áááºážááᯠáááºááá¯ááºáá»á¬ážááŒáá·áº ááŸááá°ááá¯ááºááẠ(á¡áá°ážáááŒáá·áº á¡ááŸá¬ážááŸá¬ááŒááºáá±á áẠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááœáẠá¡áá¯á¶ážáááºáááº)á
- áá±á«ááºážá ááºážááŒááºážáá¯ááºáááºážááá¯ááºáᬠáá¯áá¹áááá±áááẠáá¯ááºáááºážáá¯ááºáááºážá ááºáá»á¬ážá á¡áááºáá»á¬ážááᯠááá¯á¶ážáá¬ážáá±á¬ááŒá±á¬áá·áº áá«áááºááá·áºáá¯ááºáááºážá ááºáá»á¬ážáá²á០áá áºáá¯ááᯠá¡áá áºáá áºáá¯á á¡áááºá¡áá áºááŒáá·áº á¡á á¬ážááá¯ážááẠá¡áá»áááºáááœá±áž ááŒá áºááá¯ááºáá»á± (á¥ááá¬á "InitialPlayerV2")á á ááºážááŸá±á¬ááºááŸá¯ááẠáááºáá±á·ááºá»áá»á¬ážááŸáá·áº á¡áá»ááºááŒááŸá¯áá»á¬ážá á¡áááºáá»á¬ážá¡á¬ážááŒáá·áº ááŒá áºáá±á«áºáááºá
- áá¯ááºáááºážá ááºáá±á¬áºáááºááœáẠáá¬ážááŸááºážáá¶áá«ááºáá áºáᯠáá«ááŸáááŒá®ážá á€áá±á¬áºáááºááá¯á· ááá¯ááºáááºááŸá¯áááŸááá±á¬ á¡ááŒá±á¬ááºážá¡áá²áá»á¬áž ááŒá¯áá¯ááºáá«á ááá¯ážáá±ážáá±á¬ áá¬ážááŸááºážáá¶áá«ááºáá áºáá¯ááŸáááŒá®áž á€áá¶áá«ááºááᯠáá¯ááºáááºážá ááºá á¡ááŒá±á¡áá±ááŸáá·áºá¡áá° ááááºážáááºážáá¬ážáááºá
- áá¯ááºáááºážá ááºá ááŒá²ááŒá¶áá±á¬á¡ááŒá±á¡áá±á¡á¬áž á¡ááŒá±áá¶ááŸáá±á ááœáŸá±á·ááŒá±á¬ááºážááŒááºážáá¯ááºáááºážá ááºááẠáá±á¬áºáááºááá¬ážááŸááºážáá¶áá«ááºááŒá±á¬ááºážáá²ááœá¬ážáá«á ááœáŸá±á·ááŒá±á¬ááºážááŒááºážáá¯ááºáááºážá ááºááŒáá·áº áá¯ááºáá±á¬ááºááá¯ááºááá·áº á¡áááºááŒá±áá±á¬ á¡áá¬ááá¹áá¯áá±á¬áºáááºááá¯á· áŠážá áœá¬áááºáá«áááºá
- ááœáŸá±á·ááŒá±á¬ááºážááŒááºážáá¯ááºáááºážá ááºááᯠá á®ážááœá¬ážáá±ážáá¯áá¹áááá±áááá±ážááœáẠáá¬ážááŸááá¬ážááŒá®áž áá±áá¬áá±á·á áºá០ááŒááºáááºáá°áá±á¬ááºáá»áááºááœáẠáá¯ááºáááºážáá¯ááºáááºážá ááºáá áºáá¯á á®á¡ááœáẠ"áá»ááºážááááŒááºáž" áá¯áá±á«áºáááºá
- áá¯ááºáááºážá ááºá¡á¬ážáá¯á¶ážá á¡ááŒá±á¡áá±á¡á¬áž áá»ááºááŒááºá áœá¬ááŸáá·áº áááŒáá¯ááºáááºáááºáž ááœáŸá±á·ááŒá±á¬ááºážááẠááá¯á¡ááºáá«áá ááá¯ááá¯ááá¹ááááºáá±áá¬áá±á·á ẠááœáŸá±á·ááŒá±á¬ááºážááŒááºážááŒá±ááŸááºážáá»ááºáá»á¬ážá¡á¬áž á¡áá¯á¶ážááŒá¯áá¬ážáá±á¬áºáááºáž áááºážááœáẠJSON ááŸáá·áº áá¯ááºáá±á¬ááºááááºááŒá áºáááºá
áá¯ááºáááºážáá¯ááºáááºážá ááºáá»á¬ážá¡ááœáẠá¡ááŒá¬ážáá°áá±á¬ááºáá áºáᯠááá¯á¡ááºáá«ááá¬ážá
áá±á¬ááºážáá«ážááœááºáá±á¬áºááŒáá¬ážáá±á¬ááŒá±ááŸááºážáá»ááºáá»á¬ážáááºáá»áœááºá¯ááºááá¯á·á¡á¬ážáá»áœááºá¯ááºááá¯á·ááááá»á¬ážááá¯áááááá¬áá¬ááá¯ážááŸááºážááœááºáá°á á±áááºá á¡ááá®áá±ážááŸááºážááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááá·áºááœááºááŒá±ááŸááºážáá¬ážáá±á¬ááŒá¿áá¬áá»á¬ážááá¯áá»á²á·ááœááºáááºááŸáá·áºá á®ážááœá¬ážáá±ážáá¯áá¹áááá±áááᯠmicroservices áá»á¬ážá¡ááŒá áºááá¯á·ááœá²ááŒá¬ážááŒááºážá áááºáá°ážááá¯ááá¯ááá¯ááœá²áá±á¬ááºá á±áááºá á€á¡ááœááºá á¡áá¯ááºáá»á¬ážá áœá¬ááá¯ááŒá®ážááŒá±á¬ááºáá²á·ááŒá®ážá áá¯ááºáááºážáá¯ááºáááºážá ááºáá»á¬ážá¡ááœáẠá¡ááœáẠ"áá±á«á·áá«ážáá±á¬" áá°áá±á¬ááºááᯠáááºáá®ážáá¬ážááŒá®ážá á¡áá¯á¶ážáá»á¡áá¯ááºáá»á¬ážá áá»ááºááŒáá·áºááá·áºá¡ááŒá±á¡áá±ááœáẠáá±á¬áºáá¯ááºáá¬ážáá±á¬ ááŒá¿áá¬áá»á¬ážááᯠááŒá±ááŸááºážáááºá¡ááœáẠáááºáá±á¬ááºááŸá¯á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠáááºáá®ážáá¬ážáááºá á¡ááá²á·ááá¯ááºá ááºá¡á±á¬ááºááœáẠáá¯á¶á¡á áááºá¡ááá¯ááºážáá»á¬áž ááœá¶á·ááŒáá¯ážááá¯ážáááºáá¬á á±ááẠá€ááááºáá»á¬ážááᯠáá»áŸáá±ááá¯áá±á¬ááá¹áááŸááá«áááºá á€áááºááŸá¬ ááŒáá¯ážá á¬ážá¡á¬ážáá¯ááºááŸá¯ááŸáá·áº á¡áá»áááºá¡áááºážááẠááá¯á¡ááºáááºááŒá áºáááºá ááá¯áá²á·ááá¯á·áá±á¬ ááŒá±ááŸááºážáá»ááºáá»á¬ážá¡ááœáẠááá¯á¡ááºáá»ááºááᯠáá¬ážáááºááá±á¬áá±á«ááºááŒááºážááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠáá±á¬ááºááẠáááºáá¯á¶ážáá áºáᯠááŒá áºááá¯ááºáááºá á¡ááá¯ááŒá¯áá¬ážáá±á¬ áá±á¬ááºážáá«ážááœááºá áá°áá±á¬ááºááá¯ááºááá¯ááºá áá¯ááºáá±á¬ááºááá¯ááºá áœááºážáá»á¬ážááᯠá¡á¬áá¯á¶á áá¯ááºááŸá¯ á¡áááºážáááºáᬠááŸááá±á¬áºáááºáž á¡áá»áá¯á·ááᯠáááºááŒáá¬ážááá·áº á¥ááá¬áá»á¬ážá០ááŒááºááá¯ááºáááºá áááºááá¯á·áááºááá¯á á±áá¬áá° áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááá°áá±á¬ááºááᯠáá¯ááºáá±áá«áá áá®ážááŒá¬ážáá±á¬ááºážáá«ážáá áºáá¯ááºááᯠáááºážá¡ááœáẠá¡á¬áá¯á¶á áá¯ááºáá«áááºá á€á¡áá±á¬á¡ááœááºážá áááºááẠáá±ážááœááºážááá¯ááŒá±ááá¯ááŒááºážááŒáá·áº áá¯á¶á·ááŒááºáá»ááºá¡áááºážáááºáá»ááºáá¬ážáá²á·áá«á áá»áœááºá¯ááºááá¯á· áá»á±ážáá°ážáááºáá«áááº-
á
á¬áááºážááœááºážá¡áá¯á¶ážááŒá¯áá°áá»á¬ážáᬠá
á
áºáááºážááœáẠáá«áááºááá¯ááºáá«áááºá
áá¯ááºáááºážáá¯ááºáááºážá ááºáá»á¬ážá¡ááœáẠá¡ááŒá¬ážáá°áá±á¬ááºáá áºáᯠááá¯á¡ááºáá«ááá¬ážá
-
18,8%áá¯ááºáááºá áá«áá®ááá¯áá»áá¯ážááŸá¬áá±áá¬ááŒá¬ááŒá®á
-
12,5%áááºá á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á¡ááŒá±á¬ááºáž ááá¯ááá¯áá±á·áá¬ááẠá áááºáááºá á¬ážá áá¬áá±á¬ááºážáááºá áááºážááẠá¡áá¯á¶ážáááºááá¯ááºááẠá
-
6,2%áá»áœááºá¯ááºááá¯á·ááẠááŸáááŒá®ážáá¬ážáá±á¬ááºáá»á¬ážáá²á០áá áºáá¯ááᯠá¡áá¯á¶ážááŒá¯áá±á¬áºáááºáž áááºážááᯠá¡á á¬ážááá¯ážááẠá ááºážá á¬ážáá±áá«áááºá
-
18,8%áá»áœááºá¯ááºááá¯á·ááẠááŸáááŒá®ážáá¬ážáá±á¬ááºáá»á¬ážáá²á០áá áºáá¯ááᯠá¡áá¯á¶ážááŒá¯á á¡áá¬á¡á¬ážáá¯á¶ážááŸáá·áº ááá¯ááºáá®áá«áááºá
-
18,8%áá°áá±á¬ááºááá«áá² áááºááá¯ááºááŒá±ááŸááºážááŒááºáž á
-
25,0%áááºááá¯ááºááá¯ááºáá±ážáá« á
á¡áá¯á¶ážááŒá¯áá° 16 áŠáž áá²áá±ážáá²á·áááºá á¡áá¯á¶ážááŒá¯áá° 7 ááŸá±á¬ááºáá±áá²á·áá«áááºá
source: www.habr.com