Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615

    Problema accesso db Postgre SQL

    Carissimi,
    pongo un quesito per me davvero importantissimo, visto che ha impegnato tutta la mia giornata odierna e forse impegnerà questa notte. Per questo motivo sarò assolutamente dettagliatissimo in modo da consentirvi di meglio capire il problema.
    La mia web application sviluppata in Java si interfaccia ad un database Postgre SQL grazie al driver postgresql-8.3-603.jdbc3.jar scaricato dal sito ufficiale e valido per la mia configurazione (jdk 1.4, Tomcat 5.5) adatto per versioni di postgre dalla 7.2 in su. La classe DAO è la seguente, e preleva le credenziali direttamente dal file web.xml.

    codice:
    package dao;
    
    import java.sql.*;
    import utility.UtilityConfig;
    
    public class DAOMain {
    		
    	public Connection myCn() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
    		UtilityConfig cnConf = new UtilityConfig();
    		String cnHost = cnConf.UtilityGetParameter("dbHost");
    		String cnName = cnConf.UtilityGetParameter("dbName");
    		String cnLogin = cnConf.UtilityGetParameter("dbLogin");
    		String cnPsw = cnConf.UtilityGetParameter("dbPassword");
    		Connection myConnection = null; 
    		Class.forName("org.postgresql.Driver").newInstance();
    		myConnection = DriverManager.getConnection("jdbc:postgresql://"+cnHost+"/" + cnName + "?user=" + cnLogin + "&password=" + cnPsw);					
    		return myConnection;
    	}
    	
    	public Connection cnOpen() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
    		return this.myCn();
    	}
    	
    	public void cnClose(Connection myCn) throws SQLException{
    		myCn.close();
    	}	
    }

    In locale, ho un server Tomcat 5.5 e Postgre SQL 8.3.1 che utilizzo tramite PGAdmin 1.8.2 e tutto funziona alla perfezione. In remoto, dove la mia applicazione dovrà essere allocata, ho un pannello Plesk che offre database Postgre SQL 7.4.21 gestito tramite phpPgadmin. Tramite i pannelli di amministrazione offerti dal mio provider ho creato un nuovo database, associato user e password e, dal tool offerto, ho creato la tabella utenti della mia applicazione ed inserito una riga di prova relativa all’utente amministratore dello stesso mio software. Quindi ho caricato il war sotto il Tomcat del Plesk e loggandomi con username e password uguali a quelle memorizzate nella tabella in questione riscontravo però un errore in fase di accesso ai dati. Come mai? Quale operazione o manovra aggiuntiva dovevo compiere, passando a lavorare in remoto, che forse non ho eseguito? Sappiate che:

    1) Il problema non dipende dall’applicazione; ho fatto una prova, cambiando driver e database, per vedere se sotto Mysql funzionava e non c’erano problemi (vi ricordo che il plesk del mio provider mi offre entrambe le alternative);
    2) Il problema non dipende dall’applicazione a maggior ragione visto che le sue classi e servlet funzionano benissimo (esempio, se si omette la password viene coinvolta una servlet che restituisce un messaggio di errore senza bisogno di accedere alla base dati, cosa che puntualmente e correttamente avviene);
    3) Il problema è certamente dell’accesso ai dati (vedo lo stesso messaggio di errore accesso dati che peraltro vedo anche in locale se cambio le credenziali di accesso al database sostituendole con altre sbagliate);
    4) In locale tutto funziona benissimo ed il software si interfaccia correttamente al db postgre;

    Vi prego di aiutarmi, se potete… Grazie.

    Archimede

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Ho aspettato a rispondervi perché nel frattempo per eliminare qualsiasi altra ipotesi, ho realizzato una web app Java semplicissima con una unica classe che legge quei dati e la presenta in una pagina jsp. Senza impostare messaggi di errore miei, e lasciando quelli del Tomcat come mi avete detto. Questo che vi posto sotto è il messaggio di errore completo:

    codice:
    javax.servlet.ServletException: Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
    	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846)
    	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
    	org.apache.jsp.index_jsp._jspService(index_jsp.java:67)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    
    root cause
    
    org.postgresql.util.PSQLException: Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
    	org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:123)
    	org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
    	org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:124)
    	org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
    	org.postgresql.jdbc3.Jdbc3Connection.<init>(Jdbc3Connection.java:24)
    	org.postgresql.Driver.makeConnection(Driver.java:386)
    	org.postgresql.Driver.connect(Driver.java:260)
    	java.sql.DriverManager.getConnection(DriverManager.java:512)
    	java.sql.DriverManager.getConnection(DriverManager.java:193)
    	utility.TestClass.myCn(TestClass.java:24)
    	org.apache.jsp.index_jsp._jspService(index_jsp.java:56)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    E questa è la stringa di connessione, che a questo punto come si vede dall'errore è l'unica responsabile del problema visto che la stessa stringa in locale funziona (correggetemi se mi sbaglio).
    codice:
    myConnection = DriverManager.getConnection("jdbc:postgresql://localhost:/mydb?user=myuser&password=mypsw");
    Anche inserendo la porta indicata dal mio provider non cambia nulla.
    codice:
    myConnection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/mydb?user=myuser&password=mypsw");
    A questo punto non ci sono dubbi: questa stessa stringa, che in locale va benissimo, per funzionare in remoto ha bisogno di qualcosa che non ho aggiunto. Cosa?
    Grazie tantissimo a tutti.

    Archimede

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Problema risolto. Si trattava di impostazioni particolari sul server. Grazie a tutti.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    3
    Posso chiederti quale provider utilizzavi? Conosci qualche buon provider che fornisca tomcat?
    grzaie ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.