Service-oriented systems are inherently distributed and often deal with transactional workflows. Transactions in distributed systems need careful design compared with traditional database-oriented transactions or monolithic application logic-based transactions. Ensuring ACID properties in a service-oriented system involve techniques such as two phase commits (2PC), transaction management systems, compensation mechanisms, and transactional proxies.