Configuración de ejecutores gestionados

Puede configurar instancias de ManagedExecutorService para que ejecuten tareas asíncronas con el contexto de hebra especificado. Es una práctica recomendada para las aplicaciones Java™ EE evitar la gestión directa de sus propias hebras; por lo tanto, el ManagedExecutorService amplía el JSE ExecutorService para proporcionar una forma para iniciar tareas asíncronas dentro de un entorno de servidor de aplicaciones. También podría configurar el ManagedExecutorService para propagar distintos contextos de hebra que son relevantes para las aplicaciones Java EE en la hebra de la tarea asíncrona.

Acerca de esta tarea

Importante: En Liberty, los ejecutores gestionados no tienen sus propias agrupaciones de hebras. Las tareas enviadas al ejecutor gestionado se ejecutan en la agrupación de hebras del ejecutor Liberty común.
El ManagedExecutorService está disponible en la característica <concurrent-1.0> y habilitado en el archivo server.xml del modo siguiente:
<featureManager>
	<feature>concurrent-1.0</feature>
</featureManager>

El servicio de contexto gestiona la propagación del contexto en la hebra de una tarea que se ejecuta mediante ManagedExecutorService. El servidor crea una instancia predeterminada del servicio del contexto (DefaultContextService) y se configura para propagar al menos classloaderContext, jeeMetadataContext y securityContext. Esta instancia de servicio de contexto predeterminado se utiliza si se crea un ManagedExecutorService sin hacer referencia a una instancia de servicio de contexto específica o sin configurar una instancia de servicio de contexto directamente en el mismo. Para obtener más información sobre las instancias de servicio de contexto, consulte el tema sobre la configuración de instancias de servicio de contexto de hebra.

Pasa a estar disponible una instancia de ejecutor gestionado predeterminado (DefaultManagedExecutorService) como java:comp/DefaultManagedExecutorService y utiliza la instancia de servicio de contexto predeterminado para la captura y propagación de contexto de hebra.

Procedimiento

Configuración de ejemplo del archivo server.xml:

Ejemplo

Las instancias de servicio del ejecutor gestionado se pueden inyectar en componentes de aplicación (utilizando @Resource) o se pueden buscar con referencias de entorno de recursos (resource-env-ref). Independientemente de cómo se obtenga la instancia, puede utilizarla de forma intercambiable como javax.enterprise.concurrent.ManagedExecutorService o como su superclase java.util.concurrent.ExecutorSerivce.

  • Ejemplo que busca el ejecutor gestionado predeterminado:
    ManagedExecutorService executor = 
        (ManagedExecutorService) new InitialContext().lookup(
            "java:comp/DefaultManagedExecutorService");
    executor.submit(doSomethingInParallel);
  • Ejemplo que utiliza @Resource para inyectarse como java.util.concurrent.ExecutorService:
    @Resource(lookup="concurrent/execSvc1")
    ExecutorService execSvc1;
    
    ...
    
    // enviar la tarea a ejecución 
    Future<Integer> future1 = execSvc1.submit(new Callable<Integer>() { 
    	public Integer call() throws Exception { 
    	  // es posible la búsqueda java:comp porque está configurado <jeeMetadataContext> 
    		DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/ds1");
    		... realizar actualizaciones en la base de datos 
    		return updateCount; 
    	} 
    });  
    Future<Integer> future2 = execSvc1.submit(anotherTaskThatUpdatesADatabase);  
    
    numUpdatesCompleted = future1.get() + future2.get();
  • Ejemplo que utiliza @Resource para inyectarse como javax.enterprise.concurrent.ManagedExecutorService:
    @Resource(lookup="concurrent/execSvc1")
    ManagedExecutorService execSvc1;
    
    ...
    
    // enviar la tarea a ejecución 
    Future<Integer> future1 = execSvc1.submit(new Callable<Integer>() { 
    	public Integer call() throws Exception { 
    	  // es posible la búsqueda java:comp porque está configurado <jeeMetadataContext> 
    		DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/ds1");
    		... realizar actualizaciones en la base de datos 
    		return updateCount; 
    	} 
    });  
    Future<Integer> future2 = execSvc1.submit(anotherTaskThatUpdatesADatabase);  
    
    numUpdatesCompleted = future1.get() + future2.get();
  • Ejemplo de <resource-env-ref> para java.util.concurrent.ExecutorService en el archivo web.xml:
    <resource-env-ref>
    	<resource-env-ref-name>concurrent/execSvc2</resource-env-ref-name>
    	<resource-env-ref-type>java.util.concurrent.ExecutorService</resource-env-ref-type>
    </resource-env-ref>
  • Ejemplo de búsqueda que utiliza una referencia de entorno de recursos:
    ExecutorService execSvc2 = 
        (ExecutorService) new InitialContext().lookup("java:comp/env/concurrent/execSvc2");
    
    futures = execSvc2.invokeAll(Arrays.asList(task1, task2, task3));
  • Ejemplo de <resource-env-ref> para javax.enterprise.concurrent.ManagedExecutorService en el archivo web.xml:
    <resource-env-ref>
    	<resource-env-ref-name>concurrent/execSvc2</resource-env-ref-name>
    	<resource-env-ref-type>javax.enterprise.concurrent.ManagedExecutorService</resource-env-ref-type>
    </resource-env-ref>
  • Ejemplo de búsqueda que utiliza una referencia de entorno de recursos y se convierte a ManagedExecutorService:
    ManagedExecutorService execSvc2 = 
        (ManagedExecutorService) new InitialContext().lookup("java:comp/env/concurrent/execSvc2");
    
    futures = execSvc2.invokeAll(Arrays.asList(task1, task2, task3));

Icono que indica el tipo de tema Tema de tarea



Icono de indicación de fecha y hora Última actualización: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=twlp_config_managedexecutor
Nombre de archivo:twlp_config_managedexecutor.html