# Object Transaction Service

Object Transaction Service (OTS) é uma especificação da OMG que define um conjunto de interfaces para implementação de um serviço transacional em uma aplicação orientada a objeto. O OTS permite que objetos implementados no padrão CORBA participem de transações.

## Entidades

Uma aplicação que suporte o OTS deve ser composta pelas seguintes entidades:
* transactional client (cliente transacional) — Um programa qualquer que pode invocar operações em vários objetos no escopo de uma única transação;
* transactional object (objeto transacional) — Um objeto cujo comportamento é alterado quando chamado dentro de um escopo transacional;
* recoverable object e resource object (objeto recuperável e objeto de recurso) — O objeto cujo estado é alterado em uma operação de commit ou rollback de uma transação é chamado de "objeto recuperável". Quando um objeto recuperável necessita participar de uma transação ele faz isso se registrando no serviço de transação como um "objeto de recurso".
* transactional server (servidor transacional) — É um conjunto de objetos cujo comportamento é afetado por uma transação, mas que não possuem estados recuperáveis. Eles implementam alterações no estado através de outros objetos recuperáveis.
* recoverable server (servidor recuperável) — É um conjunto de objetos sendo que pelo menos um deles é recuperável. Um servidor recuperável participa na transação registrando um ou mais objetos de recurso no serviço de transação.

## Interfaces

As interfaces definidas na especificação do OTS são:
* current (transação corrente) — Permite que o cliente gerencie a associação entre uma thread e uma transação. Ela também define as operações que permitem ao cliente controlar o estado da transação (commit, rollback e etc);
* transaction factory (fábrica de transações) — Disponibiliza uma factory que permite ao cliente iniciar uma transação;
* control interface (interface de controle) — Permite que um programa gerencie ou propague um contexto transacional;
* terminator interface (interface de término) — Permite que um programa finalize uma transação;
* coordinator interface (interface de coordenação) — Disponibiliza operações que são utilizadas pelos participantes de uma transação
* recovery coordinator interface (interface do coordenação de recuperação) — Utilizada em situações de falha na transação para comunicar a um "coordenador" que operações de commit e rollback não foram realizadas em determinado recurso;
* resource interface (interface de recurso) — Define as operações efetuadas pelo serviço de transação em determinado recurso.
* synchronization interface (interface de sincronização) — Disponibiliza um protocolo que sincroniza transações globais entre vários recursos compatíveis com o padrão XA.
* subtransaction aware resource interface (interface de recurso para "sub-transações") — É uma especialização da interface de recurso para objetos que suportam transações aninhadas.

## Arquitetura

Uma transação é criada por qualquer programa através da interface transaction factory. No momento em que é criada uma transação, um objeto que implementa a interface control é retornado ao programa, através desta interface é possível acessar as interfaces terminator e coordinator. O programa que originou a transação utiliza o terminator para executar as operações de commit ou rollback em uma transação.