Agrgando un recurso Factory mediante ObjectFactory

jose_pacheco
23 de Marzo del 2005
Estoy trabajando con tomcat5.5.7 y oracle 9i como base de datos. Ya cree el pool conexiones de la aplicacion. configurando el archivo en la ruta tomcat_home/conf/Catalina/localhost/sappie.xml (en mi caso), y funciona de maravilla y le agregue un configuracion de un javaBean(Mostrado enl al segunda etiqueta Resource.
Archivo sappie.xml
--------------------------------------
<Context crossContext="true" debug="5" docBase="sappie" path="/webapps" reloadable="true">

<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_/sappie_log."
suffix=".txt"
timestamp="true"/>

<!-- Configuracion del poool de conexiones -->
<Resource name="jdbc/sappie"
auth="Container"
type="javax.sql.DataSource"
username="ivss_sappie"
password="sappie"
driverClassName="oracle.jdbc.driver.OracleDriver"
maxIdle="5"
maxWait="5000"
url="jdbc:oracle:thin:@10.1.192.5:1521:desa1"
maxActive="20"
removeAbandoned="true"
removeAbandonedTimeout="9000"
logAbandoned="true" />

<!-- Configuracion de los objetos factory de la aplicacion -->
<!-- datosUsuarioBean -->
<Resource name="bean/datosUsuarioBeanFactory"
auth="Container"
type="sappie.seguridad.datosUsuarioBean"
factory="org.apache.naming.factory.BeanFactory"/>

<ResourceParams name="bean/datosUsuarioBeanFactory">
<parameter>
<name>factory</name>
<value>org.apache.naming.factory.BeanFactory</value>
</parameter>
</ResourceParams>
</Context>
------------------------------------
Ademas se configuro en el web.xml de la aplicacion
web.xml
-----------------------------------
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_2.dtd">
<web-app>
<!--Definicion de los servlets -->
......
.....
<!-- Configuracion del poool de conexiones -->
<resource-ref>
<res-ref-name>jdbc/sappie</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

<!-- Configuracion de los bean de la aplicacion -->

<!-- Bean datosUsuario -->
<resource-env-ref>
<description>
Objeto factory para las instancias datosUsuarioBean
</description>
<resource-env-ref-name>
bean/datosUsuarioBeanFactory
</resource-env-ref-name>
<resource-env-ref-type>
sappie.seguridad.datosUsuarioBean
</resource-env-ref-type>
</resource-env-ref>
</web-app>
-------------------------------
Se creo una clase factory implementando ObjectFactory que hace referencia al bean.
------------------------------
import java.util.*;
import javax.naming.*;
import javax.naming.spi.*;

public class datosUsuarioBeanFactory implements ObjectFactory{

public Object getObjectInstance(Object obj,Name name,Context contx,Hashtable env)
throws NamingException{

//instancio el bean
datosUsuarioBean bean = new datosUsuarioBean();
List valor = (ArrayList) obj;

//Cargo el bean
int i = 0;
try{
bean.setLoginUsr(String.valueOf(valor.get(i)));
System.out.println("LOGIN SETEADO " + valor.get(i));
}catch(IndexOutOfBoundsException ex){
System.out.println("ERROR SETEANDO LOGIN: " + ex.getMessage());
}
................
...............
System.out.println("Bean cargado");

return bean;
}
}
Clase bean
import java.io.*;

public class datosUsuarioBean implements Serializable{

private String loginUsr;
private String claveUsr;
private String navegador;
private String nombreUsr;
private String nombreCajaReg;
private String fechaCambio;
private int codigoPerfil;

/**
* @OBJETIVO: Setear o almacenar el login del usuario
*/

public void setLoginUsr(String loginUsr){
this.loginUsr = loginUsr;
}

/**
* @OBJETIVO: Devolver el login del usuario
* @return Capturar el login del usuario
*/

public String getLoginUsr() {
return loginUsr;
}
.................
...............
}
Estas clases se colocaron en el TOMCAT_HOME/common/classes y TOMCAT_HOME/common/lib

Esta documentacion fue extraida fielmente de la gente de jakarta-tomcat en la siguiente url: http://jakarta.apache-korea.org/tomcat/tomcat-5.0-doc/jndi-resources-howto.html

El problema es que cuando trato de recuperar los valores del bean, no se puede. Todos los valore los trae null, pareciera que no hace referencia al bean que fue seteado. el siguiente es el codigo para accesar al bean
...
..
..
try{
Context initcontx = new InitialContext();
Context contx = (Context) initcontx.lookup("java:comp/env");
datosUsuarioBean bean = (datosUsuarioBean) contx.lookup("bean/datosUsuarioBeanFactory");

System.out.println("Valor del bean: " + bean);

navegador = bean.getNavegador();
nombre_usr = bean.getNombreUsr();
nombre_caja_reg = bean.getNombreCajaReg();
login_usr = bean.getLoginUsr();
password = bean.getClaveUsr();
}catch(NamingException ex){
System.out.println("ERROR creando el bean: ");
throw new ServletException("No puede recuperar java:comp/env/bean/datosUsuarioBeanFactory",ex);
}
..
..
..
Gracias por su ayuda. Espero puedan ayudarme