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

Não use um cenário que possa criar encadeamentos não gerenciados, pelas seguintes razões:
  • O servidor de aplicativos não reconhece encadeamentos não gerenciados.
  • Os 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.
Os seguintes cenários são exemplos de cenários do Spring Framework a serem evitados:
  • registerShutdownHook

    Evite usar a classe AbstractApplicationContext do Spring Framework e suas subclasses. Essas classes incluem o método público registerShutdownHook,, que cria um thread e o registra na máquina virtual Java ( JVM ) para ser executado no desligamento, a fim de fechar o contexto do aplicativo. 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

WebSphere® Application Server suporta o uso da classe Spring Framework WorkManagerTaskExecutor para executar trabalhos de forma assíncrona.

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.

Você pode usar o nome Java Naming and Directory Interface (JNDI) do gerenciador de trabalho configurado como uma propriedade workManagerName para definir uma instância WorkManagerTaskExecutor no arquivo de configuração Spring. O exemplo a seguir usa o nome JNDI do DefaultWorkManager no servidor de aplicativos, isto é, wm/default:
<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 do Quartz ou o Cronômetro no Java SE Development Kit (JDK), porque eles podem iniciar encadeamentos não gerenciados.