Foros del Web » Programación para mayores de 30 ;) » Java »

Conexion JAVA con DATASOURCE

Estas en el tema de Conexion JAVA con DATASOURCE en el foro de Java en Foros del Web. Hola!!! Tengo la conexion de la aplicacion web que creé por medio de una clase (lo mas normal) y funciona al 100%. El problema parte ...
  #1 (permalink)  
Antiguo 12/01/2010, 10:55
Avatar de gabrican  
Fecha de Ingreso: junio-2008
Ubicación: Medellin
Mensajes: 89
Antigüedad: 15 años, 10 meses
Puntos: 4
Conexion JAVA con DATASOURCE

Hola!!!

Tengo la conexion de la aplicacion web que creé por medio de una clase (lo mas normal) y funciona al 100%.

El problema parte que en la empresa, por politicas de seguridad me dicen que debe ser a traves de un DATASOURCE, cosa que no tengo ni idea.

En fin, el datasource ya lo crearon, pero tengo que modificar toda mi aplicacion para que funcione con ese tipo de conexión y no se como hacerlo...

Alguien me puede ayudar????

Mi clase de conexion actual es:
Código:
package daos;
import java.util.ResourceBundle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import exceptions.ConnectionException;

public class Conexion {

  private Connection con;
                
private ResourceBundle rb = ResourceBundle.getBundle("config.conexion");
private ResourceBundle statements = ResourceBundle.getBundle("config.statements");
private String server;
private String url;
private String login;
private String password;
private String port;

 public Conexion() {
     server = rb.getString("server");
     url = rb.getString("url");
     login = rb.getString("login");
     password = rb.getString("password");
     port = rb.getString("port");
     }
                
     public String getStatement(String nombre){
        String valor = (String) statements.getString(nombre);
        return valor;
     }
    
     public boolean conectarBD() throws ConnectionException {
                               
           try {
                 Class.forName("oracle.jdbc.driver.OracleDriver");
                 con = DriverManager.getConnection("jdbc:oracle:thin:@"+server+":"+port+":"+url,login,password);
                 return true;
                 
                  } catch (ClassNotFoundException  cnfe) {
                   throw new ConnectionException("Ha ocurrido un error al cargar el driver de Oracle. Error:" + cnfe.getMessage());
                   }catch (SQLException  sqle) {
                   throw new ConnectionException("Ha ocurrido un error al intentar conectarse con Oracle. Error:" + sqle.getMessage());                                     
                   }
                }

           public void cerrarConexion() throws ConnectionException {
                          try {
                               con.close();
                               }catch (SQLException  sqle) {
                             throw new ConnectionException("Ha ocurrido un error al intentar cerrar la conexión con Oracle. Error:" + sqle.getMessage());                                   
                               }
                }
                
   public PreparedStatement prepareStatement(String sql) throws SQLException{
          PreparedStatement ps;
          ps = con.prepareStatement(sql);
          return ps;
          }
                
   public PreparedStatement prepararSentencia(String nombre) throws SQLException{
          PreparedStatement ps;                               
          ps = con.prepareStatement(getStatement(nombre));
          return ps;
          }
}
Yo lo que intente hacer es cambiar el metodo " conectarBD() " por:
Código:
  try{
  InitialContext initctx = new InitialContext();
  DataSource ds = (DataSource)initctx.lookup("jdbc/datasourceAP");
  Connection conn = ds.getConnection();
  return conn;
  }
catch (Exception e) {
throw new SQLException(" Esta es una excepcion en el getConection: "+ e.getMessage());
  }
                }
pero lo que sucede es que no me toma los statements, es decir los query SQL que realizan las acciones en la BD y no se como o no se que esta fallando!!!!!

Por Favor ayudaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  #2 (permalink)  
Antiguo 13/01/2010, 02:03
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Conexion JAVA con DATASOURCE

Con la información que dás no podemos saber que está fallando.

De todas formas, lo mejor es hacer el "lookup" una sola vez al inicio de tu programa y almacenar el DataSource para no tener que volverlo a buscar cada vez, ya que es una operacion muy costosa en tiempo.

El por que fallan los "statements" pues ni idea, ya que no muestras ni el código que los ejecuta, ni stack trace o mensaje de error... así que poco podemos decir. Las conexiones que devuelve un DataSource sirven exactamente igual que las normales, excepto el metodo close(), así que no tendría que haber diferencias.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 26/01/2010, 07:46
Avatar de gabrican  
Fecha de Ingreso: junio-2008
Ubicación: Medellin
Mensajes: 89
Antigüedad: 15 años, 10 meses
Puntos: 4
Exclamación Respuesta: Conexion JAVA con DATASOURCE

Pero segun eso estaría bien creada la clase de conexion???

Lo que pasa es que no puedo ver el LOG porque se trabaja en SAP Netweaver Developer y es un servidor que lo maneja el area de Tecnologia de la Empresa y no tengo acceso a esa información.

Adjunto una clase común y silvestre...
Código:
package daos;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import dtos.EmpresaDTO;
import daos.EmpresaDAO;
import exceptions.ConnectionException;

public class EmpresaDAO {

private Conexion conexion;

public EmpresaDAO() {
super();
}

     public void conectar() throws ConnectionException {
     conexion = new Conexion();
     conexion.conectarBD();		
     }

	public void cerrarConexion() throws ConnectionException {
	conexion.cerrarConexion();
	}

 public int insertarEmpresa(EmpresaDTO empresa)
 throws SQLException, ConnectionException {
			
 PreparedStatement ps;
 ResultSet rs;
 int codigo=1;
		 
conectar();	
ps = conexion.prepareStatement(conexion.getStatement("insertarEmpresa"));
		
	ps.setLong(1, empresa.getId_empresa());
	ps.setString(2, empresa.getStr_tipo_emp());
	ps.setString(3, empresa.getStr_razonsocial_emp());
	ps.setString(4, empresa.getStr_replegal_emp());
	ps.setString(5, empresa.getStr_direccion_emp());
	ps.setInt(6, empresa.getNum_telefono_emp());
	ps.setString(7, empresa.getDate_fechainscripcion_emp());
	ps.setString(8, empresa.getStr_email_emp());
	ps.setLong(9, empresa.getNum_celular_emp());
	ps.setLong(10, empresa.getNum_multas_emp());
	ps.setString(11, empresa.getStr_ubicacion_emp());
	ps.setString(12, empresa.getStr_accion_emp());
	ps.setString(13, empresa.getStr_estado_emp());
		
	rs = ps.executeQuery();
	ps.close();
	rs.close();
	cerrarConexion();
	return codigo;
	}
  #4 (permalink)  
Antiguo 26/01/2010, 07:50
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Conexion JAVA con DATASOURCE

Sin ver los logs ni mensajes de error, no se puede saber que pasa. Como ya he dicho las conexiones han de funcionar igual que las normales, así que no es cuestion de API ni nada parecido.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 02/02/2010, 08:42
Avatar de gabrican  
Fecha de Ingreso: junio-2008
Ubicación: Medellin
Mensajes: 89
Antigüedad: 15 años, 10 meses
Puntos: 4
Respuesta: Conexion JAVA con DATASOURCE

Cita:
Iniciado por GreenEyed Ver Mensaje
Sin ver los logs ni mensajes de error, no se puede saber que pasa. Como ya he dicho las conexiones han de funcionar igual que las normales, así que no es cuestion de API ni nada parecido.

S!
Este es el LOG del error... ayuda pls!!!

Código:
#1.5#0003BA2CEA6E00390000004C0000476A00047E9EFE5756CB#1265121243911#com.sap.engine.services.servlets_jsp.client.RequestInfoServer#sap.com/Simon_ea#com.sap.engine.services.servlets_jsp.client.RequestInfoServer#888888111111#1107##n/a##f2d14260100711df9ccb0003ba2cea6e#SAPEngine_Application_Thread[impl:3]_33##0#0#Error##Plain###application [Simon] Processing HTTP request to servlet [IngresarProyecto] finished with error. The error is: java.lang.NullPointerException
	at daos.Conexion.prepareStatement(Conexion.java:167)
	at daos.EmpresaDAO.consultarEmpresavc(EmpresaDAO.java:296)
	at servlets.IngresarProyecto.processRequest(IngresarProyecto.java:104)
	at servlets.IngresarProyecto.doPost(IngresarProyecto.java:185)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
	at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:401)
	at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:266)
	at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:386)
	at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:364)
	at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:1039)
	at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:265)
	at com.sap.engine.services.httpserver.server.Client.handle(Client.java:95)
	at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:175)
	at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33)
	at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41)
	at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:102)
	at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:172)
__________________
Gabo Duk3
I.S
  #6 (permalink)  
Antiguo 03/02/2010, 01:37
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Conexion JAVA con DATASOURCE

Cita:
...
The error is: java.lang.NullPointerException
at daos.Conexion.prepareStatement(Conexion.java:167)
...
En la linea 167 de la clase Conexión estás intentando acceder a un objeto que es nulo. Si el código es el que pusiste antes, seguramente la 167 sea esta linea:
Cita:
ps = con.prepareStatement(sql);
y eso quiere decir que el objeto con es nulo cuando llamas a la funcion prepareStatement. El por que es nulo eso ya lo tienes que averiguar tú. Puede que no estes recuperando bien el DataSource o que no este bien configurado y no te devuelva las conexiones. Eso es lo que tienes que averiguar ahora: ¿por que es null con?

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #7 (permalink)  
Antiguo 08/02/2010, 13:35
Avatar de gabrican  
Fecha de Ingreso: junio-2008
Ubicación: Medellin
Mensajes: 89
Antigüedad: 15 años, 10 meses
Puntos: 4
Respuesta: Conexion JAVA con DATASOURCE

Cita:
Iniciado por GreenEyed Ver Mensaje
En la linea 167 de la clase Conexión estás intentando acceder a un objeto que es nulo. Si el código es el que pusiste antes, seguramente la 167 sea esta linea:

y eso quiere decir que el objeto con es nulo cuando llamas a la funcion prepareStatement. El por que es nulo eso ya lo tienes que averiguar tú. Puede que no estes recuperando bien el DataSource o que no este bien configurado y no te devuelva las conexiones. Eso es lo que tienes que averiguar ahora: ¿por que es null con?

S!
Gracias por responder!!!!

Mira, el problema es ese... yo antes tenia la conexion con Driver, me funcionaba y cargaban bien las sentencias SQL (statements) y ahora con el datasource no funcionan, no se si depronto el método por medio del cual se leen los statements esté malo o si hay alguna incompatibilidad de los Datasources con los archivos *.properties....

Vos que sabés, que error tengo ahi, o cual podria ser el problema??...
Ahhh la estructura del archivo statements.properties es:

Nombre de la sentencia (espacio) sentencia SQL
ingresarProyecto insert into proyecto values (......);
__________________
Gabo Duk3
I.S

Etiquetas: conexion, datasource
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:48.