Gerenciamento de Encadeamento e o Spring Framework
Use as informações nas seções a seguir para evitar potenciais problemas com encadeamentos não gerenciados.
Encadeamentos Não-Gerenciados
- O servidor de aplicativos não reconhece encadeamentos não gerenciados.
- Encadeamentos não gerenciados não têm acesso às informações contextuais do Java™ EE.
- Encadeamentos não gerenciados podem usar recursos sem ser monitorados pelo servidor de aplicativos.
- Encadeamentos não gerenciados podem afetar adversamente as funções do servidor de aplicativos como o encerramento organizado ou a recuperação de recursos falhos.
- Um administrador não pode controlar o número de encadeamentos não gerenciados ou seu uso de recursos.
- registerShutdownHook
Evite usar a classe AbstractApplicationContext do Spring Framework e suas subclasses. Essas classes incluem o método público registerShutdownHook, que cria um encadeamento e registra-o com a Java virtual machine (JVM) para execução no encerramento para fechar o contexto de aplicativos. Como alternativa, um aplicativo pode usar os avisos de ciclo de vida recebidos do contêiner de servidor de aplicativos para chamar o método de fechamento explicitamente no contexto de aplicativos.
- WeakReferenceMonitor
O Spring Framework fornece classes de conveniência para desenvolvimento simplificado de componentes EJB. Porém, essas classes de conveniência produzem um encadeamento não gerenciado que o objeto WeakReferenceMonitor usa para limpeza.
Conjunto de Encadeamentos
O WebSphere Application Server suporta o uso da classe WorkManagerTaskExecutor do Spring Framework para executar o trabalho assincronicamente.
A classe WorkManagerTaskExecutor usa conjuntos de encadeamentos que são gerenciados pelo servidor de aplicativos, e delega a uma instância WorkManager configurada. Para obter informações sobre a configuração de um gerenciador de trabalho, consulte os tópicos relacionados.
Não use outras classes TaskExecutor que são fornecidas com o Spring Framework, porque elas podem iniciar encadeamentos não gerenciados.
<bean id="myTaskExecutor"
class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
<property name="workManagerName" value="wm/default" />
</bean>
Planejamento
É possível usar o pacote de planejamento CommonJ WorkManager no Spring Framework para trabalhar com encadeamentos que são gerenciados pelo servidor de aplicativos. Evite usar outros pacotes, como o planejador Quartz, ou o Timer no Java SE Development Kit (JDK), porque eles podem iniciar encadeamentos não gerenciados.