ืืขืื, Habr!
ืืื ืืืขืจ ืคืืจืืข ืกืคึผืขืฉืึทืืืืืื ืืื ืืขืจ ืึทื ืืืืืงืืื ื ืคืื ERP-ืงืืึทืก ืืืืืืืืืจื ืกืึทืืืฉืึทื ื, ืืขืจ ืืืื ืก ืืืืื ืคืื ืืืึธืก ืืื ืคืึทืจื ืืืขื ืืืจื ืืจืึทื ืกืึทืงืืืึธื ืึทื ืกืืกืืขืืขื ืืื ืึท ืจืืืืง ืกืืืข ืคืื โโืืขืฉืขืคื ืืึธืืืง ืืื ืืึธืงืืืขื ื ืืืืคื ืืื EDMS. ืงืจืึทื ื ืืืขืจืกืืขืก ืคืื ืืื ืืืขืจ ืคึผืจืึธืืืงืื ืืขื ืขื ืืืืืจื ืืืืฃ JavaEE ืืขืงื ืึทืืึทืืืฉืื, ืึธืืขืจ ืืืจ ืืขื ืขื ืืืื ืึทืงืืืืืื ืขืงืกืคึผืขืจืึทืืขื ืืื ื ืืื ืืืงืจืึธ ืืึทืืื ืื ืืก. ืืืื ืขืจ ืคืื ืื ืืขืจืกื ืคึผืจืึธืืืขืืึทืืืง ืืขืืืื ืคืื ืึทืืึท ืกืึทืืืฉืึทื ื ืืื ืื ืื ืึทืืจืืืฉืึทื ืคืื ืคืึทืจืฉืืื ืกืึทืืกืืกืืึทืื ืืืึธืก ืืขืืขืจื ืฆื ืฉืืืื ืืฉ ืืึธืืืืื ื. ืื ืืขืืจืึทืืืึธื ืคึผืจืึธืืืขืืก ืืึธืื ืฉืืขื ืืืง ืืขืืขืื ืืื ืื ืึท ืจืืืืง ืงืึธืคึผืืืืืืืง, ืจืึทืืึทืจืืืึทืก ืคืื ืื ืึทืจืงืึทืืขืงืืฉืขืจืึทื ืกืืืืื, ืืขืื ืึธืืึธืืืข ืกืืึทืงืก ืืื ืคืจืึทืืขืืืึธืจืงืก ืืืจ ื ืืฆื, ืึธืืขืจ ืืขืฆืื ืก ืขืก ืืื ืืขืืืขื ืคึผืจืึธืืจืขืก ืืื ืกืึทืืืืื ื ืึทืืึท ืคึผืจืึธืืืขืืก.
ืืื ืืขื ืึทืจืืืงื ืืื ืืจืขื ืืขื ืฆื ืืืื ืืคืืขืจืงืืึทืืงืืื, ืืื ืืืขื ืจืขืื ืืืขืื ืื ืืขืจืคืึทืจืื ื ืืื ืึทืจืงืึทืืขืงืืฉืขืจืึทื ืคืึธืจืฉืื ื ืืืึธืก NPO Krista ืืื ืืื ืื ืืขืืืื ืืืืื ืืขืื ื. ืืืจ ืืืขืื ืืืื ืงืืงื ืืื ืึท ืืืืฉืคึผืื ืคืื ืึท ืคึผืฉืื ืืืืืื ื ืฆื ืึท ืื ืึทืืจืืืฉืึทื ืคึผืจืึธืืืขื ืคึฟืื ืื ืคืื ื ืคืื ืืืื ืื ื ืคืื ืึท ืึทืคึผืืึทืงืืืฉืึทื ืืขืืืขืืึธืคึผืขืจ ืืื ืืขืคึฟืื ืขื ืืืืก ืืืึธืก ืืื ืคืึทืจืืึธืจืื ืืื ืืขืจ ืืขื ืคึผืึทืฉืืขืก.
ืึธืคึผืืืืงืขื ืื ื
ืื ืึทืจืงืึทืืขืงืืฉืขืจืึทื ืืื ืืขืื ืืฉ ืกืึทืืืฉืึทื ื ืืืกืงืจืืืื ืืื ืืขื ืึทืจืืืงื ืืขื ืขื ืคืืจืืขืืืืื ืืืจื ืืืจ ืืืืืจื ืืืืฃ ืคึผืขืจืืขื ืืขื ืืขืจืคืึทืจืื ื ืืื ืืขื ืงืึธื ืืขืงืกื ืคืื ืกืคึผืขืฆืืคืืฉ ืืึทืกืงืก. ืื ืกืึทืืืฉืึทื ื ืืึธื ื ืื ืคืึธืืขืจื ืฆื ืืืื ืื ืืืืขืจืกืึทื ืืื ืงืขื ื ืืฉื ืืืื ืึธืคึผืืืืึทื ืืื ืืขืจ ืื ืืขืจืข ืืืืื ืืื ืืขื ืคืื ื ืืฆื.
ืืืึธืก ืืื BPM ืืึธืื ืฆื ืืึธื ืืื ืืื?
ืฆื ืขื ืืคึฟืขืจื ืืขื ืงืฉืื, ืืืจ ืืึทืจืคึฟื ืฆื ืืขืืื ืึท ืืืกื ืืืคึผืขืจ ืืื ืื ืกืคึผืขืกืืคืืงืก ืคืื ืื ืืขืืืขื ืื ืคึผืจืึธืืืขืืก ืคืื ืืื ืืืขืจ ืกืึทืืืฉืึทื ื. ืืขืจ ืืืืคึผื ืืืื ืคืื ืื ืืขืฉืขืคื ืืึธืืืง ืืื ืืื ืืืขืจ ืืืคึผืืฉ ืืจืึทื ืกืึทืงืืืึธื ืึทื ืกืืกืืขื ืืื ืึทืจืืึทื ืืึทืื ืืื ืื ืืึทืืึทืืืืก ืืืจื ืืึทื ืืฆืขืจ ืื ืืขืจืคืืืกืื, ืืึทื ืืึทื ืืื ืึธืืึทืืืืืื ืืืขืจืึทืคืึทืงืืืฉืึทื ืคืื ืื ืืึทืื, ืึธื ืคืืจื ืขืก ืืืจื ืขืืืขืืข ืืืึธืจืงืคืืึธืื, ืืจืืืกืืขืื ืขืก ืฆื ืื ืื ืืขืจ ืกืืกืืขื / ืึทื ืึทืืืกืืก ืืึทืืึทืืืืก / ืึทืจืงืืืื ืืื ืืืฉืขื ืขืจืืืืื ื ืจืืคึผืึธืจืฅ. . ืืืื, ืืขืจ ืฉืืืกื ืคืื ืงืฆืืข ืคืื โโืื ืกืืกืืขื ืคึฟืึทืจ ืงืึทืกืืึทืืขืจื ืืื ืื ืึธืืึทืืืืฉืึทื ืคืื ืืืืขืจ ืื ืขืจืืขื ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื.
ืคึฟืึทืจ ืงืึทื ืืืื ืืึทื ืก, ืืืจ ื ืืฆื ืืขื ืืขืจืืื "ืืึธืงืืืขื ื" ืืื ืงืึธืืื ืืงืึทืฆืืข ืืื ืขืืืขืืข ืึทืืกืืจืึทืงืฆืืข ืคืื โโืึท ืกืืื ืคืื ืืึทืื ืคึฟืึทืจืืืื ืืงืืข ืืืจื ืึท ืคึผืจืึธืกื ืฉืืืกื ืฆื ืืืึธืก ืึท ืืืืขืจ ืืืึธืจืงืคืืึธืื ืงืขื ืขื ืืืื "ืืื ืืงื".
ืึธืืขืจ ืืืึธืก ืืืขืื ืื ืึทืืจืืืฉืึทื ืืึธืืืง? ื ืึธื ืึทืืข, ืื ืื ืึทืืจืืืฉืึทื ืึทืจืืขื ืืื ืืืฉืขื ืขืจืืืืึทื ืืืจื ืื ืึทืจืงืึทืืขืงืืฉืขืจ ืคืื ืื ืกืืกืืขื, ืืืึธืก ืืื "ืฉื ืืึทืื" ืืื ืคึผืึทืจืฅ ื ืื ืืืืฃ ืืขืจ ืืงืฉื ืคืื ืืขืจ ืงืื ื, ืึธืืขืจ ืืื ืืขืจ ืืขืจ ืืฉืคึผืขื ืคืื ืืึธืจ ืคืึทืจืฉืืืขื ืข ืกืืืืช:
- ืืื ืืขืจืืขื ืืง ืฆื ืงืื ืืืื'ืก ืืขืืขืฅ;
- ืืื ืึท ืจืขืืืืืึทื ืคืื ืจืืืืื ื ืกืึทืืกืืกืืึทืื ืืื ืึทืืขืจ ืืขืืืขืืึธืคึผืขื ืคึฟืึทืจ ืื ืืขืจืข ืคึผืจืึธืืืงืื;
- ืืืื ืืขืจ ืึทืจืืืืขืงื ืก ืืืกืงืจืขืฉืึทื, ืืืืืจื ืืืืฃ ื ืื-ืคืึทื ืืงืฉืึทื ืึทื ืืืืขืจืคืขื ืืฉื.
ืขืก ืืื ืึท ืืจืืืก ื ืกืืื ืฆื ืืึทืืื ืืขืจ ืื ืึทืืจืืืฉืึทื ืืึธืืืง ืคืื ืื ืืขืฉืขืคื ืืึธืืืง ืคืื ืื ืืืืคึผื ืืืึธืจืงืคืืึธืื, ืึทืืื ื ืืฉื ืฆื ืืึทืฉืืืฆื ืื ืืขืฉืขืคื ืืึธืืืง ืืื ืื ืืึทืืจืืืฉืึทื ืึทืจืืึทืคืึทืงืฅ ืืื ืืึทืคืจืืึทืขื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืขืืืขืืึธืคึผืขืจ ืคืื ืื ื ืืื ืฆื ืืขืืื ืืื ืื ืกืคึผืขืกืืคืืงืก ืคืื ืื ืึทืจืงืึทืืขืงืืฉืขืจืึทื ืืึทื ืืฉืึทืคื ืคืื ืื ืกืืกืืขื. ืืขืจ ืฆืืืึทื ื ืืื ืึท ื ืืืขืจ ืคืื ืึทืืืืึทื ืืืืืฉืื, ืึธืืขืจ ืคืืจ ืืืืืื ืืืึทื ืื ืืคืขืงืืืืื ืึทืก:
- ืกืึทืืืืื ื ืื ืืึทืืจืืืฉืึทื ืคึผืจืึธืืืขืืก ืืืืฉืึทืืืึทืื ืคืึทืื ืฆืืจืืง ืฆื ืื ืกืืืคึผืืึทืกื ืึธืคึผืฆืืขืก ืืื ืื ืคืึธืจืขื ืคืื ืกืื ืืฉืจืึธื ืึธืืก ืงืึทืืืก ืจืขืื ืฆื ืื ืืืืืืขื ืคืึทืจืืขื ืืขืจืื ื ืคืื ืงืื ืืื ืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืื ืืืืคึผื ืืืึธืจืงืคืืึธืื (ืื ืืืกืึทืืืืึทื ืืืืืฉืื ืคืื ืกืื ืืฉืจืึธื ืึธืืก ืื ืึทืืจืืืฉืึทื ืืขื ืขื ืืืกืงืึทืกื ืืื ืื);
- ืื ืืึทืืจืืืฉืึทื ืึทืจืืึทืคืึทืงืฅ ื ืึธื ืืืจืื ืขืืขื ืืึทืจืฅ ืืขืฉืขืคื ืืึธืืืง ืืืขื ืืึทืืขืจืงืื ืืขื ืคืื ืื ืื ืืขืจ ืกืึทืืกืืกืืึทื ืืื ืคืืจืืื ืื;
- ืื ืึทืคึผืืึทืงืืืฉืึทื ืืขืืืขืืึธืคึผืขืจ ืืื ืึธืจื ืื ืื ืึทืืจืืืฉืึทื ืืื ืงืขื ืขื ืืืืื ืืจืขืื ืขืก ืืืจื ืืฉืึทื ืืื ื ืื ืืืึธืจืงืคืืึธืื;
- ืื ืกืืกืืขื ืกืื ืฆื ืืืื ืึท ืืืื ืืึทื ืฅ ืคึฟืื ืืขืจ ืืึทื ืืฆืขืจ ืก ืคืื ื ืคืื ืืืื ืื ื, "ืกืืื" ืฆืืืืฉื ืกืึทืืกืืกืืึทืื ืืืขืจื ืืืืขืจืงื, ืืื ืืืขืจืืง ืืึทื ืืฆืขืจ ืึทืคึผืขืจืืืฉืึทื ื ืืขืจืฉืืึทื ืขื, ืื ืืฉืืืืืื ื ืื ืึทืจืืืขืจืคืืจื ืคืื ืืึทืื ืคืื ืืืื ืกืึทืืกืืกืืขื ืฆื ืื ืืขืจื.
ืื ืื ืืขืจ ืฆืืืึทื ื ืืื ืฆื ืืึทืืจืึทืืื ืื ืืึทืืจืืืฉืึทื ืื ืืขืจืึทืงืฉืึทื ื ืืื ืึท ืื ืืึทืืจืึทื ืืืื ืคืื ืื ืืึทืจืฅ ืืขืฉืขืคื ืืึธืืืง ืืื ืืืึธืจืงืคืืึธืื. ืฆื ืคืึทืจืืืืื ืื ืงืืืึทืืึทืคืึทืงืืืฉืึทื ื ืคืื ืึทืคึผืืึทืงืืืฉืึทื ืืขืืืขืืึธืคึผืขืจ ืคืื ืกืงืืืจืึทืงืึทืืื ื, ืฉืึทืคึฟื ื ืืึทืข ืื ืึทืืจืืืฉืึทื ืื ืืขืจืึทืงืฉืึทื ื ืืึธื ืืืื ืืจืื ื ืืื ืขืคืขืจืืืึทืก, ืืื ืืื ืืืึทื ืืขืืขืื ืืืื ืฆื ืงืืืึทืื ืึท ืืืืืื ื. ืืึธืก ืืื ืืึทืจืืขืจ ืฆื ืืึธื ืืื ืขืก ืืืื ื: ืื ืืขืฆืืึทื ืืืื ืืืื ืฉืืึทืจืง ืืขื ืื ืฆื ืฆืืฉืืขืื ืื ืืึทื ืืฆืขืจ ืื ืคืืจืืื ืื ืคืึทืจืฉืืืื ืงืืึทื ืคืื ืึธืคึผืฆืืขืก ืคึฟืึทืจ ืืืึทื ื ืืฆื, ืึธื ืึทืืึทืืื ื ืืื ืฆื "ืฉืืกื ืืื ืืื ืื ืคึฟืืก." ืขืก ืืขื ืขื ืคืืืข ืคึฟืจืืื ืืืึธืก ืึท ืื ืืฉืขื ืืจ ืืืื ืขื ืืคึฟืขืจื ืืื ืืขื ืงืึธื ืืขืงืกื ืคืื ืื ืึทืืจืืืฉืึทื ืืึทืกืงืก, ืึธืืขืจ ืืืึธืก ืึท ืึทืคึผืืึทืงืืืฉืึทื ืืขืืืขืืึธืคึผืขืจ ืืึธื ื ืืฉื ืืจืึทืืื ืืืขืื ืืื ืืืื ืืขืืืขื ืึทืจืืขื: ืืจืึทื ืกืึทืงืืืึธื ืืึทืื ืืจืื, ืงืึธื ืกืืกืืขื ืกื, ืึทืืึธืืืกืืื, ืืืืขืจืืืื, ืกืงืืืืื ื, ืืึทืกืข ืืื ืืืื ืคืึทืจืฉืคึผืจืืืืื ื, ืจืืืื ื, ืืึทืจืฉืึทืืื ื, ืคืึทืจืฉืคึผืจืืืืื ื ืืื ืกืืืืืฉืื ื ืงืึทื ืืขืงืกืฅ, ืืื"ื ื. ืขืก ืืื ื ืืืืืง ืฆื ืคืึธืจืฉืืึธืื ืึทืคึผืืึทืงืืืฉืึทื ืืขืืืขืืึธืคึผืขืจืก ืืึทื ืฅ ืคึผืฉืื ืืืืืื ื ืืขืืคึผืืึทืืขืก ืืื ืืืึธืก ืื ืขื ืืคึฟืขืจืก ืฆื ืึทืืข ืึทืืึท ืคืจืืืขืก ืืขื ืขื ืฉืืื ืคืึทืจืืึธืจืื. ืื ืืขืืคึผืืึทืืขืก ืืืื ืืืื ืืึทื ืฅ ืืืืขืจ: ืืขืฉืขืคื ืืึธืืืง ืขื ืืขืจืื ืืขื ืืืืขืจ ืึธืคื, ืืืึธืก ืื ืงืจืืกืึทื ืื ืจืืืืงืืจื ืคืื ืื ืืจืึธืืืืกืื ื ืขืจืจืึธืจืก, ืื ืงืึธืก ืคืื ืขืจืจืึธืจืก ืืืื ืืืืืื ืืืืฃ ืึท ืืึทื ืฅ ื ืืืขืจืืง ืืืจืื.
ืึธืืขืจ ืืืึธืก ืืื BPM ืืึธืื ืฆื ืืึธื ืืื ืืื? ืขืก ืืขื ืขื ืคืืืข ืึธืคึผืฆืืขืก ืคึฟืึทืจ ืืืคึผืืึทืืขื ืื ื ืืืึธืจืงืคืืึธืื ...
ืืึทืงืข, ืื ืื ืืขืจ ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื ืืื ืืืืขืจ ืคืึธืืงืก ืืื ืืื ืืืขืจ ืกืึทืืืฉืึทื ื - ืืืจื ืื ืืขืงืืึทืจืึทืืืืืข ืืขืคึฟืื ืืฆืืข ืคืื โโืึท ืฉืืึทื ืืืขืจืืึทื ื ืืืึทืืจืึทืืข ืืื ืื ืงืฉืจ ืคืื ืืึทื ืืืขืจืก ืืื ืืขืฉืขืคื ืืึธืืืง ืคึฟืึทืจ ืืจืึทื ืืืฉืึทื ื. ืืื ืืขื ืคืึทื, ืื ืฉืืึทื ืืืึธืก ืืืืขืจืืึทื ื ืื ืงืจืึทื ื ืฉืืขืืข ืคืื โโืื "ืืึธืงืืืขื ื" ืืื ืื ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืืื ืึทื ืึทืืจืืืืื ืคืื ืื "ืืึธืงืืืขื ื" ืืื.
ืืึธืก ืืื ืืื ืืขืจ ืคึผืจืึธืฆืขืก ืงืืงื ืืื ืืื ืื ืึธื ืืืื ืคืื ืึท ืคึผืจืืืขืงื
ืื ืคึผืึธืคึผืืืึทืจืืืขื ืคืื ืืขื ืืืคึผืืึทืืขื ืืืืฉืึทื ืืื ืจืขืื ืฆื ืืขืจ ืงืึธืจืขืื ืคึผืึทืฉืืขืก ืืื ืืืืงืืึทื ืคืื ืงืจืืืืืื ื ืืื ืขืึทืจ ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื. ืึธืืขืจ, ืืื ืืืืืืืืืจื ืกืืกืืขืืขื ืงืขืกืืืืขืจ ืืืขืจื ืืขืจ ืงืึธืืคึผืืืฆืืจื, ืื ืึธืืึทืืืืืื ืืืื ืคืื ืื ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืืืืงืกื ืืื ืืืขืจื ืืขืจ ืงืึธืืคึผืืืฆืืจื. ืขืก ืืื ืึท ื ืืื ืคึฟืึทืจ ืืืงืึทืืคึผืึธืืืืฉืึทื, ืจืืืื ืคืื ืคึผืึทืจืฅ ืคืื ืคึผืจืึทืกืขืกืึทื, ืืื ืืขืืื ื ืืื ืืจืึทื ืืฉืื ื ืคึผืจืึทืกืขืกืึทื ืึทืืื ืึทื ืืขืืขืจ ืฆืืืืึทื ืืื ืขืงืกืึทืงืืืืึทื ืืื ืคึผืึทืจืึทืืขื. ืืื ืืขืจ ืึทืืึท ืื ืึธืื, ืื ืืขืฆืืึทื ืืืขืจื ืืืืึทืงืืืขื, ืืื ืื ืฉืืึทื ืืืขืจืืึทื ื ืืืึทืืจืึทืืข ืคืืจืืืจื ืืืึทื ืืื ืคึฟืึธืจืืึทืฆืืข ืืื ืืึทืื (ืื ืืึทืืจืืืฉืึทื ืื ืืขืจืึทืงืฉืึทื ื ืืขื ืขื ื ืืฉื ืฉืคืืืื ืืื ืื ืืืึทืืจืึทืืข ืืืึท ืึทืืข).
ืืึธืก ืืื ืืื ืืขืจ ืคึผืจืึธืฆืขืก ืงืืงื ืืื ื ืึธื ืขืืืขืืข ืืืขืจืืืฉืึทื ื ืคืื ืจืขืงืืืืจืขืืขื ืฅ ืงืืขืจืึทืคืึทืงืืืฉืึทื.
ืืขืจ ืืืขื ืืืืก ืคืื ืืขื ืกืืืืึทืฆืืข ืืื ืืขืืืขื ืื ืื ืืึทืืจืืืฉืึทื ืคืื ืื ืืึธืืึธืจ
ื ืงืืืื ืืืื ืคืื ืึท ืงืึธืืคึผืืขืงืก ืืขืฉืขืคื ืคึผืจืึธืฆืขืก
ืืื ืื ืืึทื ื ืืขืจืืื, ืื ืืืืืื ื ืืื ื ืืฉื ืืขืื ืึทืจืืืฃ ืฆื ืขืงืกืคึผืขืงืืืืฉืึทื ื: ืื ืืืื ืึทืจืืขื ืื ืืขื ืกืืื ืคืื ืงืจืืืืืื ื ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื ืืืจื ืืืืืฉืึทืืืึทื ืืืฉืืจืื ืืื ื ืืฉื ืืึธืื ืฆื ืืขืจืืจืืืื ืคึผืึทืกืืง ืคึผืจืึธืืืึทืงืืืืืืื ืื ืืืงืึทืืึธืจืก, ืืื ืื ืืขืฆืืึทื ืืื ืืื ืืขืืืืจื ืืืื ืขืจ ืคืื ืื ืืขืจืกื ืืืกืืืืงื ืฆืืืืฉื ืืขืืืขืืึธืคึผืขืจืก. ืขืก ืืขื ืขื ืืืื ืืขื ืืช ืืืขืื ืื ืื ืขืจืืขื ืกืืจืืงืืืจ ืคืื ืื ืืึธืืึธืจ, ืืืึธืก ืืขืคึฟืืจื ืฆื ืื ืืืืกืืขื ืคืื ืคืืืข "ืคึผืึทืืฉืึทื" ืืื "ืงืจืึทืืฉืื".
ืืขืจ ืืืืคึผื positive ืึทืกืคึผืขืงื ืคืื ื ืืฆื jBPM ืืื ืืขืืืขื ืื ืืืืกืืงืืึทื ืคืื ืื ืืขื ืขืคืืฅ ืืื ืืึทืจืืก ืคืื ืื ืคึผืขืจืกืืกืืขื ื ืฉืืึทื ืคืื ืึท ืืขืฉืขืคื ืคึผืจืึธืฆืขืก. ืืืจ ืืืื ืืขืืขื ืื ืืขืืืขืืงืืื ืคืื ื ืืฆื ืึท ืคึผืจืึธืฆืขืก ืฆืืืึทื ื ืฆื ืื ืกืืจืืืขื ื ืงืึธืืคึผืืขืงืก ืื ืืึทืืจืืืฉืึทื ืคึผืจืึธืืึธืงืึธืืก ืฆืืืืฉื ืคืึทืจืฉืืืขื ืข ืึทืคึผืืึทืงืืืฉืึทื ื ื ืืฆื ืืืกืื ืืงืจืึทื ืึทืก ืื ืืขืจืึทืงืฉืึทื ื ืืืจื ืกืืื ืึทืื ืืื ืึทืจืืืงืืขื. ืื ืืืึทืืืึทื ืคืื ืึท ืคึผืขืจืกืืกืืขื ื ืฉืืึทื ืคืืขืกืขืก ืึท ืงืจืืืืฉ ืจืึธืืข ืืื ืืขื.
ืืืืืจื ืืืืฃ ืื ืืืืื, ืืืจ ืงืขื ืขื ืคืึทืจืขื ืืืงื: ืืขืจ ืคึผืจืึธืฆืขืก ืฆืืืึทื ื ืืื ืื BPM ืกืืื ืึทืืึทืื ืืื ืื ืฆื ืกืึธืืืืข ืึท ืืจืืื ืงืืื ืคืื ืืึทืกืงืก ืฆื ืึธืืึทืืืื ืื ืงืจืืกืื ืืื ืงืึธืืคึผืืืฆืืจื ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื, ืืึทืจืืึธืื ืืึทืกืื ืคึผืึทืกืืง ืื ืืึทืืจืืืฉืึทื ืึทืงืืืืืืืขืื ืืื ืื ืคึผืจืึทืกืขืกืึทื ืืื ืืึทืืื ืื ืคืืืืงืืื ืฆื ืืืืืฉืืืึทืื ืึทืจืืืกืืืืึทืื ืื ืืืคึผืืึทืืขื ืึทื ืคึผืจืึธืฆืขืก ืืื ืึท ืคึผืึทืกืืง ื ืึธืืืืืฉืึทื.
ืืืกืึทืืืืึทื ืืืืืฉืื ืคืื ืกืื ืืฉืจืึธื ืึธืืก ืจืืคื ืืื ืึท ืื ืึทืืจืืืฉืึทื ืืืกืืขืจ
ืกืื ืืฉืจืึธื ืึธืืก ืื ืึทืืจืืืฉืึทื ืจืขืคืขืจืก ืฆื ืื ืกืืืคึผืืึทืกื ืืืึทืงืื ื ืจืืคื. ืืืื ืกืึทืืกืืกืืขื ืึทืงื ืืื ืื ืกืขืจืืืขืจ ืืืึทื ืืื ืืงืกืคึผืึธืืืื ืื API ืืื ืื ืคืืจืืื ืื ืืืคึฟื. ืื ืื ืืขืจ ืกืึทืืกืืกืืขื ืึทืงื ืืื ืืขืจ ืงืืืขื ื ืืืึทื ืืื ืืื ืื ืจืขืื ืฆืืื ืืืื ืึท ืจืืฃ ืืื ืืืืืฅ ืคึฟืึทืจ ืืขืจ ืจืขืืืืืึทื. ืืขืคึผืขื ืืื ื ืืืืฃ ืื ืกืืกืืขื ืึทืจืงืึทืืขืงืืฉืขืจ, ืืขืจ ืงืืืขื ื ืืื ืกืขืจืืืขืจ ืืืืื ืงืขื ืขื ืืืื ืืืื ืึธืืขืจ ืืื ืืขืจ ืืขืืืืงืขืจ ืึทืคึผืืึทืงืืืฉืึทื ืืื ืคึผืจืึธืฆืขืก ืึธืืขืจ ืืื ืคืึทืจืฉืืืขื ืข ืึธื ืขืก. ืืื ืื ืจืืข ืคืึทื, ืืืจ ืืึทืจืคึฟื ืฆื ืฆืืืืืื ืขืืืขืืข ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื RPC ืืื ืฆืืฉืืขืื ืื ืคึผืึทืจืึทืืขืืขืจืก ืืื ืื ืจืขืืืืืึทื ืคืื ืื ืจืืคื.
ืืขื ืื ืึทืืจืืืฉืึทื ืืืกืืขืจ ืืื ืึท ืคืขืจืื ืืจืืืก ืืึทื ื ืคืื ืืืกืึทืืืืึทื ืืืืืฉืื, ืึธืืขืจ ืขืก ืืื ืืืืขืจ ืืืืืืื ืืขื ืืฆื ืืื ืคืืจ ืจืขืื ืฆื ืืืึทื ืคึผืึทืฉืืขืก. ืื ืืืืงืืึทื ืคืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืงืึทืคึผืืืืืืืฅ ืืื ืคืึธืจืกืขืก ืืืจ ืฆื ื ืืฆื ืขืก ืืืืืขืจ ืืื ืืืืืขืจ ืืื ืคึผื ืื ืคืื ืืจืื ืืืขื ืืขืืืืื ื, ืจืขืงืึธืจืืื ื ืื ืืืืืื ื ืืื ืืขืื ืืฉ ืืืืื. ืืืขืจ ืขืก ืืืื ืืึทืคึผืึทื ื ืึทื ืื ืืงืกืคึผืืจืืึทื ืกื ืืขืืืขืืึธืคึผืขืจืก ื ืืฆื ืขืก ืึทื ืงืึทื ืฉืึทืกืื, ืคืฉืื ื ืืฉื ืจืืึทืืืืืื ื ืื ื ืขืืึทืืืื ืงืึทื ืกืึทืงืืืขื ืกืึทื.
ืืื ืึทืืืฉืึทื ืฆื ืื ืืขืจืกื ืงืืึธืจ ืืื ืืขืจ ืืึธื ืคืึทืจืืจืขืกืขืจื ืืื ืกืึทืืกืืกืืึทื ืงืึทื ืขืงืืืืืืื, ืขืก ืืขื ืขื ืืืื ืืืืื ืืงืขืจ ืงืืึธืจ ืืื ืืขืจ ืืึธื ืคึผืจืึธืืืขืืก ืืื "ืืจืึธืืื ื" ืืื "ืกืืจืขืืฉืื ื" ืืจืึทื ืืึทืงืฉืึทื ื. ืืึทืงืข, ืืืื ืื ืืขืฉืขืคื ืืึธืืืง ืืืื ืขืืืขืืข ืขื ืืขืจืื ืืขื, ืืจืึทื ืืึทืงืฉืึทื ื ืงืขื ืขื ื ืื ืืืื ืึทืืืืืืื, ืืื ืืจืึทื ืืึทืงืฉืึทื ื, ืืื ืงืขืจ, ืคืึทืจืฉืคึผืึทืจื ืืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ืจืขืกืืจืกื ืึทืคืขืงืืึทื ืืืจื ืื ืขื ืืขืจืื ืืขื. ืืึธืก ืืืืกื, ืืื ืืืื ืกืืืกืืกืืขื ืืืืจื ืืืืฃ ืื ืขื ืืคืขืจ ืคืื ืืขื ืฆืืืืืื, ืืืขื ืขืก ื ืืฉื ืงืขื ืขื ืคืืจืขื ืืืงื ืื ืืจืื ืืืงืฆืืข ืืื ืืจืืคื ืขืืขื ืื ืืืงืก. ืืขื ืืืืืืืืง ืื ืงืจืืกืื ืื ืจืืืืงืืจื ืคืื ืึท ืคืึทืจืฉืืืื ืงืืึทื ืคืื ืืคืขืงืฅ:
- ืื ืจืืกืคึผืึทื ืกืืืื ืึทืก ืคืื ืื ืกืืกืืขื ืืื ืคืึทืจืคืึทืื, ื ืืฆืขืจืก ืืืึทืจืื ืึท ืืึทื ื ืฆืืึทื ืคึฟืึทืจ ืขื ืืคึฟืขืจืก ืฆื ืคึฟืจืืื;
- ืืขืจ ืกืขืจืืืขืจ ืืืื ืกืืึทืคึผืก ืจืืกืคึผืึทื ืืื ื ืฆื ืืึทื ืืฆืขืจ ืจืืงืืืขืก ืจืขืื ืฆื ืึท ืึธืืืืขืจืืืขืืื ืคืึธืืขื ืืขืงื: ืื ืืขืจืืืึทื ืคืื ืคึฟืขืืขื ืืขื ืขื ืคืืจืฉืคืืจื ืืืืฃ ืึท ืืืื ืคืึทืจื ืืืขื ืืืจื ืึท ืืจืึทื ืกืึทืงืืืึธื;
- ืืขืึทืืืึธืงืงืก ืึธื ืืืืื ืฆื ืืขืจืฉืืึทื ืขื: ืื ืืืงืขืืืืึธืึธื ืคืื ืืืืขืจ ืคึผืึทืกืืจืื ื ืฉืืืจืง ืืขืคึผืขื ืืก ืืืืฃ ืืขืจ ืืขืืืืขืจ ืคืื ืืจืึทื ืืึทืงืฉืึทื ื, ืื ืกืืืข ืคืื โโืืขืฉืขืคื ืืึธืืืง ืืื ืืึทืงืก ืื ืืืึทืืืื ืืื ืื ืืจืึทื ืกืึทืงืืืึธื;
- ืืจืึทื ืกืึทืงืืืึธื ืืืืืึทืื ืขืจืจืึธืจืก ืืขืจืฉืืึทื ืขื;
- ืืขืจ ืกืขืจืืืขืจ "ืคืืืื" ืืื OutOfMemory ืืืื ืื ืึทืจืืขื ืจืืงืืืืืขืจื ืคึผืจืึทืกืขืกืื ื ืืื ืืฉืึทื ืืื ื ืืจืืืก ืึทืืึทืื ืฅ ืคืื ืืึทืื, ืืื ืื ืืืึทืืืึทื ืคืื ืกืื ืืฉืจืึธื ืึธืืก ืื ืืึทืืจืืืฉืึทื ื ืืืื ืขืก ืืืืขืจ ืฉืืืขืจ ืฆื ืฉืคึผืึทืืื ืคึผืจืึทืกืขืกืื ื ืืื "ืืืืขืจ" ืืจืึทื ืืึทืงืฉืึทื ื.
ืคึฟืื ืึท ืึทืจืงืึทืืขืงืืฉืขืจืึทื ืคืื ื ืคืื ืืืื ืื ื, ืื ื ืืฆื ืคืื ืืืึทืงืื ื ืงืึทืืืก ืืขืฉืึทืก ืื ืึทืืจืืืฉืึทื ืคืืจื ืฆื ืึท ืึธื ืืืขืจ ืคืื ืงืึธื ืืจืึธื ืืืืขืจ ืื ืงืืืึทืืืืขื ืคืื ืืืื ืกืึทืืกืืกืืึทืื: ืขืก ืืื ืืืืืขืืืขื ืฆื ืขื ืฉืืจ ืื ืฆืื ืงืืืึทืืืืขื ืื ืืืงืึทืืึธืจืก ืคืื ืืืื ืกืึทืืกืืกืืึทื ืืื ืืคืืขืืื ืืขืจืืงืืื ืคืื ืื ืงืืืึทืืืืขื ืื ืืึทืงืืืืขืจื ืคืื ืื ืื ืืขืจ ืกืึทืืกืืกืืึทื. ืืืื ืกืึทืืกืืกืืึทืื ืืขื ืขื ืืขืืืขืืึธืคึผืขื ืืืจื ืคืึทืจืฉืืืขื ืข ืืืื, ืืึธืก ืืื ืึท ืืจืืืก ืคึผืจืึธืืืขื.
ืื ืืื ืื ืืืขืจื ืืคืืื ืืขืจ ืืฉืืงืึทืืืข ืืืื ืื ืื ืึทืืจืืืืื ืกืึทืืกืืกืืึทืื ืืขื ืขื ืืื ืคืึทืจืฉืืืขื ืข ืึทืคึผืืึทืงืืืฉืึทื ื ืืื ืืืจ ืืึทืจืคึฟื ืฆื ืืึทืื ืกืื ืืฉืจืึธื ืึธืืก ืขื ืืขืจืื ืืขื ืืืืฃ ืืืืืข ืืืืื. ืืื ืฆื ืขื ืฉืืจ ืื ืืจืึทื ืกืึทืงืืืึธื ืึทืืืื ืคืื ืื ืขื ืืขืจืื ืืขื?
ืืืื ืขื ืืขืจืื ืืขื ืืขื ืขื ืืขืืืื ืืื ืืึทืืื ืืขืจ ืืจืึทื ืืึทืงืฉืึทื ื, ืืืจ ืืืขื ืืึทืจืคึฟื ืฆื ืฆืืฉืืขืื ืคืึทืจืืึธืืืขื ืืืกื ืขื ืืึทื ืืืื ื ืืื ืคืึทืจืืืืืงืื ื, ืืื ืืึธืก ืืึธืจ ืืืืืึทื ืืืฅ ืื ืืืืคึผื ื ืืฅ ืคืื ืกืื ืืฉืจืึธื ืึธืืก ืื ืืึทืืจืืืฉืึทื ื - ืคึผืึทืฉืืขืก.
ืคืื ืื ืืขืจืืขืืืืื ืืจืึทื ืืึทืงืฉืึทื ื ืืืื ืงืืืขื ืฆื ืืืื ืื ื, ืึธืืขืจ ืืืจ ืืึธื ื ืื ื ืืฆื ืืื ืืื ืืื ืืืขืจ ืกืึทืืืฉืึทื ื: ืขืก ืืื ืฉืืืขืจ ืฆื ืขื ืฉืืจ ืจืืืืืึทืืืืึทืื.
"ืกืึทืืึท" ืืื ืึท ืืืืืื ื ืฆื ืื ืืจืึทื ืกืึทืงืืืึธื ืคึผืจืึธืืืขื
ืืื ืื ืืจืึธืืื ื ืคึผืึธืคึผืืืึทืจืืืขื ืคืื ืืืงืจืึธ ืืึทืืื ืื ืืก, ืื ืคืึธืืขืจืื ื ืคึฟืึทืจ
ืืขืจ ืืืกืืขืจ ืกืึทืืืื ืืืฉืืืืืขืก ืื ืืืืื-ืืขืจืืื ื ืคืจืืืืขืืขื ืคืื ืืึทื ื ืืจืึทื ืืึทืงืฉืึทื ื, ืืื ืืืื ืืงืกืคึผืึทื ืื ืื ืงืืืคึผืึทืืืืึทืืื ืคืื ืึธื ืคืืจืื ื ืื ืฉืืึทื ืคืื ืื ืกืืกืืขื ืคึฟืื ืื ืืืึทื ืคืื ืืขืฉืขืคื ืืึธืืืง: ืคืึทืจืืืืืงืื ื ื ืึธื ืึท ื ืื ืึทื ืืขืจืฉ ืืจืึทื ืกืึทืงืืืึธื ืงืขื ื ืืฉื ืฆืืจืืงืงืจืืื ืื ืกืืกืืขื ืฆื ืืืื ืึธืจืืืื ืขื ืฉืืึทื, ืึธืืขืจ ืฆืืฉืืขืื. ืึทื ืื ืืขืจ ืืจืืจื ืืึทืื ืคึผืจืึทืกืขืกืื ื ืืึทืจืฉืจืื. ืืึธืก ืืืื ืึทืืึทืื ืืืจ ืฆื ืืืกืืืืื ืจืืคึผืืืื ื ืืฆืืื ืืขืขื ืืืงื ืืึทืื ืคึผืจืึทืกืขืกืื ื ืกืืขืคึผืก ืืืขื ืืืจ ืคึผืจืึผืืื ืฆื ืืจืขื ืืขื ืืขื ืคึผืจืึธืฆืขืก ืฆื ืึท "ืืืื" ืกืึธืฃ.
ืื ืืขืจืขืกืืื ืืื, ืืื ืืึทื ืึทืืืืืง ืกืืกืืขืืขื ืืขื ืืืกืืขืจ ืืื ืืืื ืืึทืืืึทืืืง ืืืขื ืขืก ืงืืื ืฆื ืื ืื ืืึทืืจืืืฉืึทื ืคืื ืืืกืื ืงืึทืคึผืึทืื ืกืึทืืกืืกืืึทืื ืืื ื ืขืืึทืืืื ืืคืขืงืฅ ืืขืคึฟืืจื ืืืจื ืืึทื ื-ืืืืคื ืืจืึทื ืืึทืงืฉืึทื ื ืืื ืงืึธืจืึทืกืคึผืึทื ืืื ื ืืืื ืืึทืงืก ืืขื ืขื ืืืืขืจืงื.
ืืื ืืึทืฆืืื ื ืฆื ืืื ืืืขืจ ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื ืืื ืื BPM ืกืืื, ืขืก ืืืจื ืก ืืืืก ืฆื ืืืื ืืืืขืจ ืืจืื ื ืฆื ืื ืกืืจืืืขื ื "ืกืึทืืึทืก": ืืืื ืกืืขืคึผืก ืคืื ืื "ืกืึทืืึท" ืงืขื ืขื ืืืื ืกืคึผืขืกืืคืืขื ืืื ืึทืงืืืืืืืขืื ืืื ืื ืืขืฉืขืคื ืคึผืจืึธืฆืขืก, ืืื ืื ืคึผืขืจืกืืกืืขื ื ืฉืืึทื ืคืื ืื ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืืืื ืืึทืฉืืืื ืื ืื ืขืจืืขื ืฉืืึทื ืคืื ืื "ืกืึทืืึท". ืึทื ืืื, ืืืจ ืืึธื ื ืื ืืึทืจืคื ืงืืื ื ืึธื ืงืึธืืึธืจืืึทื ืืืฉืึทื ืืขืงืึทื ืืืึทื. ืื ืืืจ ืืึทืจืคึฟื ืืื ืึท ืึธื ืืึธื ืืขืงืืขืจ ืืืึธืก ืฉืืืฆื "ืืคึผืืืช ืึทืืึธื" ืืขืจืึทื ืืื ืืื ืึท ืึทืจืืืขืจืคืืจื.
ืึธืืขืจ ืืขื ืืืืืื ื ืืืื ืืื ืืืื ืืืืืขื ืข "ืคึผืจืืึทื":
- ืืขืฉืขืคื ืืืืืง ืืืขืจื ืืขืจ ืงืึธืืคึผืืืฆืืจื: ืคืึทืจืืืืืงืื ื ืืึทืจืฃ ืืืื ืืขืืจืืขื;
- ืขืก ืืืขื ืืืื ื ืืืืืง ืฆื ืคืึทืจืืึธืื ืคืื ืงืึธื ืกืืกืืขื ืกื, ืืืึธืก ืงืขื ืืืื ืกืคึผืขืฆืืขื ืฉืคึผืืจืขืืืืืง ืคึฟืึทืจ ืืึทื ืึทืืืืืง ืกืืกืืขืืขื;
- ืื ืึทืจืงืึทืืขืงืืฉืขืจ ืืืขืจื ืึท ืืืกื ืืขืจ ืงืึธืืคึผืืืฆืืจื, ืืื ืึท ื ืึธื ื ืืื ืคึฟืึทืจ ืึท ืึธื ืืึธื ืืขืงืืขืจ ืืืืก;
- ื ืึธื ืืึธื ืืืึธืจืื ื ืืื ืึทืืืื ืืกืืจืึทืฆืืข ืืืฉืืจืื ืืืขื ืืืื ืคืืจืืื ืื (ืืึธืืฉ ืืื ืึทืืืขืืืื, ืืึธืก ืืื ืืื: ืื ืงืืืึทืืืืขื ืคืื ืกืืกืืขื ืืื ืกื ืืืขื ืคืึทืจืืจืขืกืขืจื).
ืคึฟืึทืจ ืืึทื ืึทืืืืืง ืกืืกืืขืืขื, ืื ืืขืจืขืฅ ืคึฟืึทืจ ื ืืฆื "ืกืึทื" ืืื ื ืืฉื ืึทืืื ืงืืึธืจ ืืื ืืขืจ ืืึธื. ืคึฟืึทืจ ืืืงืจืึธืกืขืจืืืืกืขืก ืืื ืื ืืขืจืข ืกืึธืึท, ืืื ืจืืึฟ ืืกืชึผืื ืขืก ืืื ืฉืืื ืึท ืืขืงืืขืจ, ืืื ืคืื ืงืึธื ืกืืกืืขื ืกื ืืื ืืงืจืื ืืขืืืขื ืืื ืื ืึธื ืืืื ืคืื ืื ืคึผืจืืืขืงื, ืื ืืขื ืขืคืืฅ ืคืื ื ืืฆื ืืขื ืืืกืืขืจ ืงืขื ืขื ืืืืืืืืง ืึทืืืืืื ืื ืืืกืึทืืืืึทื ืืืืืฉืื, ืกืคึผืขืฆืืขื ืืืื ืขืก ืืื ืึท ืืึทืงืืืขื ืึทืคึผื ืืื ืื ืืขืฉืขืคื ืืึธืืืง. ืืืจืื.
ืขื ืงืึทืคึผืกืึทืืืืืื ื ืืขืฉืขืคื ืืึธืืืง ืืื ืืืงืจืึธ ืืึทืืื ืื ืืก
ืืืขื ืืืจ ืกืืึทืจืืขื ืขืงืกืคึผืขืจืืืขื ืืื ื ืืื ืืืงืจืึธืกืขืจืืืืกืขืก, ืึท ืืืืึทื ืงืฉืื ืืื ืืืืคืืขืฉืืื ืขื: ืืื ืฆื ืฉืืขืื ืื ืคืขืื ืืขืฉืขืคื ืืึธืืืง ืืื ืืึทืฆืืื ื ืฆื ืื ืกืขืจืืืืก ืืืึธืก ืื ืฉืืจื ืื ืคึผืขืจืกืืกืืึทื ืก ืคืื ืคืขืื ืืึทืื?
ืืืขื ืืืจ ืืืื ืืื ืื ืึทืจืงืึทืืขืงืืฉืขืจ ืคืื ืคืึทืจืฉืืื BPMSs, ืขืก ืงืขื ืืืกืงืืืขื ืืืืึทื ืฆื ืืึทืืื ืืขืจ ืืขืฉืขืคื ืืึธืืืง ืคืื ืคึผืขืจืกืืกืืึทื ืก: ืฉืึทืคึฟื ืึท ืคึผืืึทืืคืึธืจื ืืื ืคืขืื-ืคืจืืึท ืืืงืจืึธ ืกืขืจืืืืกืขืก ืืืึธืก ืคืึธืจืขื ืึท ืกืืืืืืข ืืื ืงืึทื ืืืื ืขืจ ืคึฟืึทืจ ืขืงืกืึทืงืืืืื ื ืคืขืื ืืขืฉืขืคื ืืึธืืืง, ืืื ืคึผืืึทื ืื ืคึผืขืจืกืืกืืึทื ืก ืคืื ืคืขืื ืืึทืื ืืื ืึท ืืึทืืื ืืขืจ ืคึผืืึทืกื ืคืื ืืืืขืจ ืคึผืฉืื ืืื ืืืืืืืืื ืืืงืจืึธ ืืึทืืื ืื ืืก. ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื ืืื ืืขื ืคืึทื ืืืจืืคืืจื ืึธืจืงืขืกืืจืึทืืืึธื ืคืื ืื ืกืขืจืืืืกืขืก ืคืื ืื ืคึผืขืจืกืืกืืึทื ืก ืฉืืืืข.
ืืขืจ ืฆืืืึทื ื ืืื ืึท ืืืืขืจ ืืจืืืก ืืืึทืืข: ืืืจ ืงืขื ืขื ืคืึทืจืืจืขืกืขืจื ืื ืคืึทื ืืงืฉืึทื ืึทืืืื ืคืื ืืขืจ ืคึผืืึทืืคืึธืจืืข ืืื ืคืื ืืื ืืืจ ืืืืื, ืืื ืืืืื ืื ืงืึธืจืึทืกืคึผืึทื ืืื ื ืคึผืืึทืืคืึธืจืืก ืืืงืจืึธืกืขืจืืืืกืขืก ืืืขื ืืืขืจื "ืคืขื". ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื ืคืื ืงืืื ืคืขืื ืงืขื ืขื ืืืืื ื ืืฆื ืื ื ืืึทืข ืคืึทื ืืงืฉืึทื ืึทืืืื ืคืื ืืขืจ ืคึผืืึทืืคืึธืจืืข ืืื ืืึทืื ืืื ืขืก ืืื ืืขืจืืืึทื ืืืงื.
ื ืืขืจ ืืืืืืื ืืขืจื ืขื ืื ืืคืืขืงื ืืึทืืืึทืืืง ืืืกืึทืืืืึทื ืืืืืฉืื ืคืื ืืขื ืฆืืืึทื ื:
- ืึท ืคึผืืึทืืคืึธืจืืข ืืื ืกื ืืืึธืก ืขืงืกืึทืงืืืฅ ืื ืืขืฉืขืคื ืืึธืืืง ืคืื ืคืืืข ืืึธืืืืื ื ืืื ืึทืืึธื ืงืึทืจืื ืืจืืืก ืจืืกืงืก ืืื ืึท ืืืื ืคืื ื ืคืื ืืืจืืคืึทื. ืึธืคื ืขื ืืขืจืื ืืขื ืฆื ืืขืฉืขืคื ืืึธืืืง ืคืึทืจืืจืขืกืขืจื ืื ืจืืืืงืืจื ืคืื ืขืจืจืึธืจืก ืืืึธืก ืคืืจื ืฆื ืกืืกืืขื-ืืจืืื ืคืืืืืขืจื;
- ืคืึธืจืฉืืขืืื ื ืืฉืื: ืืขืฉืขืคื ืืึธืืืง ืึทืจืืขื ืืื ืืืึทื ืืึทืื ืืืจื ืึท ืฉืืึธื ืืื ืคึผืึทืืขืืขื ืฆืืืื ื:
- ืื ืืึทืื ืืืขื ืืืืืขืจ ืืืื ืืึทืจืฉืึทืื ืืื ืคึผืึทืืคึผื ืืืจื ืื ื ืขืฅ ืึธื ืืืืื;
- ืึท ืคืขืื ืืื ืกื ืืืขื ืึธืคื ืฆืืฉืืขืื ืืขืจ ืืึทืื ืืื ืืื ืคืืจืืื ืื ืคึฟืึทืจ ืืขืฉืขืคื ืืึธืืืง ืฆื ืคึผืจืึธืฆืขืก ืจืขืื ืฆื ื ืื ืืขื ืืืืง ืงืืืคึผืึทืืืืึทืืื ืคึฟืึทืจ ืคึผืึทืจืึทืืขืืขืจืืืืื ื ืจืืงืืืขืก ืืืืฃ ืื ืืืจืื ืคืื ืื ืคืื ืืจืืืกื ืืืง ืึทืคึผื ืคืื ืื ืืื ืกื;
- ืขืืืขืืข ืคืจืืึท ืืขืฉืขืคื ืืึธืืืง ืงืขื ืขื ืจืืคึผืืืืืื ืืขืื ืื ืืขืืืข ืืึทืื ืคึฟืึทืจ ืคึผืจืึทืกืขืกืื ื (ืืขื ืคึผืจืึธืืืขื ืงืขื ืขื ืืืื ืืืืึทืืืืืื ืืืจื ืึทืืื ื ืกืขืกืืข ืงืึทืืคึผืึธืื ืึทื ืฅ ืืืึธืก ืงืึทืฉ ืืึทืื, ืึธืืขืจ ืืึธืก ืงืึทืืคึผืืืงืืืฅ ืื ืึทืจืงืึทืืขืงืืฉืขืจ ืืื ืงืจืืืืฅ ืคึผืจืึธืืืขืืก ืืื ืืึทืื ืฉืืืืืช ืืื ืงืึทืฉ ืื ืืืึทืืึทืืืืฉืึทื);
- ืืจืึทื ืกืึทืงืืืึธื ืคึผืจืึธืืืขืืก:
- ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื ืืื ืคึผืขืจืกืืกืืขื ื ืฉืืึทื, ืืืึธืก ืืื ืกืืึธืจื ืืืจื ืึท ืคึผืืึทืืคืึธืจืืข ืืื ืกื, ืืขื ืขื ืกืชืืจื ืืื ืคืขืื ืืึทืื, ืืื ืขืก ืืขื ืขื ืงืืื ืืจืื ื ืืืขืื ืฆื ืกืึธืืืืข ืืขื ืคึผืจืึธืืืขื;
- ืคึผืืืืกืื ื ืคืขืื ืืึทืื ืืืึทืงืื ื ืึทืจืืืก ืื ืืจืึทื ืกืึทืงืืืึธื: ืืืื ืื ืคืขืื ืืขืฉืขืคื ืืึธืืืง ืืึทืจืฃ ืฆื ืืึทืื ืขื ืืขืจืื ืืขื ื ืึธื ืขืจืฉืืขืจ ืงืึธื ืืจืึธืืืจื ืื ืจืืืืืง ืคืื ืื ืงืจืึทื ื ืืึทืื, ืขืก ืืื ื ืืืืืง ืฆื ืืืกืฉืืืกื ืื ืืขืืืขืืงืืื ืคืื ืึท ืงืึทืืคึผืขืืืืืื ืขื ืืขืจืื ื ืืื ืื ืคึผืจืึทืกืขืกื ืืึทืื. ืคืื ืืจืืืกื ืืืง ืืึทืื ืืืึทืงืื ื ืงืขื ืขื ืืขืืคื ืกืึธืืืืข ืื ืคึผืจืึธืืืขื, ืึธืืขืจ ืึทืืึท ืึท ืืืืืื ื ืงืึทืจืื ื ืึธื ืจืืกืงืก ืืื ืจืึทืืืกืึทื ืื ืงืืืืขืืืืง ืจืืืืืึทืืืืึทืื ืคืื ืื ืกืืกืืขื;
- ื ืึธื ืฉืืืขืจืืงืืืื ืืืขื ืึทืคึผืืืืืื ื: ืืื ืขืืืขืืข ืงืึทืกืขืก, ืื ืคึผืขืจืกืืกืืึทื ืก ืืื ืกื ืืื ืืขืฉืขืคื ืืึธืืืง ืืึทืจืคึฟื ืฆื ืืืื ืืขืจืืืึทื ืืืงื ืกืื ืืงืจืึทื ืึทืกืื ืึธืืขืจ ืืื ืึท ืฉืืจืขื ื ืกืืงืืืึทื ืก.
ืืขืกืึธืฃ, ืืืจ ืืึธืื ืฆื ืืืื ืฆืืจืืง ืฆื ืืึทืกืืงืก: ืขื ืงืึทืคึผืกืึทืืืื ืคืขืื ืืึทืื ืืื ืคืขืื ืืขืฉืขืคื ืืึธืืืง ืืื ืืืื ืืืงืจืึธ ืกืขืจืืืืก. ืืขื ืฆืืืึทื ื ืกืืืคึผืืึทืคืืื ืื ืืขืจืงืื ื ืคืื ืึท ืืืงืจืึธืกืขืจืืืืก ืืื ืึท ืื ืืึทืืจืึทื ืงืึธืืคึผืึธื ืขื ื ืคืื ืื ืกืืกืืขื ืืื ืืื ื ืืฉื ืคืืจื ืฆื ืื ืืืืื ืคึผืจืึธืืืขืืก. ืืึธืก ืืื ืืืื ื ืืฉื ืืขืืขืื ืคึฟืึทืจ ืคืจืื:
- ืึทืคึผื ืกืืึทื ืืขืจืืืืืืฉืึทื ืืื ืคืืจืืื ืื ืคึฟืึทืจ ืื ืืขืจืึทืงืฉืึทื ืืื ืืขืฉืขืคื ืืึธืืืง (ืืื ืืึทืืื ืืขืจ, ืฆื ืฆืืฉืืขืื ืืึทื ืืฆืขืจ ืึทืงืืืืืืืขืื ืืื ืึท ืืืื ืคืื ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื) ืืื ืึทืคึผื ืคึผืืึทืืคืึธืจืืข ืืึทืืื ืื ืืก; ืจืืงืืืืืขืจื ืืขืจ ืึธืคึผืืขืืื ืืคืืขืจืงืืึทืืงืืื ืฆื ืึทืคึผื ืขื ืืขืจืื ืืขื, ืคืึธืจืืืก ืืื ืฆืืจืืง ืงืึทืืคึผืึทืืึทืืืืึทืื;
- ืขืก ืืื ื ืืืืืง ืฆื ืืืืื ื ืึธื ืจืื ืืืืข ืืืืืจืขืจืื ืฆื ืขื ืฉืืจ ืื ืคืึทื ืืงืฉืึทื ืื ื ืคืื ืืขืฉืขืคื ืืึธืืืง ืืื ืึท ืืืื ืคืื ืืขืืขืจ ืึทืืึท ืืืงืจืึธืกืขืจืืืืก, ืืื ืืึธืก ืืื ืืขืืขืจืื ื ืฆื ื ืืึทืข ืจืขืงืืืืจืขืืขื ืฅ ืคึฟืึทืจ ืึทืืึท ืืืืืจืขืจืื: ืืืืื ืึทืก ืืื ืึท ืืื ืืืื ืคืื ืืจืึทื ืืืืืื ืืืคึผืขื ืืึทื ืกืื;
- ืืขืฉืขืคื ืืึธืืืง ืืขืืืขืืึธืคึผืขืจืก ืืึทืจืคึฟื ืฆื ืืึธื ืืืึธืจ ืืืืืืึธืืขืง ืืืขืจืกืืขืก: ืืืื ืึท ืืืงืจืึธืกืขืจืืืืก ืืื ื ืืฉื ืคืืื ืึทืืืืื ืคึฟืึทืจ ืึท ืืึทื ื ืฆืืึทื, ืขืก ืืืขื ืจืืึฟ ืืกืชึผืื ืึทื ืืืึทืืื ืึทื ืึทืืืืืืืื ืืืขืจืกืืข ืคืื โโโโืื ืืืืืจืขืจืื. ืืึธืก ืงืขื ืืืื ืึทื ืืืืืขืจืืื ืฉืืขืจืื ื ืฆื ืืืืื ืึท ื ืืึทืข ืฉืืจืื ืืื ืงืขื ืืึทืจืคื ืืืืจืืืืื ื ืื ืึทืื ืืขืฉืขืคื ืืึธืืืง ืคืื ืึทืืึท ืึท ืืื ืกื ืฆื ื ืืึทืข ืืืขืจืกืืขืก ืคืื ืืืืืจืขืจืื ืืืื ืขืก ืืขื ืขื ืื ืงืึทืืคึผืึทืืึทืืึทื ืขื ืืขืจืื ืืขื ืฆืืืืฉื ืืืขืจืกืืขืก.
ื ืฉืืืืข ืคืื โโืคึผืืึทืืคืึธืจืืข ืืึทืืื ืื ืืก ืืื ืืืื ืคืึธืจืฉืืขืื ืืื ืึทืืึท ืึท ืึทืจืงืึทืืขืงืืฉืขืจ, ืึธืืขืจ ืืขื ืฉืืืืข ืืื ื ืื ืืขืจ ืึท ืงืึทื ืืืื ืขืจ ืคึฟืึทืจ ืขืงืกืึทืงืืืืื ื ืคืขืื ืืขืฉืขืคื ืืึธืืืง, ืึธืืขืจ ืืืืื ืืืึทื ืกืืืืืืข, ืคึผืจืึทืืืืืืื ื ืึทืืืืืืขืจื "ืคึผืืึทืืคืึธืจืืข" ืคืึทื ืืงืฉืึทื ื. ืึทืืึท ืึท ืฉืืืืข ืืื ืืืจืฃ ื ืื ืืืืื ืฆื ืืืึทื ืขื ืื ืืืืืืืืื ื ืึทืืืจ ืคืื ืคืขืื ืืืงืจืึธืกืขืจืืืืกืขืก, ืึธืืขืจ ืืืื ืฆื ืกืขื ืืจืึทืืืื ืคืึทืจืืืึทืืืื ื.
ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืึทื ืืฆืขืจ ืึทืงืืืืืืืขืื ืืื ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื ืืืฉืขื ืขืจืืื ืืึทืกืงืก. ืึธืืขืจ, ืืืขื ืืจืืขืื ืืื ืืึทืกืงืก, ืืขืจ ืืึทื ืืฆืขืจ ืืืื ืืขื ืืึทืกืงืก ืคืื ืึทืืข ืืึธืืืืื ื ืืื ืืขืจ ืึทืืืขืืืื ืจืฉืืื, ืืืึธืก ืืืื ืึทื ืขืก ืืืื ืืืื ืึท ืงืึธืจืึทืกืคึผืึทื ืืื ื ืคึผืืึทืืคืึธืจืืข ืึทืจืืขื ืจืขืืืกืืจืึทืฆืืข ืืื ืกื, ืงืืืจื ืคืื ืคืขืื ืืขืฉืขืคื ืืึธืืืง. ืึธื ืืึทืืื ืขื ืงืึทืคึผืกืืืึทืืืึธื ืคืื ืืขืฉืขืคื ืืึธืืืง ืืื ืึทืืึท ืึท ืงืึธื ืืขืงืกื ืืื ืืึทื ืฅ ืคึผืจืึธืืืขืืึทืืืง, ืืื ืืึธืก ืืื ืื ืื ืืขืจ ืงืึธืืคึผืจืึธืืืก ืคืื ืืขื ืึทืจืงืึทืืขืงืืฉืขืจ.
ืื ืึทืืจืืืฉืึทื ืคืื ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื ืืืจื ืื ืืืืื ืคืื ืึท ืึทืคึผืืึทืงืืืฉืึทื ืืขืืืขืืึธืคึผืขืจ
ืืื ืืขืจืืื ื ืืืืื, ืึท ืึทืคึผืืึทืงืืืฉืึทื ืืขืืืขืืึธืคึผืขืจ ืืืื ืืืื ืึทืืกืืจืึทืงืืื ืคืื ืื ืืขืื ืืฉ ืืื ืื ืืฉืขื ืืขืจืืข ืคึฟืขืึดืงืืืื ืคืื ืืืคึผืืึทืืขื ืื ื ืื ืื ืืขืจืึทืงืฉืึทื ืคืื ืขืืืขืืข ืึทืคึผืืึทืงืืืฉืึทื ื ืึทืืื ืึทื ืืืจ ืงืขื ืขื ืจืขืืขื ืขื ืืืืฃ ืืื ืึทื ืืืืืงืืื ื ืคึผืจืึธืืืึทืงืืืืืืื.
ืืื ืก ืคึผืจืืืืจื ืฆื ืกืึธืืืืข ืึท ืืึทื ืฅ ืฉืืืขืจ ืื ืึทืืจืืืฉืึทื ืคึผืจืึธืืืขื, ืกืคึผืขืฆืืขื ืื ืืืขื ืืึทื ืคึฟืึทืจ ืืขื ืึทืจืืืงื. ืืึธืก ืืืขื ืืืื ืึท "ืฉืคึผืื" ืึทืจืืขื ืืื ืืจืื ืึทืคึผืืึทืงืืืฉืึทื ื, ืืื ืืขืืขืจ ืคืื ืืื ืืืคืืื ื ืึท ืืืืขืจ ืคืขืื ื ืึธืืขื: "ืึทืคึผ1", "ืึทืคึผ 2", "ืึทืคึผ 3".
ืื ืืขืืขืจ ืึทืคึผืืึทืงืืืฉืึทื, ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื ืืขื ืขื ืืึธื ืืฉื ืืืึธืก ืึธื ืืืืื ืฆื "ืฉืคึผืืื ืคึผืืืงืข" ืืืจื ืื ืื ืืึทืืจืืืฉืึทื ืืืืึธืืืก. ืึทืจืืืงืืขื ืืื ืื ื ืึธืืขื "ืืึทืื" ืืืขื ืฉืคึผืืื ืืื ืึท ืคึผืืืงืข.
ืึผืืืื ืคืื ืื ืฉืคึผืื:
- ืืขืจ ืขืจืฉืืขืจ ืฉืคึผืืืขืจ ืืื ืืขืจ ืื ืืฉืืืืืขืจ. ืขืจ ืื ืืืืืฅ ืื ืืขืจืข ืคึผืืืึทืขืจืก ืฆื ืื ืฉืคึผืื, ืกืืึทืจืฅ ืื ืฉืคึผืื ืืื ืงืขื ืขื ืขื ืืืงื ืขืก ืืื ืงืืื ืฆืืื;
- ืื ืืขืจืข ืคึผืืืึทืขืจืก ืืขืจืงืืขืจื ืืืืขืจ ืึธื ืืืื ืืื ืื ืฉืคึผืื, "ืืึทืงืืืขื ืฆื ืืืืกื" ืืขืืขืจ ืื ืืขืจืขืจ ืืื ืืขืจ ืขืจืฉืืขืจ ืฉืคึผืืืขืจ;
- ื ืึธื ืืืงืืืขื ืื ืคึผืืืงืข, ืืขืจ ืฉืคึผืืืขืจ ืกืึทืืขืงืฅ ืื ืื ืืขืจ ืคึผืึทืจืืืกืึทืคึผืืืืื ื ืฉืคึผืืืขืจ ืืื ืคึผืึทืกืื ืื ืคึผืืืงืข ืฆื ืืื. ืื ืืึทื ืฅ ื ืืืขืจ ืคืื ืืจืึทื ืกืืืกืืข ืืื ืืขืจืขืื ื;
- ืืขืืขืจ ืฉืคึผืืืขืจ ืืื "ืขื ืขืจืืืข" ืืืึธืก ืืืงืจืืกืึทื ืืื ืืขืืขืจ ืคืึธืจื ืคืื ืื ืคึผืืืงืข ืืืจื ืืขื ืฉืคึผืืืขืจ. ืืืขื ืื ืขื ืขืจืืืข ืืืืคื ืืืืก, ืื ืฉืคึผืืืขืจ ืืืขืืขืจ ืื ืฉืคึผืื, ืึทื ืึทืื ืกืื ื ืืืื ืจืขืืึทืื ืืืฉืึทื;
- ืืืื ืืขืจ ืฉืคึผืืืขืจ ืืื ืืื ืงืก ืึทืืืื, ืขืจ ืืื ืึทื ืึทืื ืกืื ืืืื ืึธืคึผืคืึธืจ;
- ืืืขื ืึทืืข ืคึผืืืึทืขืจืก ืืขื ืขื ืืืืืึทื ืืืืึทื, ืืขืจ ืขืจืฉืืขืจ ืฉืคึผืืืขืจ ืืขืจืงืืขืจื ืื ืฉืคึผืื ืืืืขืจ. ืืืื ืขืจ ืืืขืืขืจ ืื ืฉืคึผืื ืคืจื, ืขืจ ืืืืืื ืฆื ื ืึธืืคืึธืืื ืื ืฉืคึผืื ืฆื ืคืึทืจืขื ืืืงื ืขืก.
ืฆื ืกืึธืืืืข ืืขื ืคึผืจืึธืืืขื, ืืื ืืืขื ื ืืฆื ืืื ืืืขืจ ืืกื ืคึฟืึทืจ ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื, ืืืึธืก ืึทืืึทืื ืืื ืื ืฆื ืืึทืฉืจืืึทืื ืื ืืึธืืืง ืืื ืงืึธืืืื ืงืึธืืคึผืึทืงืืื, ืืื ืึท ืืื ืืืื ืคืื ืงืขืกื.
ืืขืจ ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืคืื ืืขืจ ืขืจืฉืืขืจ ืฉืคึผืืืขืจ (ืึทืงืึท ืืขืจ ืื ืืฉืืืืืขืจ ืคืื ืื ืฉืคึผืื) ืืืขื ืึทืจืืขืื ืืื ืื ืึทืคึผ 1 ืึทืคึผืืึทืงืืืฉืึทื:
ืงืืึทืก 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}")
}
ืืื ืึทืืืฉืึทื ืฆื ืขืงืกืึทืงืืืืื ื ืืขืฉืขืคื ืืึธืืืง, ืื ืืืืื ืงืึธื ืงืขื ืขื ืคึผืจืึธืืืฆืืจื ืึท ืืืืคืขืฅ ืืึธืืขื ืคืื ืึท ืืขืฉืขืคื ืคึผืจืึธืฆืขืก, ืืืึธืก ืงืขื ืขื ืืืื ืืืืืฉืืืึทืืืืื ืืื ืื ืคืึธืจืขื ืคืื ืึท ืืืึทืืจืึทืืข. ืืืจ ืืึธืื ื ืึธื ื ืืฉื ืืืคึผืืึทืืขื ืึทื ืื ืืืืืฉืืืึทืืืืขืจ, ืึทืืื ืืืจ ืืึธืื ืฆื ืคืึทืจืืจืขื ืืขื ืึท ืืืกื ืฆืืื ืฆืืืืขื ืื ื (ืืึธ ืืื ืึท ืืืกื ืกืืืคึผืืึทืคืืื ืื BPMN ื ืึธืืืืืฉืึทื ืืืขืื ืื ื ืืฆื ืคืื ืืืืขืจื ืฆื ืคึฟืึทืจืืขืกืขืจื ืื ืงืึธื ืกืืกืืขื ืกื ืคืื ืื ืืืึทืืจืึทืืข ืืื ืื ืงืึธื ืืื ืื):
app2 ืืืขื ืึทืจืืึทื ื ืขืืขื ืื ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืคืื ืื ืื ืืขืจืข ืฉืคึผืืืขืจ:
ืงืืึทืก ืจืึทื ืืึธืืคึผืืืึทืขืจ
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}")
}
ืึทื ืืขืจืฉ, ืื ื ืึทืืืจ ืคืื ืื ืฉืคึผืืืขืจ ืืื ื ืืฉื ืึทื ืืขืจืฉ ืคืื ืื ืคืจืืขืจืืืงืข, ืึทืืื ืื ืืืึทืืจืึทืืข ืืื ื ืืฉื ืืืืฉื.
ืืืฆื ืืืจ ืืึทืจืคึฟื ืึท ืคึผืจืึธืืข ืฆื ืืืืคื ืึทืืข ืืขื. ืืื ืืืขื ืืขืื ืืืืื ืื ืงืึธื ืคืื ืื ืคึผืจืึธืืข ืืื, ืึทืืื ื ืืฉื ืฆื ืงืืึทืืขืจ ืืขื ืึทืจืืืงื ืืื ืึท ืงืขืกื (ืืื ืคืึทืงื, ืืื ืืขืืืืื ื ืื ืคึผืจืึธืืข ืกืืืืืืข ืืืฉืืคื ืคืจืืขืจ ืฆื ืคึผืจืืืืจื ืื ืื ืึทืืจืืืฉืึทื ืคืื ืื ืืขืจืข ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื):
testGame()
@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 ืืขืืข ืคึฟืึทืจ ืกืืื ืึทืื (ืืขืฉืขืขื ืืฉื). ืฉืืขืื ืึทืืข ืึทืจืืืงืืขื ืืืจื ืืืื ืจืื ืืื ืืื ืึท ืงืึธืืคึผืจืึธืืืก. ืืื ืื ืืขืฉืขืคื ืืึธืืืง ืืืจืื, ืืืจ ืงืขื ืขื ืืืฆื ืืึทืงืขื ืขื ืืื ืคืืืข ื ืืึทืข ืึธื ืืึธื ืืืืคึผืก ืืื ืืืจ ืืืืื ืึธื ืขื ืืขืจืื ืืขื ืฆื ืื ืกืืกืืขื ืกืืจืืงืืืจ. ืืึธืก ืืื ืึท ืืึทืืืืืืง ืกืืืคึผืืึทืคืืงืืืฉืึทื, ืึธืืขืจ ืขืก ืืจืืื ืืืืขืจ ืจืืกืงืก, ืืืึธืก ืืื ืืขื ืงืึธื ืืขืงืกื ืคืื ืืื ืืืขืจ ืืืคึผืืฉ ืืึทืกืงืก ืืื ื ืืฉื ืืืกืงืืืขื ืึทืืื ืืึทืืืึทืืืง ืคึฟืึทืจ ืืื ืื.
ืึธืืขืจ, ืขืก ืืื ืืืื ืกืึทืืึทืืื ืืึธ: ืืขืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ืคืืืืขืจืก "ืืืึทื" ืึทืจืืืงืืขื ืคืื ืื ืจืื ืืื ืื ืึทืจืืึทื ืืึทื ื, ืืืจื ืื ื ืึธืืขื ืคืื ืืืึทื ืคืขืื. ืื ืคืขืื ืงืขื ืขื ืืืื ืืืื ืกืคึผืขืกืืคืืขื ืืื ืกืืื ืึทืื ืืืื ืืืจ ืืึทืจืคึฟื ืฆื ืืึทืืจืขื ืขืฆื ืื "ืคืึทืจื ืขื ืคืื ืืืืืึทืืืืืื" ืคืื ืื ืกืืื ืึทื ืฆื ืืืื ืึทืคึผืืึทืงืืืฉืึทื. ืืึธืก ืืึธื ืคืึทืจืืจืขืกืขืจื ืื ืืืืึธืืืก ืืจืืคึผืื, ืึธืืขืจ ืื ืืขืฉืขืคื ืืึธืืืง ืืืื ืืืฆื ืึทืจืืขืื ืืื ืคืขืื ื ืขืืขื: ืคึฟืึทืจ ืึทืืจืขืกืื ื ืึทืจืืืงืืขื - ืืึทื ืืึทืืึธืจื, ืคึฟืึทืจ ืกืืื ืึทืื - ืืืืืืขืจืึทืืึทื.
ืื ืฉืืจืื ื ืื ืืขืืจืึทืืืึธื ืืืืึธืืืก ืจืขืืืึทืืืืืื
ืื ืจืืืืืึทืืืืึทืื ืืืฉืืืื ืคืื ืขืืืขืืข ืคืื ืงืื:
- ืืขืจ ืืืืกืืขืงืืืื ืึธื ืืึธื ืืขืงืืขืจ ืืื ืึท ืงืจืืืืฉ ืงืึธืืคึผืึธื ืขื ื ืคืื ืืขืจ ืึทืจืงืึทืืขืงืืฉืขืจ ืืื ืึท ืืืื ืคืื ื ืคืื ืืืจืืคืึทื: ืขืก ืืืื ืืืื ืืขื ืื ืฉืืื-ืืึธืืขืจืึทื ื. ืืืจ ืืึธื ื ืืฆื ืืืืื ืฆืืื-ืืขืกืืขื ืืืคึผืืึทืืึทื ืฅ, ืืื ืืื ืฉืืืฆื ืืื ืึท ืืจืืืก ืงืื;
- ืขืก ืืื ื ืืืืืง ืฆื ืขื ืฉืืจ ืืืื ืึทืืืืืืึทืืืืึทืื ืคืื ืื ืึธื ืืึธื ืืขืงืืขืจ, ืคึฟืึทืจ ืืืึธืก ืขืก ืืืื ืืืื ืคืืืืงืื ืืคืืขืฉืืืื ืคืื ืื ืื ืึทืืจืืืืื ืึทืคึผืืึทืงืืืฉืึทื ื (ืืืื ืึทืืืืืืึทืืืืึทืื ืคืื ืึทืคึผืืึทืงืืืฉืึทื ื ืืื ืืขืืืขื ืื ืืขืฉืขืคื ืืึธืืืง ืืื ืคืื ืืขืจ ืฉืืืขืจ ืืื ืืืึทืขืจ ืฆื ืขื ืฉืืจ);
- ืืขืจ ืืขืงืืขืจ ืืื ืึทืืืืืืืฉื ืฆื ืฆืืฉืืขืื "ืืคึผืืืช ืึทืืึธื" ืขืงืกืคึผืจืขืก ืืขืจืึทื ืืื. ืืึธืก ืืื ืึท ืืึทื ืืึทืืึธืจื ืคืึธืืขืจืื ื ืคึฟืึทืจ ืคืึทืจืืึธืืืขื ืึธืคึผืขืจืึทืฆืืข ืคืื โโืื ืื ืืึทืืจืืืฉืึทื ืืืืึธืืืก. ืขืก ืืื ื ืื ื ืืืืืง ืคึฟืึทืจ "ืคึผืื ืงื ืึทืืึธื" ืืืจืื ืืขืจืึทื ืืื: ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื, ืืื ืึท ืืขืจืฉื, ืืขื ืขื ื ืืฉื ืฉืคึผืืจืขืืืืืง ืฆื ืื ืจืืคึผืืืื ืึธื ืงืืืขื ืคืื ืึทืจืืืงืืขื ืึธืืขืจ ืืขืฉืขืขื ืืฉื, ืืื ืืื ืกืคึผืขืฆืืขื ืืึทืกืงืก ืืื ืืึธืก ืืื ืืืืืืืง, ืขืก ืืื ืืจืื ืืขืจ ืฆื ืืืืื ื ืึธื ืืฉืขืงืก ืฆื ืื ืืขืฉืขืคื ืืึธืืืง ืืื ืฆื ืงืขืกืืืืขืจ ื ืืฆื ืืึทื ืฅ "ืืืึทืขืจ" " ืืขืจืึทื ืืื;
- ืฉืืงื ืึทืจืืืงืืขื ืืื ืกืืื ืึทืื ืืืื ืืืื ืื ืืืึทืืืื ืืื ืึท ืงืืืืขืืืืง ืืจืึทื ืกืึทืงืืืึธื ืืื ืขื ืืขืจืื ืืขื ืืื ืื ืฉืืึทื ืคืื ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื ืืื ืคืขืื ืืึทืื. ืื ืืืืืขืจ ืึธืคึผืฆืืข ืืืึธืื ืืืื ืฆื ื ืืฆื ืึท ืืืกืืขืจ
ืืจืึทื ืกืึทืงืืืึธื ืึทื ืึธืืืืึธืงืก , ืึธืืขืจ ืขืก ืืืขื ืืึทืจืคื ืึทื ื ืึธื ืืืฉ ืืื ืื ืืึทืืึทืืืืก ืืื ืึท ืจืขืคึผืขืึทืืขืจ. ืืื JEE ืึทืคึผืืึทืงืืืฉืึทื ื, ืืึธืก ืงืขื ืืืื ืกืืืคึผืืึทืคืืื ืืืจื ื ืืฆื ืึท ืืืืข JTA ืคืึทืจืืืึทืืืขืจ, ืึธืืขืจ ืื ืงืฉืจ ืฆื ืื ืืืืกืืขืงืืืื ืืขืงืืขืจ ืืืื ืืืื ืืืืืืช ืฆื ืึทืจืืขืื ืืืXA ; - ืืึทื ืืืขืจืก ืคืื ืื ืงืึทืืื ื ืึทืจืืืงืืขื ืืื ืืขืฉืขืขื ืืฉื ืืืื ืืืื ืึทืจืืขืื ืืื ืึท ืืจืึทื ืกืึทืงืืืึธื ืืืึธืก ืขื ืืขืจืื ืืขื ืื ืฉืืึทื ืคืื ืึท ืืขืฉืขืคื ืคึผืจืึธืฆืขืก: ืืืื ืึทืืึท ืึท ืืจืึทื ืกืึทืงืืืึธื ืืื ืจืึธืืื ืฆืืจืืง, ืื ืงืึทืืึธืืข ืคืื โโืื ืึธื ืืึธื ืืืื ืืืื ืงืึทื ืกืึทืื;
- ืึทืจืืืงืืขื ืืืึธืก ืงืขื ื ืืฉื ืืืื ืืืืขืจืืขืืขืื ืจืขืื ืฆื ืขืจืจืึธืจืก ืืืื ืืืื ืกืืึธืจื ืืื ืึท ืืึทืืื ืืขืจ ืกืืึธืจืืืืฉ
ื.ื.ืง. (ืืืื ืืจืืื ืจืื). ืคึฟืึทืจ ืืขื ืฆืืืขืง, ืืืจ ืืืฉืืคื ืึท ืืึทืืื ืืขืจ ืคึผืืึทืืคืึธืจืืข ืืืงืจืึธืกืขืจืืืืก ืืืึธืก ืกืืึธืจื ืึทืืึท ืึทืจืืืงืืขื ืืื ืืืื ืกืืึธืจืืืืฉ, ืื ืืขืงืกืื ืืื ืืืจื ืึทืืจืืืืืฅ (ืคึฟืึทืจ ืฉื ืขื ืืจืืคึผืื ื ืืื ืืืื), ืืื ืืงืกืคึผืึธืืืื ืึทื ืึทืคึผื ืคึฟืึทืจ ืืืืืื ื, ืจืืกืขื ืืื ื ืฆื ืื ืืขืกืืื ืืืฉืึทื ืึทืืจืขืก ืืื ืืืกืืขืงื ืึทืจืืืงืืขื. ืกืืกืืขื ืึทืืืื ืืกืืจืึทืืึธืจืก ืงืขื ืขื ืึทืจืืขืื ืืื ืืขื ืืื ืกื ืืืจื ืืืืขืจ ืืืขื ืฆืืืื ื; - ืืื ืื ืืขืงืืขืจ ืกืขืืืื ืืก, ืืืจ ืืึทืจืคึฟื ืฆื ืกืืจืืืขืจื ืื ื ืืืขืจ ืคืื ืขืงืกืคึผืจืขืก ืจืืืจืืื ืืื ืืืืืื ืฆืืืืฉื ืืืืืืืขืจื ืฆื ืจืขืืืฆืืจื ืื ืืืงืขืืืืึธืึธื ืคืื ืึทืจืืืงืืขื ืฆื ืืึทืงืืืขื ืืื DLQ (ืขืก ืืื ืึผืืขื ืืืืืขืืืขื ืฆื ืจืขืืขื ืขื ืื ืึธืคึผืืืืึทื ืคึผืึทืจืึทืืขืืขืจืก, ืึธืืขืจ ืืืจ ืงืขื ืขื ืืึทื ืืืขื ืขืืคึผืืจืืงืึทืืื ืืื ืกืืจืืืขืจื ืืื ืืขืฉืึทืก ืึธืคึผืขืจืึทืฆืืข );
- ืื DLQ ืงืจืึธื ืืืื ืืืื ืงืึทื ืืื ืืืึทืกืื ืืึธื ืืืึธืจืขื, ืืื ืื ืืึธื ืืืึธืจืื ื ืกืืกืืขื ืืืื ืคืืื ืง ืกืืกืืขื ืึทืืืื ืืกืืจืึทืืึธืจืก ืึทืืื ืึทื ืืืขื ืึทื ืืืืืืืขืจื ืึทืจืืืงืืขื ืคืึทืื, ืืื ืงืขื ืขื ืจืืกืคึผืึทื ื ืืื ืืขืฉืืืื ื ืืื ืืขืืืขื. ืืึธืก ืืืขื ืจืขืืืฆืืจื ืื "ืึทืคืขืงืืึทื ืืขืื ื" ืคืื ืึท ืืืจืืคืึทื ืึธืืขืจ ืืขืฉืขืคื ืืึธืืืง ืืขืืช;
- ืื ืื ืืึทืืจืืืฉืึทื ืืืืึธืืืก ืืืื ืืืื ืื ืกืขื ืกืืืืื ืฆื ืื ืฆืืืืืืืืืืืข ืึทืืืขืง ืคืื ืึทืคึผืืึทืงืืืฉืึทื ื: ืกืึทืืกืงืจืืคึผืฉืึทื ื ืฆื ืึท ืืขืืข ืืืื ืืืื ืืืจืึทืืึทื, ืืื ืื ืคืขืื ื ืึธืืขื ืคืื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืืื ืืืื ืืื ืฆืืง ืึทืืื ืึทื ืืฉืขืช ืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ื ืืืึธ, ืขืืขืฆืขืจ ืึทื ืืขืจืฉ ืืืขื ื ืืฉื ืคึผืจืืืืจื ืฆื ืคึผืจืึธืฆืขืก ืืืื ืึทืจืืืงืืขื ืคึฟืื ืื ืึทืคึผืืึทืงืืืฉืึทื. ืจืื.
ืื ืฉืืจืื ื ืคืึธืืขื ืืืืขืจืงืืึทื ืคืื ืืขืฉืขืคื ืืึธืืืง
ืืขืจ ืืขืืืืงืขืจ ืืืึทืฉืคึผืื ืคืื ืึท ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืงืขื ืขื ืืึทืงืืืขื ืขืืืขืืข ืึทืจืืืงืืขื ืืื ืืขืฉืขืขื ืืฉื ืืื ืึทืืึธื, ืื ืคึผืจืึทืกืขืกืื ื ืคืื ืืืึธืก ืืืขื ืึธื ืืืืื ืืื ืคึผืึทืจืึทืืขื. ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืื, ืคึฟืึทืจ ืึท ืึทืคึผืืึทืงืืืฉืึทื ืืขืืืขืืึธืคึผืขืจ, ืึทืืฅ ืืึธื ืืืื ืคึผืฉืื ืืื ืคืึธืืขื-ืืืืขืจ.
ืื ืืขืฉืขืคื ืืึธืืืง ืคืื ืึท ืคึผืจืึธืฆืขืก ืคึผืจืึทืกืขืกืึทื ืืขืืขืจ ืคืื ืืจืืืกื ืืืง ืืขืฉืขืขื ืืฉ ืืืึธืก ืึทืคืขืงืฅ ืืขื ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืื ืืืืืืืืฉืืึทืื. ืึทืืึท ืืขืฉืขืขื ืืฉื ืงืขื ืืืื:
- ืืึธื ืืฉืื ื ืึท ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืืืึทืฉืคึผืื;
- ืืึทื ืืฆืขืจ ืงืึทืืฃ ืฉืืึทืืืช ืฆื ืืขืืืงืืื ืืื ืึท ืืขืฉืขืคื ืคึผืจืึธืฆืขืก;
- ืงืึทืืึธืืข ืคืื โโืึท ืึธื ืืึธื ืึธืืขืจ ืกืืื ืึทื ืฆื ืืืึธืก ืึท ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืืืึทืฉืคึผืื ืืื ืึทืืึธื ืืจื;
- ืืจืืืขืจืื ื ืคืื ืึท ืืืึทืืขืจ ืืึทืฉืืืื ืืืจื ืึท ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืืืึทืฉืคึผืื;
- ืงืึธื ืืจืึธื ืงืึทืืฃ ืืืจื ืึทืคึผื (ืืืฉื, ืคึผืจืึธืฆืขืก ืืืขืจืจืืึทืก).
ืืขืืขืจ ืึทืืึท ืืขืฉืขืขื ืืฉ ืงืขื ืขื ืืืืฉื ืื ืฉืืึทื ืคืื ืึท ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืืืึทืฉืคึผืื: ืขืืืขืืข ืึทืงืืืืืืืขืื ืงืขื ืกืืฃ ืืื ืื ืืขืจืข ืงืขื ืึธื ืืืืื, ืืื ืื ืืืึทืืืขืก ืคืื ืคึผืขืจืกืืกืืขื ื ืคึผืจืึธืคึผืขืจืืืขืก ืงืขื ืืืืฉื. ืงืืึธืืืื ื ืงืืื ืืขืืืงืืื ืงืขื ืคืืจื ืฆื ืึทืงืืึทืืืืืฉืึทื ืคืื ืืืื ืขืจ ืึธืืขืจ ืืขืจ ืคืื ืื ืคืืืืขื ืืข ืึทืงืืืืืืืขืื. ืืขื ืข, ืืื ืงืขืจ, ืงืขื ืขื ืืึทืืื ืืืืจืื ืคึฟืึทืจ ืื ืืขืจืข ืืขืฉืขืขื ืืฉื ืึธืืขืจ, ืืืื ืืื ืืึธื ื ืื ืืึทืจืคึฟื ืงืืื ื ืึธื ืืึทืื, ืงืขื ืขื ืคืึทืจืขื ืืืงื ืืื ืืขืจ ืืขืืืืงืขืจ ืืจืึทื ืกืึทืงืืืึธื. ืืืืืขืจ ืงืืึธืืืื ื ืื ืืจืึทื ืกืึทืงืืืึธื, ืื ื ืืึท ืฉืืึทื ืคืื ืื ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืืื ืืขืจืืืขืืืขื ืืื ืื ืืึทืืึทืืืืก, ืืื ืขืก ืืืขื ืืืึทืจืื ืคึฟืึทืจ ืื ืืืืึทืืขืจ ืคืื ืืจืืืกื ืืืง ืืขืฉืขืขื ืืฉ.
ืคึผืขืจืกืืกืืขื ื ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืืึทืื ืกืืึธืจื ืืื ืึท ืจืืืืืฉืึทื ืึทื ืืึทืืึทืืืืก ืืื ืึท ืืืืขืจ ืืึทืงืืืขื ืคืื ื ืคึฟืึทืจ ืกืื ืืงืจืึทื ืึทืืืืฉืึทื ืคึผืจืึทืกืขืกืื ื ืืืื ืืืจ ื ืืฆื SELECT FOR UPDATE. ืืืื ืืืื ืืจืึทื ืกืึทืงืืืึธื ืืขืจืืื ืฆื ืืึทืงืืืขื ืื ืฉืืึทื ืคืื ืึท ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืคืื ืื ืืึทืืข ืคึฟืึทืจ ืืฉืึทื ืืื ื ืขืก, ืงืืื ืื ืืขืจืข ืืจืึทื ืกืึทืงืืืึธื ืืื ืคึผืึทืจืึทืืขื ืืืขื ืงืขื ืขื ืฆื ืืึทืงืืืขื ืื ืืขืืืข ืฉืืึทื ืคึฟืึทืจ ืื ืื ืืขืจ ืขื ืืขืจืื ื, ืืื ื ืึธื ืื ืงืึทืืคึผืืืฉืึทื ืคืื ืืขืจ ืขืจืฉืืขืจ ืืจืึทื ืกืึทืงืืืึธื, ืื ืจืืข ืืื ืืขืจืึทื ืืื ืฆื ืืึทืงืืืขื ืื ืฉืืื ืืขืืืื ืฉืืึทื.
ื ืืฆื ืคึผืขืกืืืืกืืืฉ ืืึทืงืก ืืืืฃ ืื DBMS ืืืึทื, ืืืจ ืืงืืื ืึทืืข ืื ื ืืืืืง ืืืืขืจืคืขื ืืฉื
ืึธืืขืจ, ืคึผืขืกืืืืกืืืฉ ืืึทืงืก ืกืืจืึทืฉืขื ืืื ืื ืืื ืืขืืืึธืงืงืก, ืืืึธืก ืืืื ืึทื SELECT FOR UPDATE ืืึธื ื ืึธื ืืืื ืืืืืืขื ืฆื ืขืืืขืืข ืืืืึทื ืืืืืึทืื ืืื ืคืึทื ืืขืืืึธืงืงืก ืคืึทืื ืืื ืขืืืขืืข ืขืจื ืกื ืงืึทืกืขืก ืืื ืื ืืขืฉืขืคื ืืึธืืืง.
ืื ืื ืืขืจ ืคึผืจืึธืืืขื ืืื ืื ืกืื ืืงืจืึทื ืึทืืืืฉืึทื ืคืื ืื ืึธื ืืืื ืคืื ืึท ืืขืฉืขืคื ืคึผืจืึธืฆืขืก. ืืึธืืฉ ืขืก ืืื ืงืืื ืืืึทืฉืคึผืื ืคืื ืึท ืืขืฉืขืคื ืคึผืจืึธืฆืขืก, ืขืก ืืื ืงืืื ืฉืืึทื ืืื ืื ืืึทืืึทืืืืก, ืึทืืื ืื ืืืกืงืจืืืื ืืืคึฟื ืืืขื ื ืืฉื ืึทืจืืขืื. ืืืื ืืืจ ืืึทืจืคึฟื ืฆื ืขื ืฉืืจ ืื ืืืืื ืืจืืืงืืื ืคืื ืึท ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืืืึทืฉืคึผืื ืืื ืึท ืกืคึผืขืฆืืคืืฉ ืคืึทืจื ืขื, ืืืจ ืืืขื ืืึทืจืคึฟื ืึท ืืื ืคืื ืกืื ืืงืจืึทื ืึทืืืืฉืึทื ืืืืคืขืฅ ืคึฟืึทืจืืื ืื ืืื ืืขื ืคึผืจืึธืฆืขืก ืงืืึทืก ืืื ืื ืงืึธืจืึทืกืคึผืึทื ืืื ื ืคืึทืจื ืขื. ืฆื ืกืึธืืืืข ืืขื ืคึผืจืึธืืืขื, ืืืจ ื ืืฆื ืึท ืึทื ืืขืจืฉ ืืึทืงืื ื ืืขืงืึทื ืืืึทื ืืืึธืก ืึทืืึทืื ืืื ืื ืฆื ื ืขืืขื ืึท ืฉืืึธืก ืืืืฃ ืึท ืึทืจืืืืจืึทืจืืฉ ืืืื ืกืคึผืขืกืืคืืขื ืืืจื ืึท ืฉืืืกื ืืื URI ืคึฟืึธืจืืึทื ืืืจื ืึท ืคืื ืืจืืืกื ืืืง ืืื ืกื.
ืืื ืืื ืืืขืจ ืืืืฉืคืืื, ืื InitialPlayer ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืึผืืื ืึท ืืขืงืืึทืจืึทืฆืืข
uniqueConstraint = UniqueConstraints.singleton
ืืขืจืืืขืจ, ืืขืจ ืงืืึธืฅ ืึผืืื ืึทืจืืืงืืขื ืืืขืื ืืขื ืืืขื ืืื ืจืืืืกืื ื ืื ืฉืืึธืก ืคืื ืื ืงืึธืจืึทืกืคึผืึทื ืืื ื ืฉืืืกื. ืขืก ืืขื ืขื ื ืื ืึทืืึท ืึทืจืืืงืืขื ืคึฟืึทืจ ืื ืืขืจืข ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื: ืืื ืฆืืง ืงืึธื ืกืืจืึทืื ื ืืื ื ืืฉื ืืึทืฉืืืื.
ืคึผืจืึธืืืขืืก ืคืื ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื ืืื ืคึผืขืจืกืืกืืขื ื ืฉืืึทื
ืืื ืืขืช ืึท ืคึผืขืจืกืืกืืขื ื ืฉืืึทื ื ืื ืืืืื ืืขืืคื, ืึธืืขืจ ืืืื ืืึทืงืข ืืื ืืขืจื ืึทื ืืืืืงืืื ื.
ืคึผืจืึธืืืขืืก ืึธื ืืืืื ืืืขื ืขื ืืขืจืื ืืขื ืืึทืจืคึฟื ืฆื ืืืื ืืขืืืื ืฆื ืื ืืขืฉืขืคื ืืึธืืืง ืืื / ืึธืืขืจ ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืืึธืืขื. ื ืื ืืขืืขืจ ืึทืืึท ืขื ืืขืจืื ื ืืื ืงืึทืืคึผืึทืืึทืืึทื ืืื ืื ืึทืื ืฉืืึทื ืคืื ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื. ืืืื ืขืก ืืขื ืขื ืคืืืข ืืขืื ืื ืกืืึทื ืกืื ืืื ืื ืืึทืืึทืืืืก, ืืืื ืื ืงืึทืืคึผืึทืืึทืืึทื ืขื ืืขืจืื ืืขื ืงืขื ืขื ืึธื ืืึทืื ืึท ืคึผืืึทืฅ ืคืื ืงืึธื ืคืืืงื, ืืืึธืก ืืืจ ืึธืคื ืืขืคึผืืึธื ืืขืจื ืืืขื ื ืืฆื jBPM.
ืืขืคึผืขื ืืื ื ืืืืฃ ืื ืืืคืงืืึทื ืคืื ืื ืขื ืืขืจืื ืืขื, ืืืจ ืงืขื ืขื ืฉืคึผืืื ืืื ืฆืืืื ืืืขืื:
- ืฉืึทืคึฟื ืึท ื ืืึทืข ืืืคึผ ืคืื ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืึทืืื ื ืืฉื ืฆื ืืึทืื ืื ืงืึทืืคึผืึทืืึทืืึทื ืขื ืืขืจืื ืืขื ืฆื ืื ืึทืื, ืืื ื ืืฆื ืขืก ืึทื ืฉืืึธื ืคืื ืื ืึทืื ืืืขื ืืึธื ืืฉืื ื ื ืืึทืข ืื ืกืืึทื ืกืื. ืึทืืืข ืงืึธืคึผืืขืก ืืืขืื ืคืึธืจืืขืฆื ืฆื ืึทืจืืขืื "ืืื ืคืจืืขืจ";
- ืืืืืจืืื ืื ืคึผืขืจืกืืกืืขื ื ืฉืืึทื ืคืื ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื ืืืขื ืึทืคึผืืืืืื ื ืืขืฉืขืคื ืืึธืืืง.
ืืขืจ ืขืจืฉืืขืจ ืืืขื ืืื ืกืืืคึผืืขืจ, ืึธืืขืจ ืืื ืืืึทื ืืืืืืืืฉืึทื ื ืืื ืืืกืึทืืืืึทื ืืืืืฉืื, ืคึฟืึทืจ ืืืึทืฉืคึผืื:
- ืืืคึผืืืงืึทืืืึธื ืคืื ืืขืฉืขืคื ืืึธืืืง ืืื ืคืืืข ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืืึธืืขืืก, ืื ืงืจืืกืื ื ืื ืืึทื ื ืคืื ืืขืฉืขืคื ืืึธืืืง;
- ืึธืคื ืึท ืืึทืืืืง ืืืขืจืืึทื ื ืฆื ื ืืึท ืืขืฉืขืคื ืืึธืืืง ืืื ืคืืจืืื ืื (ืืื ืืขืจืืื ืขื ืคืื ืื ืืึทืืจืืืฉืึทื ืืึทืกืงืก - ืึผืืขื ืฉืืขื ืืืง);
- ืืขืจ ืืขืืืขืืึธืคึผืขืจ ืงืขื ื ืืฉื ืืืืกื ืืื ืืืึธืก ืคืื ื ืึทืืืืืืืื ืืึธืืขืืก ืงืขื ืขื ืืืื ืืืืกืืขืืขืงื.
ืืื ืคืืจ ืืืจ ื ืืฆื ืืืืืข ืึทืคึผืจืึธืืืฉืื, ืึธืืขืจ ืืึธืื ืืขืืืื ืึท ื ืืืขืจ ืคืื ืืืกืืืฉืึทื ื ืฆื ืืึทืื ืืื ืืืขืจ ืืขืื ืืจืื ืืขืจ:
- ืืื ืื ืืึทืืึทืืืืก, ืื ืคึผืขืจืกืืกืืขื ื ืฉืืึทื ืคืื ืึท ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืืื ืกืืึธืจื ืืื ืึท ืืืืื ืืืื ืขืืืืืง ืืื ืืืืื ืคึผืจืึทืกืขืกื ืคืึธืจืขื: ืืื ืึท JSON ืคึฟืึธืจืืึทื ืฉืืจืืงื. ืืึธืก ืึทืืึทืื ืืืืจืืืฉืึทื ื ืฆื ืืืื ืืืจืืืขืงืึธืื ืืื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืืืกืืืืื ืืง. ืืื ืึท ืืขืฆืืข ืจืืืึธืจื, ืืืจ ืงืขื ืขื ืคืึทืจืจืืืื ืขืก ืืึทื ืืืึทืื (ืกืคึผืขืฆืืขื ื ืืฆืืง ืืื ืึทื ืืืืืงืืื ื ืืขืฉืึทืก ืืืืึทืืื ื);
- ืื ืื ืึทืืจืืืฉืึทื ืืขืฉืขืคื ืืึธืืืง ืืื ื ืืฉื ื ืืฆื ืื ื ืขืืขื ืคืื ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื, ืึทืืื ืึทื ืืื ืงืืื ืฆืืื ืขืก ืืื ืืขืืืขื ืฆื ืคืึทืจืืืึทืื ืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืืืื ืขืจ ืคืื ืื ืคึผืึทืจืืืกืึทืคึผืืืืื ื ืคึผืจืึทืกืขืกืึทื ืืื ืึท ื ืืึทืข ืืื ืึท ื ืืึทืข ื ืึธืืขื (ืืืฉื, "InitialPlayerV2"). ืื ืืืื ืืื ื ืึทืงืขืจื ืืืจื ืึธื ืืึธื ืืื ืกืืื ืึทื ื ืขืืขื;
- ืืขืจ ืคึผืจืึธืฆืขืก ืืึธืืขื ืืื ืึท ืืืขืจืกืืข ื ืืืขืจ, ืืืึธืก ืืืจ ืื ืงืจืึทืืึทื ื ืืืื ืืืจ ืืึทืื ืื ืงืึทืืคึผืึทืืึทืืึทื ืขื ืืขืจืื ืืขื ืฆื ืืขื ืืึธืืขื, ืืื ืืขื ื ืืืขืจ ืืื ืืขืจืืืขืืืขื ืฆืืืืืขื ืืื ืื ืฉืืึทื ืคืื ืืขื ืคึผืจืึธืฆืขืก ืืืึทืฉืคึผืื;
- ืื ืคึผืขืจืกืืกืืขื ื ืฉืืึทื ืคืื ืืขื ืคึผืจืึธืฆืขืก ืืื ืืืืขื ืขื ืคึฟืื ืื ืืึทืืึทืืืืก ืขืจืฉืืขืจ ืืื ืึท ืืึทืงืืืขื ืืืืคืขืฅ ืืึธืืขื, ืืืึธืก ืื ืืืืืจืืืฉืึทื ืคึผืจืึธืฆืขืืืจ ืงืขื ืขื ืึทืจืืขืื ืืื ืืืื ืื ืืึธืืขื ืืืขืจืกืืข ื ืืืขืจ ืืื ืืขืืืื;
- ืื ืืืืืจืืืฉืึทื ืคึผืจืึธืฆืขืืืจ ืืื ืืขืฉืืขืื ืืขืื ืื ืืขืฉืขืคื ืืึธืืืง ืืื ืืื ืืขืจืืคึฟื "ืคืืื" ืคึฟืึทืจ ืืขืืขืจ ืืืึทืฉืคึผืื ืคืื ืื ืืขืฉืขืคื ืคึผืจืึธืฆืขืก ืืื ืืขืจ ืฆืืื ืคืื ืจืขืกืืขืจืืืฉืึทื ืคืื ืื ืืึทืืึทืืืืก;
- ืืืื ืืืจ ืืึทืจืคึฟื ืฆื ืืืืืจืืื ืื ืฉืืึทื ืคืื ืึทืืข ืคึผืจืึธืฆืขืก ืื ืกืืึทื ืกืื ืืขืฉืืืื ื ืืื ืกืื ืืฉืจืึธื ืึธืืกืื, ืืขืจ ืงืืึทืกืืฉ ืืึทืืึทืืืืก ืืืืืจืืืฉืึทื ืกืึทืืืฉืึทื ื ืืขื ืขื ืืขื ืืฆื, ืึธืืขืจ ืืืจ ืืืื ืึทืจืืขืื ืืื JSON.
ืฆื ืืืจ ืืึทืจืคึฟื ืื ืื ืืขืจ ืคืจืืืืืืขืจืง ืคึฟืึทืจ ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื?
ืื ืกืึทืืืฉืึทื ื ืืืกืงืจืืืื ืืื ืืขื ืึทืจืืืงื ืขืจืืืืื ืืื ืื ืฆื ืืืืืืืืง ืคืึทืจืคึผืึธืฉืขืืขืจื ืืื ืืืขืจ ืืขืื, ืืงืกืคึผืึทื ื ืื ืงืืื ืคืื ืืฉืื ืกืึทืืืื ืืื ืื ืึทืคึผืืึทืงืืืฉืึทื ืึทื ืืืืืงืืื ื ืืืจืื ืืื ืืึทืื ืื ืืขืืึทื ืง ืคืื ืกืขืคึผืขืจืืืืื ื ืืขืฉืขืคื ืืึธืืืง ืืื ืืืงืจืึธ ืืึทืืื ืื ืืก ืืขืจ ืึทืืจืึทืงืืืื. ืฆื ืืขืจืืจืืืื ืืขื, ืึท ืคึผืืึทืฅ ืคืื ืึทืจืืขื ืืื ืืขืืืขื ืืขืืื, ืึท ืืืืขืจ "ืืืืืืืืื" ืคืจืืืืืืขืจืง ืคึฟืึทืจ ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื ืืื ืืขืืืขื ืืืฉืืคื, ืืื ืืขืืื ื ืืื ืกืขืจืืืืก ืงืึทืืคึผืึธืื ืึทื ืฅ ืฆื ืกืึธืืืืข ืื ืืืืขื ืึทืคืืื ืคึผืจืึธืืืขืืก ืืื ืืขื ืงืึธื ืืขืงืกื ืคืื ืึท ืืจืืื ืงืืื ืคืื ืึทืคึผืืึทืงืืืฉืึทื ืคึผืจืึธืืืขืืก. ืืืจ ืืึธืื ืึท ืคืึทืจืืึทื ื ืฆื ืืืืื ืื ืจืขืืืืืึทืื ืืื ืืึทืื ืื ืึทื ืืืืืงืืื ื ืคืื ืคึผืจืึธืกื ืงืึทืืคึผืึธืื ืึทื ืฅ ืึธืคึฟื ืึทืงืกืขืก ืืื ืืขืจ ืึท ืคืจืื ืืขืจืืืืืขื ืืฉ. ืืึธืก ืืืขื ืืึทืจืคื ืขืืืขืืข ืื ืืื ืฆืืื. ืฆื ืคึฟืึทืจืฉืืืื ืื ืคืึธืืขืจืื ื ืคึฟืึทืจ ืึทืืึท ืกืึทืืืฉืึทื ื ืงืขื ืืืื ืึทื ื ืึธื ืื ืกืขื ืืื ืคึฟืึทืจ ืืื ืื. ืืื ืื ืคืืจืืขืืืืื ืึทืจืืืงื, ืืืืขืจ ืงืืืื ืืคืืขืจืงืืึทืืงืืึทื ืืื ืืึทืฆืึธืื ืฆื ืื ืงืืืคึผืึทืืืืึทืืื ืคืื ืื ืคืจืืืืืืขืจืง ืืื, ืึธืืขืจ ืขืืืขืืข ืคืื โโืืื ืืขื ืขื ืงืขื ืืืง ืคึฟืื ืื ืืืืฉืคืืื ืืขืจืืื ืื. ืืืื ืืืจ ืึทืจืืืกืืขืื ืืื ืืืขืจ ืคืจืืืืืืขืจืง, ืึท ืืึทืืื ืืขืจ ืึทืจืืืงื ืืืขื ืืืื ืืขืืึทืงืืืืึทื ืฆื ืืื. ืืื ืืขืจ ืืขืจืืืืื, ืืืจ ืืืึธืื ืืืื ืืึทื ืงืืึทืจ ืืืื ืืืจ ืืึธืื ืึท ืืืกื ืืึทืืขืจืงืื ืืขื ืืืจื ืขื ืืคึฟืขืจื ืื ืงืฉืื:
ืืืืื ืจืขืืืกืืจืืจื ื ืืฆืขืจืก ืงืขื ืขื ืึธื ืืืื ื ืขืืขื ืืื ืื ืืืขืจืืืืง.
ืฆื ืืืจ ืืึทืจืคึฟื ืื ืื ืืขืจ ืคืจืืืืืืขืจืง ืคึฟืึทืจ ืืขืฉืขืคื ืคึผืจืึทืกืขืกืึทื?
-
ืงืกื ืืืงืก%ืื, ืืื ืืื ืฉืืื ืืื ื ืืขืืืื ืืื ืืื
-
ืงืกื ืืืงืก%ืืื ืืื ืืื ืืขืจืขืกืืจื ืฆื ืืขืจื ืขื ืืขืจ ืืืขืื ืืืื ืืืคึผืืึทืืขื ืืืืฉืึทื, ืขืก ืงืขื ืืืื ื ืืฆืืง 2
-
ืงืกื ืืืงืก%ืืืจ ื ืืฆื ืืืื ืขืจ ืคืื ืื ืืืืืกืืื ื ืคืจืึทืืขืืืึธืจืงืก, ืึธืืขืจ ืืืจ ืืจืึทืืื ืืืขืื ืจืืคึผืืืืกืื ื 1
-
ืงืกื ืืืงืก%ืืืจ ื ืืฆื ืืืื ืขืจ ืคืื ืื ืืืืืกืืื ื ืคืจืึทืืขืืืึธืจืงืก, ืึทืืฅ ืืื ืคืืื3
-
ืงืกื ืืืงืก%ืืืจ ืคืืจื ืึธื ืึท ืคืจืืืืืืขืจืง3
-
ืงืกื ืืืงืก%ืฉืจืืื ืืืื 4
16 ืืื ืืฆืขืจ ืืืื ืืขืฉืืืื. 7 ืืื ืืฆืขืจ ืืืื ืืื ืืคืืขืืืืื.
ืืงืืจ: www.habr.com