APACHE SE MUERE CUANDO PASA UN TIEMPO LARGO
Publicado por Javier (2 intervenciones) el 23/11/2006 15:05:45
Hola,
Mi problema es que monto la aplicacion, funciona perfectamente, pero cuando pasa un tiempo sin que nadie entre, se queda como colgada, he comprobado si era el servidor apache, pero otras aplicaciones en el mismo servidor funciona perfectamente, y la base de datos tampoco es porque sigue contestando a mis peticiones desde fuera del servidor, asi que he intentado hacer pruebas, y no se que puede ser. Tengo un inicializador de contexto que hace lo siguiente
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public final class ContextListener implements ServletContextListener {
private ServletContext context = null;
public void contextInitialized (ServletContextEvent se) {
context = se.getServletContext ();
try {
ICdb ivdb = new ICdb ();
context.setAttribute ("BaseDatos", ivdb);
context.setAttribute("usuario",null);
}
catch (Exception e) {
context.log ("No se pudo crear el atributo BaseDatos: " + e.getMessage () + " " + e.getStackTrace());
}
}
public void contextDestroyed (ServletContextEvent servletContextEvent)
{
ICdb ivdb = (ICdb) context.getAttribute ("BaseDatos");
ivdb.close();
context.removeAttribute ("BaseDatos");
context.removeAttribute("usuario");
this.context = null;
}
}
donde el constructor de ICdb hace lo siguiente
public ICVdb() throws Exception {
try {
InitialContext initialContext = new InitialContext();
Context envContext = (Context) initialContext.lookup("java:comp/env");
DataSource dataSource = (DataSource) envContext.lookup("jdbc/IC");
this.connection = dataSource.getConnection();
} catch (Exception e) {
throw new Exception( "No se pudo abrir la base de datos IC: " + e.getMessage() + " " + e.getStackTrace());
}
}
protected synchronized Connection getConnection() {
while (this.connectionFree == false) {
try {
wait();
} catch (InterruptedException e) {
System.out.println("Ecepcion generada en <<getConnection>>"+ e.getStackTrace());
}
}
this.connectionFree = false;
notify();
return this.connection;
}
protected synchronized void releaseConnection() {
while (this.connectionFree == true) {
try {
wait();
} catch (InterruptedException e) {
System.out.println("Ecepcion generada en <<releaseConnection>>"+ e.getStackTrace());
}
}
this.connectionFree = true;
notify();
}
y el Dataset lo tengo asi configurado en el XML de la aplicacion
<?xml version="1.0" encoding="UTF-8"?>
<Context
crossContext="true"
reloadable="true">
<Resource
auth="Container"
name="jdbc/IC"
type="javax.sql.DataSource"
password="xxxxxxxxx"
driverClassName="org.gjt.mm.mysql.Driver"
maxIdle="0"
maxWait="10000"
removeAbandoned="true"
logAbandoned="true"
username="root"
url="jdbc:mysql://172.26.0.2:3306/IC?autoReconnect=true"
removeAbandonedTimeout="3000"
maxActive="0"/>
</Context>
¿¿ALGUIEN SABE QUE PUEDE ESTAR OCURRIENDO??, porque se queda colgado de esa manera, la version de apache-tomcat es la 5
Mi problema es que monto la aplicacion, funciona perfectamente, pero cuando pasa un tiempo sin que nadie entre, se queda como colgada, he comprobado si era el servidor apache, pero otras aplicaciones en el mismo servidor funciona perfectamente, y la base de datos tampoco es porque sigue contestando a mis peticiones desde fuera del servidor, asi que he intentado hacer pruebas, y no se que puede ser. Tengo un inicializador de contexto que hace lo siguiente
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public final class ContextListener implements ServletContextListener {
private ServletContext context = null;
public void contextInitialized (ServletContextEvent se) {
context = se.getServletContext ();
try {
ICdb ivdb = new ICdb ();
context.setAttribute ("BaseDatos", ivdb);
context.setAttribute("usuario",null);
}
catch (Exception e) {
context.log ("No se pudo crear el atributo BaseDatos: " + e.getMessage () + " " + e.getStackTrace());
}
}
public void contextDestroyed (ServletContextEvent servletContextEvent)
{
ICdb ivdb = (ICdb) context.getAttribute ("BaseDatos");
ivdb.close();
context.removeAttribute ("BaseDatos");
context.removeAttribute("usuario");
this.context = null;
}
}
donde el constructor de ICdb hace lo siguiente
public ICVdb() throws Exception {
try {
InitialContext initialContext = new InitialContext();
Context envContext = (Context) initialContext.lookup("java:comp/env");
DataSource dataSource = (DataSource) envContext.lookup("jdbc/IC");
this.connection = dataSource.getConnection();
} catch (Exception e) {
throw new Exception( "No se pudo abrir la base de datos IC: " + e.getMessage() + " " + e.getStackTrace());
}
}
protected synchronized Connection getConnection() {
while (this.connectionFree == false) {
try {
wait();
} catch (InterruptedException e) {
System.out.println("Ecepcion generada en <<getConnection>>"+ e.getStackTrace());
}
}
this.connectionFree = false;
notify();
return this.connection;
}
protected synchronized void releaseConnection() {
while (this.connectionFree == true) {
try {
wait();
} catch (InterruptedException e) {
System.out.println("Ecepcion generada en <<releaseConnection>>"+ e.getStackTrace());
}
}
this.connectionFree = true;
notify();
}
y el Dataset lo tengo asi configurado en el XML de la aplicacion
<?xml version="1.0" encoding="UTF-8"?>
<Context
crossContext="true"
reloadable="true">
<Resource
auth="Container"
name="jdbc/IC"
type="javax.sql.DataSource"
password="xxxxxxxxx"
driverClassName="org.gjt.mm.mysql.Driver"
maxIdle="0"
maxWait="10000"
removeAbandoned="true"
logAbandoned="true"
username="root"
url="jdbc:mysql://172.26.0.2:3306/IC?autoReconnect=true"
removeAbandonedTimeout="3000"
maxActive="0"/>
</Context>
¿¿ALGUIEN SABE QUE PUEDE ESTAR OCURRIENDO??, porque se queda colgado de esa manera, la version de apache-tomcat es la 5
Valora esta pregunta


0