Programación en castellano
Inicio > Foros > Servidores de Aplicaciones J2EE > Problema con Spring
-Foros de debate

Servidores de Aplicaciones J2EE
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

Problema con Spring
Enviado por Al el día 18 de abril de 2008

Hola,
Estoy desarrollando una aplicación con jsf, spring 2.5.3 e iBATIS y tengo el siguiente problema. El cliente ha solicitado que cada vez que se solicite una conexión al pool se lance automáticamente un "ALTER SESSION" y una "INSERT"sobre la conexión.
Como la gestión de las transacciones esta delegada en Spring mediante la clase "org.springframework.transaction.interceptor.TransactionProxyFactoryBean" lo que he hecho es extender la clase que implementa el bean "datasource" y sobreescribir el método getConnection() en la nueva clase.
De esta forma puedo lanzar automaticamente el "ALTER SESSION" cada vez que spring solicita una conexión, pero para lanzar el insert necesito conocer un parametro (concretamente el nombre del usuario que se ha logeado), y no se como hacerselo llegar.

¿Algien me puede ayudar? A continuación coloco el código que tengo actualmente:

Ficheros configuración Spring:

/************************************************************/

<bean id="UsuarioManager" parent="baseTransactionProxy">
<property name="target">
<bean class="com.avan.ejemplo.negocio.UsuarioManagerImpl">
<property name="usuarioDAO" ref="usuarioDAO" />
</bean>
</property >
</bean>

<bean id="baseTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributeSource">
<bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
</property>
</bean>

<bean id="usuarioDAO" class="com.avan.ejemplo.dao.UsuarioDAOImpl" >
<property name="sqlMapClient" ref="sqlMapClient" />
</bean>

<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>
classpath:/sql-map-config.xml
</value>
</property>
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>

<bean id="dataSource" class="com.avan.ejemplo.ext.spring.MyBasicDataSource" destroy-method="close" >
<property name="driverClassName">
<value>${driver}</value>
</property>
<property name="url">
<value>${url}</value>
</property>
<property name="username">
<value>${username}</value>
</property>
<property name="password">
<value>${password}</value>
</property>
<property name="maxActive">
<value>${maxActive}</value>
</property>
<property name="maxWait">
<value>${maxWait}</value>
</property>
<property name="defaultReadOnly">
<value>${defaultReadOnly}</value>
</property>
<property name="validationQuery">
<value>${validationQuery}</value>
</property>
</bean>

/************************************************************/

Y la clase que he sobreescrito es:

package com.avan.ejemplo.ext.spring;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;

public class MyBasicDataSource extends BasicDataSource {

public MyBasicDataSource() {
// TODO Auto-generated constructor stub
super();
}


@Override
public Connection getConnection() throws SQLException {

Connection conn = super.getConnection();

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO CONEXION (USUSARIO) VALUES (?)");

//AQUI ES DONDE TENGO QUE PONER EL PARAMETRO QUE CONTENGA EL VALOR DEL USUARIO,
//PERO NO SE COMO HACERLO LLEGAR HASTA AQUI
pstmt.setString(1, "USUARIO");

pstmt.execute();
System.out.println("*******************Ejecuta MyBasicDataSource.getConnection");
return conn;
}


}

/************************************************************/

La clase que a la que se ha aplicado aop para la gestion transaccional en la capa de logica de negocio es:

package com.avan.ejemplo.negocio;

import java.util.List;

import com.avan.ejemplo.dao.UsuarioDAO;
import com.avan.ejemplo.domain.UsuarioExample;


public class UsuarioManagerImpl implements com.avan.ejemplo.negocio.UsuarioManager {

private UsuarioDAO usuarioDAO;

public UsuarioDAO getUsuarioDAO() {
return usuarioDAO;
}

public void setUsuarioDAO(UsuarioDAO usuarioDAO) {
this.usuarioDAO = usuarioDAO;
}

public List obtenerListaUsuarios() {

UsuarioExample example = new UsuarioExample();
//Invoca al metodo del DAO que devuelve una lista de usuarios
return usuarioDAO.selectByExample(example);
}


}

/************************************************************/

Y la llamada a la capa de logica de negocio queda algo así:



UsuarioManager usuarioManager = (UsuarioManager)applicationContext.getBean("UsuarioManager");

List listaUsuario = usuarioManager.obtenerListaUsuarios();

/************************************************************/

Pues eso es todo, saludos

 

Tienda
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados