Plataforma Java, Edición Enterprise: ¿Qué se entiende por ‘agrupación de conexiones’ y ‘patrón de diseño de fábrica DAO’ en Java?

Excelente pregunta

Ambos están relacionados con mecanismos de persistencia. Esa es la única similitud.

En el gran tema de las cosas en Java, hay una pila de software para acceder a los datos en las bases de datos.

Primero, hay controladores escritos por proveedores de motores de bases de datos, para acceder desde diferentes idiomas. Esto no debería ser necesario porque SQL es un estándar, pero todos los proveedores de motores de bases de datos implementan solo el 98% del estándar y agregan algunas sugerencias especiales que solo ellos tienen … así que si usas ese azúcar especial, obtienen el bloqueo del proveedor y ganan dinero , porque no puede cambiar fácilmente de proveedor.

Los controladores en Java están escritos de acuerdo con la especificación JDBC. La especificación JDBC refleja la especificación ODBC, que era el estándar de facto antes de que se creara Java.

JDBC es realmente inteligente. Cuenta con 4 niveles. El primer nivel es cuando JDBC llama a ODBC. ODBC era especial porque permitía que cualquier idioma usara el mismo controlador … Antes de instalar ODBC para instalar los controladores a medida que instalaba Word o Excel, ejecute un programa que requiere mucho tiempo y que incluso requería arrancar la computadora.

Entonces, el nivel 1 de JDBC fue muy bueno. La especificación mencionó 4 niveles, el nivel 4 era un controlador escrito en Java puro. Solo un archivo jar. La sorpresa fue que el nivel 4 fue mucho más rápido que los otros 3 niveles. Entonces la gente usa el nivel 4 exclusivamente hoy en día.

Ok, todavía no he respondido nada en tu pregunta.

Resulta que los programadores pueden escribir grupos. Un grupo es simplemente una matriz de objetos. Tiene una API para obtener y objetar y liberar el objeto.

Algo como:

clase MyPool {
matriz de objetos privados [];
Objeto público adquirir () {…}
lanzamiento público (Objeto ob) {…}
}

La idea es que crear conexiones a la base de datos es costoso, por lo que puede crear 10 conexiones y mantenerlas vivas durante la aplicación. Esto no tiene sentido en el código del cliente, pero tiene mucho sentido en el código del servidor. Y Java se usa principalmente en el código del servidor.

Finalmente, el controlador JDBC mismo administró el grupo de conexiones sin que tenga que darse cuenta de ello. Cuando abre una conexión, simplemente le proporciona una de las conexiones gratuitas y creadas actualmente. Y cuando cierra la conexión, simplemente la vuelve a colocar en el grupo. ¡Excelente! ¿No es así?

Ok, eventualmente la gente comenzó a usar el estándar J2EE además de todo eso. Tenía grupos de conexión definidos en el servidor de aplicaciones. Y además de eso, podría enviar SQL a través de esas conexiones. J2EE definió algunos Java Beans Enterprise (EJB) que permitieron acceder a la base de datos: EJB de entidad. Fue un desastre. Incómodo de crear. Es engorroso trabajar con él.

Finalmente, la gente comenzó a usar Hibernate como un reemplazo para los EJB de Entity. Hibernate tenía todo lo que proporcionaban los EJB de la entidad y más. Hibernate se basó en el patrón DAO.

El patrón DAO se basa en la idea de que los objetos persistentes necesitan saber cómo persistir. Básicamente, para cada objeto X persistente, debe crear un XDAO que sepa exactamente cómo persistir el objeto. En Hibernate, incluso escribe el SQL por ti.

Y si no sabe cómo crear el DAO para un objeto, Hibernate tiene herramientas para crear esos DAO por usted.

Digamos que desarrolla una aplicación multiproceso, por ejemplo, una aplicación web. Por lo general, hay muchos usuarios que usan esta aplicación al mismo tiempo. Normalmente, estos usuarios realizarán operaciones breves de la base de datos. El problema es que es muy costoso, computacionalmente hablando, crear conexiones de bases de datos. La solución al problema generalmente es crear un grupo de conexiones reutilizables con anticipación. Por lo general, el objeto Connection es administrado por un administrador de conexión y, por lo tanto, permanece semitransparente para su aplicación. Ese es el concepto de agrupación de conexiones.

