2012-10-04 16 views
20

Estoy investigando si Javamail es seguro para los hilos, en particular en una situación con muchas sesiones correspondientes a diferentes usuarios, varios servidores SMTP y el uso de la creación de mensajes MIME y el uso del método transport.sendMessage. Sé que Javamail está orientado hacia el uso de computadoras de escritorio, lo que me hace sospechar que puede que no se haya construido teniendo en cuenta el enrutamiento, y me pregunto si alguien tiene esa experiencia.Threadsafety en Javamail

Respuesta

53

Es cierto que las reglas de seguridad de subprocesos para JavaMail no están bien documentadas, pero es de esperar que coincidan en su mayoría con lo que cabría esperar.

Varios hilos pueden usar una Sesión.

Dado que un transporte representa una conexión a un servidor de correo, y solo un hilo puede usar la conexión a la vez, un transporte sincronizará el acceso desde múltiples hilos para mantener la seguridad del hilo, pero realmente solo querrá usar desde un solo hilo.

De forma similar, un Almacén puede ser utilizado por varios hilos, pero el acceso a la conexión subyacente se sincronizará y rosca única.

Un mensaje solo debe modificarse con un solo subproceso a la vez, pero varios subprocesos deberían poder leer un mensaje de forma segura (aunque no está claro por qué querría hacer eso).

Espero que ayude ...

+0

¿Aprendió esto del javadoc, las fuentes, de la experiencia? – ewernli

+32

Escribí gran parte del código y lo mantengo todo. –

+2

¡Felicitaciones! Como no había referencias que respaldaran tus explicaciones, me preguntaba cómo podrías ser tan asertivo. Ahora entiendo;) ¡Claramente, +1! – ewernli

1

Los subprocesos de distribuidor JavaMail no parece que el tiempo de espera si el servidor no responde en el tiempo. esto lleva a bloquear todos los hilos disponibles.

Probó este comportamiento con 1.4.3 & 1.4.5.

Cuestiones relacionadas