Tengo un problema enorme con estos codigos, como veran es un supuesto pool de conexiones. El primer codigo es el que conecta la base de datos y el que tiene los contexts en su webxml, porque la clase poolBaseDatos esta en una carpeta diferente a la carpeta donde estan los servlets..., cada servlet llama al pool para hacer su conexion a la bd.
Lo cierto del caso es que cuando se tiene que conectar dice "Base_Datos no esta asociado a este contexto"
porque sera esto?
aqui tienen todo el codigo, primero el pool y despues los demas, mirenlos y diganme que les parece.:
DICE PHP PORQUE UTILICE ESA ETIQUETA PARA HACER QUE SALGA EL CODIGO CON COLORES Y ORDENADO, PERO ESTO ES JAVA
Código PHP:
package XAlX;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
public final class poolBaseDatos
{
int codError = 0;
String mensajeError = "";
Statement st=null;
Connection connection = null;
public poolBaseDatos()
{
try{
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("base_datos");
DataSource ds = (DataSource)envContext.lookup("base_datos");
synchronized (ds)
{
connection = ds.getConnection(); // cogemos la conexion
}
//connection.setAutoCommit(false);
}catch(Exception e) {
System.out.println("Catch del conector a la bd");
System.out.println(e.getMessage());
}
}
public boolean doCommit()
{
// clearError();
try
{
connection.commit();
st.close();
System.out.println("connection commit");
}
catch(Exception e)
{
// Log.error(e);
System.out.println("Catch del docommit");
mensajeError = e.toString();
codError = 1;
return false;
}
return true;
}
public boolean doRollback()
{
// clearError();
try
{
st.close();
connection.rollback();
connection.close();
System.out.println("conecction roll back");
}
catch(Exception e)
{
// Log.error(e);
System.out.println("Catch del dorollback");
System.out.println(e.getMessage());
codError = 1;
return false;
}
return true;
}
public ResultSet doSelect(String sql)
{
ResultSet rs=null;
// clearError();
try
{
st = connection.createStatement();
rs = st.executeQuery(sql);
System.out.println("Creando la conexion");
}
catch(Exception e)
{
System.out.println("Catch del doselect en el pool...");
System.out.println(e.getMessage());
codError = 1;
}
return rs;
}
}
Código PHP:
conn = new poolBaseDatos();
String valor;
int codigo, codpades;
try{
SQL="SELECT codigo from Pais WHERE descripcion='";
SQL+=xpais;
SQL+="'";
ResultSet rs1;
rs1 = conn.doSelect(SQL);
if (rs1.next()){
codpades = (rs1.getInt("codigopais"));
do{
SQL = "SELECT ";
SQL+=column1;
SQL+=",";
SQL+=column2;
SQL+=" FROM ";
SQL+=table;
SQL+=" WHERE CodPais='";
SQL+=codpades;
SQL+="'";
SQL+=" ORDER By ";
SQL+=column2;
ResultSet rs;
rs = conn.doSelect(SQL);
if (rs.next()){
combo = "";
do{
codigo = (rs.getInt(column1));
valor = (rs.getString(column2));
combo += "<option> ";
combo += valor;
combo += "</option>\n";
}while(rs.next());
}
}while(rs1.next());
}
conn.doRollback();
return 0;
}catch (Exception e){
System.out.println("Se produjo un error creando la sentencia SQL del Combo");
System.out.println(e.getMessage());
return -2;
}
Código PHP:
<Context path="/poolBaseDatos" docBase="poolBaseDatos"
debug="5" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_DBTest_log." suffix=".txt"
timestamp="true"/>
<Resource name="Base_Datos"
auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="Base_Datos">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>sun.jdbc.odbc.JdbcOdbcDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:odbc:Base_Datos</value>
</parameter>
<parameter>
<name>username</name>
<value>dba</value>
</parameter>
<parameter>
<name>password</name>
<value>sql</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<!-- Maximum number of idle dB connections to retain in pool.
Set to 0 for no limit.
-->
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResourceParams>
</Context>
Código PHP:
<resource-ref>
<description>pool base datos test</description>
<res-ref-name>jdbc:odbc:ciis_libertador</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
MUCHISIMAS GRACIAS!!!!!