El patrón de objeto de acceso a datos o el patrón DOA es un patrón de diseño utilizado para separar la API de operación de bajo nivel de la lógica empresarial de alto nivel. Puedes leer más sobre esto aquí: http://www.tutorialspoint.com/de

La agrupación de conexiones es el concepto en el que todos los detalles sobre cómo obtener una conexión de la base de datos se almacenan en una memoria caché para que cuando necesite la conectividad de la base de datos no necesite realizar todo el procedimiento de creación de objetos de conexión, carga de controladores específicos, etc.
DAO es un objeto que proporciona una interfaz para que pueda realizar algunas tareas en bases de datos ocultando los detalles de la base de datos.

Para aclarar todo, tendré que escribir un capítulo más o menos. Así que me centraré en aspectos importantes.
No ha usado ningún framework pero ha usado MVC. Mvc es un patrón de diseño. Tienes que usar cualquier marco para implementarlo. Por ejemplo, struts, spring, wicket, todos son marcos. Estos marcos facilitan la implementación de MVC. Entonces, si ha utilizado MVC, probablemente haya utilizado un marco.

Siguiente agrupación de conexiones. Suponga que tiene una aplicación multiproceso o que varios usuarios pueden acceder a su aplicación al mismo tiempo. Las solicitudes de los usuarios pueden generar llamadas a la base de datos. Cada llamada a la base de datos necesita una conexión. Entonces especifica un grupo de conexiones donde se encuentran todas sus conexiones. Cada vez que se requiere una conexión, se toma del grupo y luego se devuelve cuando finaliza su trabajo.

DAO factory es un patrón de diseño donde hay una fábrica (clase) que crea un objeto que accede a la base de datos. Hay mucho más que decir sobre esto, pero lo mantendré breve.

Probablemente podría leer sobre la agrupación de conexiones c3p0. También puede publicar su pregunta en stackoverflow.com o programmers.stackexchange.com para una discusión técnica detallada.

Antes de responder sobre la agrupación JDBC, permítame responder qué se entiende por el término “Agrupación de objetos”

Agrupación de objetos

La creación de objetos en Java es un proceso costoso en términos de rendimiento y memoria. También crear más objetos significa que el recolector de basura tiene que hacer más trabajo para eliminarlos después de nuestro uso. Normalmente tratamos de agrupar conexiones de bases de datos, subprocesos, sockets o cualquier otro objeto que pueda ser costoso de crear desde cero.

¿Por qué agrupar objetos de conexión JDBC?

  1. La sobrecarga de memoria y rendimiento de establecer una conexión de red e inicializar una sesión de conexión de base de datos en la base de datos de fondo es alta. Debido a que la inicialización de la sesión de conexión a menudo requiere un procesamiento lento para realizar la autenticación del usuario, establecer contextos transaccionales y establecer otros aspectos de la sesión que se requieren para el uso posterior de la base de datos.
  2. Si su aplicación se limita a usar JDBC genérico, incluso podría apuntarlo a la base de datos de un proveedor diferente sin cambiar ningún código

¿Cómo agrupar objetos de conexión JDBC?

  1. Si sus aplicaciones se ejecutan dentro de un servidor J2EE como tomcat, puede utilizar la capacidad de su servidor para agrupar conexiones jdbc. Como ejemplo para el servidor tomcat, configure los siguientes archivos xml,

    “C: \ apache-tomcat-6.0.26 \ conf \ Context.xml”

    web.xml


    DB Connection
    jdbc / TestDB
    javax.sql.DataSource
    Container
    Después de la configuración, puede realizar una búsqueda JNDI (nomenclatura Java e interfaz de directorio) para obtener un origen de datos para la conexión. Esta fuente de datos le proporcionará objetos de conexión.

    Contexto ctx = new InitialContext ();
    Contexto envContext = (Contexto) ctx.lookup (“java: comp / env”);
    DataSource ds = (DataSource) envContext.lookup (“jdbc / TestDB”);
    Conexión con = ds.getConnection ();
    Sentencia stmt = con.createStatement ();

