Requisitos para objetos agrupáveis

Os objetos agrupáveis devem atender a determinados requisitos para permitir que uma única instância de objeto seja usada por vários clientes.

Sem estado

Para manter a segurança, a consistência e o isolamento, os objetos agrupáveis não devem conter nenhum estado específico do cliente de cliente para cliente. Você pode gerenciar qualquer estado por cliente usando IObjectControl, executando inicialização específica do contexto com IObjectControl::Activate e limpando qualquer estado do cliente com IObjectControl::D eactivate. Para obter mais detalhes, consulte Controlando o tempo de vida e o estado do objeto.

Sem afinidade de thread

Os objetos agrupáveis não podem ser vinculados a um thread específico; caso contrário, o desempenho pode ser potencialmente desastroso. Por esse motivo, os objetos agrupáveis não podem ser marcados para serem executados no modelo de apartamento; eles devem funcionar no apartamento multithreaded ou no apartamento neutro. Além disso, os objetos agrupáveis não devem usar o armazenamento local de thread nem devem agregar o empacotador de thread livre. Para obter mais detalhes sobre threading em COM+, consulte Modelos de threading COM+.

Observação

O Microsoft Visual Basic 6.0 e ambientes de desenvolvimento anteriores podem criar apenas componentes de modelo de apartamento. No entanto, no Visual Basic .NET, componentes podem ser agrupados.

 

Aggregatable

Os objetos poolable devem oferecer suporte à agregação — ou seja, eles devem oferecer suporte à criação invocando CoCreateInstance com um argumento pUnkOuter não-NULL. Quando COM+ ativa um objeto em pool, ele cria uma agregação para gerenciar o tempo de vida do objeto em pool e chamar métodos em IObjectControl. Para obter detalhes sobre como gravar objetos agregáveis, consulte Agregação.

Componentes transacionais

Os objetos agrupáveis que participam de transações devem inscrever manualmente recursos gerenciados. Enquanto estiver em pool, se o objeto contiver um recurso gerenciado, como uma conexão de banco de dados, não haverá como o gerenciador de recursos se alistar automaticamente em uma transação quando o objeto for ativado em determinado contexto. Portanto, o próprio objeto deve lidar com a lógica de detectar a transação, desativar o alistamento automático do gerenciador de recursos e inscrever manualmente todos os recursos que ele detém. Além disso, um objeto pool transacional deve refletir o estado atual de seus recursos nos valores de parâmetro de IObjectControl::CanBePooled. Para obter mais detalhes, consulte Pooling Transactional Objects.

Implementar IObjectControl para gerenciar o tempo de vida do objeto

Objetos poolable devem implementar IObjectControl, embora não seja estritamente necessário fazê-lo. Os componentes transacionais que são agrupados, no entanto, devem implementar IObjectControl. Esses componentes devem monitorar o estado dos recursos que possuem e indicar quando não podem ser reutilizados; quando IObjectControl::CanBePooled retorna false, ele condenará uma transação. Para obter mais detalhes, consulte Controlando o tempo de vida e o estado do objeto.

Restrições de idioma

Componentes desenvolvidos usando o Microsoft Visual Basic 6.0 e versões anteriores não podem ser agrupados porque esses componentes serão encadeados modelo de apartamento. No entanto, no Visual Basic .NET, componentes podem ser agrupados.

Componentes legados

Desde que não sejam transacionais e estejam em conformidade com os requisitos anteriores apropriados, os componentes podem ser agrupados mesmo que não tenham sido especificamente escritos com a capacidade de pool em mente. Não é necessário implementar IObjectControl, um componente que não o faz simplesmente não participará do gerenciamento de sua vida útil. Se IObjectControl::CanBePooled não for implementado, o objeto continuará a ser reutilizado até que o pool atinja o tamanho máximo.

COM+ Object Construtor Strings

Controlando o tempo de vida e o estado do objeto

Como funciona o pool de objetos

Melhorando o desempenho com o pool de objetos

Agrupando objetos transacionais