Conceitos de ativação just-in-time COM+

O serviço de ativação just-in-time (JIT) permite que o COM+ desative um objeto enquanto um cliente ainda mantém uma referência ativa a esse objeto. Na próxima vez que o cliente chamar um método no objeto, que o cliente acredita ainda estar ativo, o serviço de ativação JIT COM+ reativa o objeto de forma transparente para o cliente, no momento certo.

A principal vantagem de usar a ativação COM + JIT é que você pode permitir que os clientes mantenham referências a objetos pelo tempo que precisarem, sem necessariamente vincular recursos valiosos do servidor, como memória. Outros benefícios importantes incluem o seguinte:

  • O uso do serviço de ativação JIT COM+ simplifica muito o modelo de programação para o cliente, pois o cliente não precisa pensar em como ele usa objetos de servidor caros e recursos de servidor. Sem a ativação JIT, os clientes podem incorrer em uma penalidade significativa quando frequentemente precisam chamar e liberar objetos.

    Observação

    Você pode refinar ainda mais esse benefício de desempenho usando o serviço de Pool de Objetos COM+. Ao agrupar objetos ativados por JIT, você pode acelerar muito a reativação de objetos para clientes enquanto reutiliza quaisquer recursos que eles possam estar mantendo, dando a você um controle mais preciso sobre quanta memória é usada por um determinado objeto no servidor. Para obter mais detalhes, consulte Pool de objetos e Ativação JIT COM+.

     

  • Com aplicativos distribuídos, uma viagem de ida e volta de rede cara é necessária para a criação de cada objeto, e quanto mais longe o cliente estiver do servidor, maiores serão os custos de ativação e empacotamento do objeto do servidor, abertura do canal e configuração do proxy e do stub. Usando o serviço de ativação JIT COM+, você pode minimizar a frequência de criação de objetos para melhorar significativamente o desempenho do seu aplicativo.

  • Quando você usa a ativação JIT COM+ para ativar os objetos aos quais os clientes mantêm referências de longa duração, mas que eles não estão necessariamente usando o tempo todo, a memória do servidor nem sempre está ligada mantendo esses objetos vivos. Isso pode aumentar significativamente a escalabilidade do seu aplicativo. O único impacto de desempenho que os clientes veem é o tempo que o COM+ leva para reativar o objeto, geralmente apenas marginalmente mais tempo do que leva para alocar memória para o objeto e substancialmente menos do que a viagem de ida e volta da rede para a criação remota de objetos.

Ativando a ativação JIT COM+

Você pode habilitar o serviço de ativação JIT COM+ para um componente usando a ferramenta administrativa Serviços de Componentes ou as funções Administrativas. Para obter detalhes sobre como fazer isso, consulte Habilitando a ativação JIT para um componente.

A ativação JIT COM+ pode interagir com outros serviços COM+, como os seguintes:

  • Quando seu componente requer transações, a ativação JIT é ativada automaticamente para ele. Para obter mais detalhes, consulte Transações e Ativação JIT COM+.
  • Quando o componente está habilitado para ativação JIT, a sincronização é automaticamente definida como necessária. Isso significa que, se dois clientes chamarem simultaneamente um componente ativado por JIT e uma chamada de método para um deles retornar, fazendo com que o objeto seja desativado, o outro não ficará encalhado.

Como a desativação é acionada

COM+ desativa um objeto com base no status do bit de realização no contexto do objeto. Seu objeto pode usar esse bit para sinalizar se ele está pronto, ou seja, pronto para ser desativado, durante uma determinada chamada de método. Para obter mais informações, consulte Definindo o bit concluído.

Usando a propriedade Auto-Done

Usando a ferramenta administrativa Serviços de Componentes, você pode configurar um método para que o objeto seja desativado automaticamente no retorno do método. (Veja Habilitando Auto-Done para um método para obter instruções sobre como definir essa propriedade.) Ao selecionar essa opção, você pode eliminar as chamadas de método repetitivo para votação em transações. Como a configuração padrão para o bit de consistência é True, se você também alterou o bit done para True e não executar nenhuma ação para alterar essas configurações, IObjectContext::SetComplete será chamado automaticamente após o método retornar.

No entanto, há uma ressalva para esse comportamento: COM+ examinará o HRESULT que o método retorna. Se esse HRESULT indicar falha, o bit de consistência será definido como False e o resultado será o mesmo que se você tivesse chamado IObjectContext::SetAbort.

Para resumir, se você selecionar feito automaticamente para um método e não executar nenhuma ação para definir nenhum bit e se um HRESULT(hr) for retornado, o seguinte se aplica:

  • Se SUCCEEDS(hr), é como se você chamasse SetComplete.
  • Se FAILED(hr), é como se você chamasse SetAbort.

Usando IObjectControl para gerenciar a ativação e a desativação de objetos

Você pode implementar a interface IObjectControl para que o tempo de execução COM+ gerencie automaticamente a desativação e a reativação de seus objetos. Quando um objeto implementa essa interface, COM+ chama IObjectControl::D eactivate quando ele desativa o objeto e IObjectControl::Activate quando ele o reativa. Esses métodos permitem a inicialização automática de contexto na ativação do objeto e a limpeza do estado na desativação.

Se você estiver agrupando objetos que usam a ativação JIT COM+, é altamente recomendável implementar IObjectControl. Para obter mais detalhes, consulte Pool de objetos e Ativação JIT COM+.

Apatridia e ativação JIT

Os objetos transacionais são necessariamente sem monitoração de estado porque você não pode compartilhar o estado através de um limite de transação. Portanto, você usaria a ativação JIT somente quando seu objeto não tiver nenhum estado que seria perdido na desativação; caso contrário, você viola o isolamento das transações. Devido aos padrões naturais de uso de objetos transacionais — eles fazem alguma unidade de trabalho e liberam o objeto quando a transação é confirmada ou abortada — a ativação JIT e as transações automáticas estão intimamente relacionadas. Configurar um objeto para exigir transações habilita a ativação JIT COM+ automaticamente.

Tarefas de ativação just-in-time COM+

Pool de objetos e ativação JIT COM+

Transações e ativação JIT COM+