2. Si está ejecutando una aplicación Java SE o no desea utilizar el mecanismo de agrupación del servidor J2EE, puede utilizar bibliotecas de agrupación de conexiones personalizadas como DBCP, C3P0 o HikariCp.

Nota adicional:
Mientras programamos, (deberíamos) cerrar la conexión del grupo jdbc dentro de un bloque finalmente. No cierra la conexión en lugar de, las conexiones se devolverán al grupo.

Referencias
1. Opciones de agrupación de conexiones con JDBC: DBCP vs C3P0
2. Agrupación de conexiones JDBC
3. Agrupación de conexiones
4. Cómo funciona la agrupación de conexiones en Java y JDBC
5. brettwooldridge / HikariCP
6. ¿Agrupación de conexiones en Java SE?
7. Java: ¿Compartir un grupo de conexiones entre otras aplicaciones J2SE …?
8. DBCP – Descripción general

Patrón de fábrica DAO

El patrón de fábrica de Dao es un patrón de diseño de fábrica utilizado para generar objetos de acceso a datos. Es tan simple como eso. DAO significa “Objeto de acceso a datos”. Es una clase basada en interfaz que maneja todas sus operaciones CRUD con una base de datos relacional para un objeto en particular. La clase de fábrica actúa como un “constructor virtual”. El método de creación devuelve un tipo de interfaz, pero puede pedirle que cree cualquier cantidad de implementaciones diferentes según sea necesario.

Referencia
1. ¿Qué es el patrón de fábrica de dao?

La agrupación de conexiones le permite reutilizar las conexiones del almacén de datos en lugar de crear nuevas todo el tiempo (una estrategia ineficiente).

“¿Debo implementar ambos en mi aplicación web J2EE?”

Muchos de los servidores de aplicaciones JAVA EE tienen agrupación de conexiones incorporada. En JBoss, es solo una configuración en el archivo de configuración. La información de conexión y agrupación de bases de datos se especifica dentro de la etiqueta “fuentes de datos”.

Si desea tener un mejor control sobre la agrupación, eche un vistazo a c3p0, Apache DHCP u Oracle UCP. ¡Buena suerte!

Quizás este artículo de Wikipedia sea útil: grupo de conexiones y también esto: objeto de acceso a datos

More Interesting

¿Qué es exactamente HTML5?

¿Qué es exactamente un IDE (entorno de desarrollo integrado)?

¿Por qué los ingenieros de software tienden a llegar a la oficina tan tarde? Muchos de ellos entran alrededor de las 11 a.m. o más tarde, luego trabajan más tarde por la noche.

¿Qué es la prueba de regresión? ¿Cuáles son algunos ejemplos?

Tengo que determinar en tiempo de ejecución si hemos recibido un objeto que representa una operend u operador. ¿Qué es un buen enfoque?

¿Hay algún lugar donde pueda publicar mis requisitos de una aplicación y obtener 1) asesoramiento 2) presupuesto 3) estimaciones de tiempo?

¿Cuáles son algunos de los mayores errores de ingeniería de software que ha cometido?

Cómo dividir tu tiempo entre trabajo y proyectos de código abierto

Mi compañía de software está destinada a grandes empresas, ya que necesita que 1000 personas trabajen allí para ser eficaz, ¿cómo conseguiría un cliente tan grande?

¿En qué situaciones sería una buena idea usar Redis sobre Memcached?

¿Dónde puedo encontrar información sobre la cantidad de ingenieros de software empleados a lo largo del tiempo en todo el mundo?

¿Cuánto combustible para aviones (y, por lo tanto, cuánto dinero y / o emisiones) se podría ahorrar con una optimización de las decenas de miles de pantallas que están incrustadas en los asientos de los aviones y permanecen encendidas, incluso sin tocarlas?

¿Cuáles son las herramientas para la colaboración de soporte técnico y desarrollo?

¿Qué haría si descubriera que el proyecto que inició para su cliente no puede hacerse técnicamente?

¿Por qué la gente ya no usa Visual Basic?