Configuración de las instancias ManagedExecutorService

Puede configurar las instancias ManagedExecutorService para que ejecuten tareas asíncronas con el contexto de hebra especificado. Es aconsejable impedir que las aplicaciones Java™ EE gestionen directamente sus propias hebras; por lo tanto, ManagedExecutorService amplía el servicio JSE ExecutorService para ofrecer un modo de iniciar tareas asíncronas dentro de un entorno de servidor de aplicaciones. También puede configurar ManagedExecutorService de modo que propague distintos contextos de hebras relevantes para las aplicaciones Java EE a la hebra de la tarea asíncrona.

Acerca de esta tarea

ManagedExecutorService está disponible en la característica <concurrent-1.0> y se habilita en el archivo server.xml como se indica a continuación:
<featureManager>
		<feature>concurrent-1.0</feature>
</featureManager>

El servicio del contexto gestiona la propagación de contexto a la hebra de un tarea ejecutada mediante ManagedExecutorService. El servidor crea una instancia predeterminada del servicio del contexto (DefaultContextService) y se configura para propagar al menos classloaderContext, jeeMetadataContext y securityContext. Se utiliza esta instancia de servicio del contexto predeterminado si se crea un ManagedExecutorService sin hacer referencia a una instancia de servicio del contexto específica o se configura una instancia de servicio de contexto directamente dentro de ésta. Consulte el tema sobre la configuración de instancias de servicio de contexto de hebra para obtener más información.

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.

Atención: Una limitación actual en Alfa es que las tareas podrían no ejecutarse hasta que se invoque Future.get.

Procedimiento

Configuración de ejemplo del archivo server.xml:

Ejemplo

Las instancias de servicio ejecutor gestionado se pueden introducir en los componentes de la aplicación (mediante @Resource) o se pueden consultar 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 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 <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:
    ExecutorService execSvc2 = 
        (ExecutorService) new InitialContext().lookup("java:comp/env/concurrent/execSvc2");
    
    futures = execSvc2.invokeAll(Arrays.asList(task1, task2, task3));
  • Ejemplo de búsqueda que utiliza una referencia de entorno de recursos y se transforma en 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

Términos y condiciones para centros de información | Comentarios


Icono de indicación de fecha y hora Última actualización: 15 de junio de 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_config_managedexecutor
Nombre de archivo:twlp_config_managedexecutor.html