¿Se desaconseja utilizar flujos paralelos de Java 8 dentro de un contenedor Java EE?
java-ee ejb (2)
Dado que se desalientan los hilos de desove en contenedores Java EE . ¿Se desaconsejaría también el uso de las secuencias paralelas de Java 8 , que pueden engendrar hilos dentro de Java EE?
A heads-up, la graciosa degradación de un solo hilo no está disponible. También pensé que era por la respuesta de Shorn y por la discusión de la lista de correo, pero descubrí que no fue mientras investigaba para esta pregunta . El mecanismo no está en la especificación Java EE 7 y no está en glassfish 4.1. Incluso si lo hace otro contenedor, no será portátil.
Puede probar esto llamando al siguiente método:
@Singleton
public class SomeSingleton {
public void fireStream() {
IntStream.range(0, 32)
.parallel()
.mapToObj(i -> String.format("Task %d on thread %s",
i, Thread.currentThread().getName()))
.forEach(System.out::println);
}
}
Y obtendrás algo como:
Info: Task 20 on thread http-listener-1(4)
Info: Task 10 on thread ForkJoinPool.commonPool-worker-3
Info: Task 28 on thread ForkJoinPool.commonPool-worker-0
...
También he comprobado el código fuente Glassfish 4.1.1, y no hay un solo uso de ForkJoinPool
, ForkJoinWorkerThreadFactory
o ForkJoinWorkerThread
.
El mecanismo podría agregarse a EE 8, ya que muchos frameworks aprovecharán las características de jdk8, pero no sé si es parte de la especificación.
La forma en que lo leí de la mail.openjdk.java.net/pipermail/lambda-dev/2013-April/… mencionada en los comentarios: no se desalienta la manera en que se generan los hilos, pero no hará mucho por usted en un contexto Java EE.
De la discusión vinculada:
la gente de simultaneidad de Java EE ya había hablado de esto, y el resultado actual es que FJP se degradará graciosamente a la ejecución de un único subproceso (incluso al contexto de la llamada) cuando se ejecuta desde el contenedor EE.
De modo que puede usar secuencias en paralelo de forma segura en un procedimiento o biblioteca que se ejecuta en ambos contextos. Cuando se ejecuta en un entorno SE, lo hará con los chanchullos paralelos mágicos, pero cuando se ejecuta en un entorno EE degradará con gracia a la ejecución en serie.
Nota: la frase citada anteriormente es tiempo futuro: ¿alguien tiene una cita para una documentación definitiva?