2011-02-02 15 views
22

No estoy familiarizado con Hibernate y acabo de empezar a trabajar en una aplicación web que la usa con una base de datos MySQL. Observé que el community documentation tutorial indica:Hibernate: ¿Cuál es el grupo de conexiones y por qué el predeterminado no es apto para la producción?

El conjunto de conexiones de Hibernate incorporado no está destinado en modo alguno a producción. Carece de varias funciones que se encuentran en cualquier grupo de conexión decente.

¿Alguien puede dar más detalles sobre esto? ¿Qué es exactamente lo que falta y cuáles son los problemas que las personas tienen con el 'predeterminado'? En google encontré un sitio web here pero realmente no explica los problemas, solo lo que debería estar usando en su lugar.

Respuesta

35

¿Cuál es el grupo de conexiones y por qué el predeterminado es inadecuado para la producción? ¿Puede alguien dar más detalles sobre esto?

La agrupación de conexiones es una técnica para abrir/preparar/cerrar conexiones. Un mecanismo de agrupación de conexiones es una pieza de software (componente) a la que delega la función de gestión de conexiones. Su aplicación solo pedirá una conexión, la usará y la devolverá al grupo. El componente es responsable de abrir N conexiones y dejarlas listas para cuando su aplicación lo solicite. Si una conexión está obsoleta, el mecanismo de agrupamiento la cerraría y reabriría una nueva. Esto representa un mejor uso de las conexiones, ya que no necesita esperar a que se establezca la conexión durante la ejecución real de su código y no tiene que preocuparse por las conexiones obsoletas.

Hibernate realmente no envía ningún mecanismo de agrupamiento de conexión real. Proporciona un administrador de conexión interno, que es muy rudimentario. La razón es simple: casi (si no todos) los Servidores de aplicaciones (como JBoss AS) y los Contenedores de servlets (como Tomcat) proporcionan un mecanismo de agrupación de conexiones por defecto. Por lo tanto, su aplicación no tiene que preocuparse por los detalles al respecto. Simplemente le pide al AS una conexión.

En mi opinión, sólo hay dos casos en los que usted necesita preocuparse acerca de agrupación de conexiones:

  1. Que se trata de una aplicación independiente (que no se ejecuta dentro de un contenedor)
  2. Estás realmente experto en la agrupación de conexiones y ninguno de los existentes se adapta a sus necesidades.

Pero en mi experiencia, la mayoría de la gente que utiliza una agrupación de conexiones "externo" lo hacen por falta de conocimiento acerca de la agrupación de conexiones y la falta de conocimiento acerca de su contenedor.

+1

@ jpkrohling, Excelente explicación :-) –

-5

El grupo de conexiones predeterminado en hibernación es c3p0 con el nombre del personaje de star wars. Pero hibernate también admite proxool y también se usa para anunciar apache dbcp. Durante un tiempo DBCP estuvo inactivo y cayó en desgracia.

C3P0 se utiliza en la producción en muchos proyectos. Aunque a veces se encuentra que se comporta mal en el momento pico. Hay varias alternativas. Como, por ejemplo, el nuevo conjunto de conexiones incluido en Tomcat 7. No lo he probado todavía, pero escuché algunas reacciones positivas al respecto.

+0

Gracias por su respuesta, es la 'comunidad documentación 'desactualizado entonces? – Kryptic

+0

No, no lo creo. Parece que el problema tiene más que ver con la inercia de la comunidad. Desde 3.3 (2008) C3P0 está desacoplado de la hibernación (la clase de proveedor C3P0ConnectionProvider se movió fuera de la jarra central) y parece que los desarrolladores intentan hacer que el uso de c3p0 sea menos directo pero que la comunidad siempre regresa a sus viejos hábitos. –

+0

¿Tiene alguna referencia que respalde su afirmación de que el conjunto de conexiones predeterminado en Hibernate es c3p0? –

0

Cuando se trata de una aplicación independiente, hay un par de gestores de agrupación que Hibernate no ha mantenido. Hibernate nunca favoreció uno explícito.Con el paso de los años, muchos han venido y se han desvanecido nuevamente. Es realmente difícil juzgar al final cuáles son los mejores. Es bueno verificar y comparar por sí mismo los proyectos y qué tan activos son todavía.

Estas son algunas recomendaciones recientes (2017) de agrupación de aplicaciones independientes en orden alfabético:

C3P0 http://www.mchange.com/projects/c3p0/

Hikari https://github.com/brettwooldridge/HikariCP

Vibur http://www.vibur.org/

+0

Un enlace a una solución es bienvenido, pero asegúrese de que su respuesta sea útil sin él: [agregue contexto alrededor del enlace] (/ /meta.stackexchange.com/a/8259) para que los demás usuarios tengan una idea de qué es y por qué está allí, luego cite la parte más relevante de la página a la que está vinculando en caso de que la página de destino no esté disponible. [Las respuestas que son poco más que un enlace se pueden eliminar.] (// stackoverflow.com/help/deleted-answers) –

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ crítica/mensajes de baja calidad/17611635) – glennsl

+0

Hola, policía, mi respuesta es simplemente una ayuda para las personas que entran aquí. Es bastante difícil decir qué agrupación de conexiones es la adecuada. Así que trato de ser lo más neutral posible. Por supuesto, usted podría rechazar, pero esto no es Wikipedia aquí, es una opinión segura, pero ningún buscador morirá simplemente al tener una respuesta aquí con algunos enlaces. Entonces, por favor, trata de no ser tan grosero. – Thomas

Cuestiones relacionadas