Acceso a datos

6 views
Skip to first unread message

J. Raúl Uribe Sanchez

unread,
Dec 15, 2014, 4:49:38 PM12/15/14
to for...@googlegroups.com
Que tal buenas tardes, tengo el siguiente tema:

Tengo dos aplicaciones por separado (web y mobile) que usan el mismo proyecto de negocio y el mismo de acceso a datos, montados por separado cada uno en un tomcat diferente, la razón del problema es que consume muchas conexiones (uso spring 3 y hibernate) alguien sabe como puedo ir liberando éstas conexiones, les dejo mi applicationContext y la configuración de mi DataSource

  • Recurso en Tomcat
<Resource name="jdbc/connectionDB" auth="Container"
        type="javax.sql.DataSource"
        username="root"
        password="admin"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/base?autoReconnect=true"
        maxActive="35"
        maxIdle="5"
        maxWait="10000"
        removeAbandoned="true"
        removeAbandonedTimeout="60"
        logAbandoned="true"/>


  • Application Context
<context:component-scan base-package="mx.com.paquetes.integracion" />
<bean id="datasource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/connectionDB"></property>
<property name="lookupOnStartup" value="false"></property>
<property name="cache" value="true"></property>
<property name="proxyInterface" value="javax.sql.DataSource"></property>
</bean>

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- packagesToScan inyecta todos los beans @Entity del paquete -->
<property name="packagesToScan" value="mx.com.paquete.entidades" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.use_outer_join">true</prop>
<prop key="hibernate.max_fetch_depth">1</prop>
<prop key="hibernate.jdbc.batch_size">0</prop>
<prop key="hibernate.hbm2ddl.auto">validate</prop>
<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
</props>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />


Domingo Suárez Torres

unread,
Dec 15, 2014, 7:04:33 PM12/15/14
to for...@googlegroups.com
Muchas veces no se liberan las conexiones porque no esta bien delimitado el acceso transaccional.

Asegurate que el código que usa las conexiones este bien definida las reglas de transacciones.





--
Has recibido este mensaje porque estás suscrito al grupo "foro-sh" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a foro-sh+u...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a for...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/foro-sh.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

SAYEGH, Leandro Hernán

unread,
Dec 15, 2014, 11:50:43 PM12/15/14
to for...@googlegroups.com
Raúl, como estas?

Eso se puede deber principalmente a 3 cosas:

1- No se cierran correctamente las conexiones.

2- Las transacciones están definidas en un contexto muy amplio, por lo tanto la conexión permanece idle por  mucho tiempo mientras se realizan otras operaciones de cálculo, pero para el pool el recurso esta ocupado a pesar que no se utiliza.

3- Se ejecutan muchas consultas o hay consultas que tardan mucho y por permanecen ocupadas las conexiones y se empiezan a crear nuevas para poder cumplir con las solicitudes.


Para saber bien donde esta el problema lo que yo haría sería:

I- Como tenes activo que el pool libera las conexiones después que pasen 1 minuto sin actividad,  verificaría el log del tomcat para ver si hay alguna excepción de este tipo. Si es así, ya podes identificar en donde tenes el problema y el mismo puede ser por 1 o por 2.

II- Si no hay excepciones, entonces bajaría el tiempo de 60 segundos a 10 o 15. Si empiezan a saltar excepciones entonces el problema que tenes es del tipo 2 y en la excepción te indica el sector de código con problemas.

III - Si no detectas nada con los puntos I y II ya tendrías que analizar la lógica de negocio.

Espero que estos tips te ayuden a resolver tu problema.

Saludos


-----------------------------------------
 SAYEGH, Leandro Hernán
    lhsa...@gmail.com

Reply all
Reply to author
Forward
0 new messages