Connessione a postgres

di il
16 risposte

Connessione a postgres

Ciao a tutti,

Ho scritto una servlet che si connette ad un db postgres che manda i dati in html al browser. In locale con netbeans mi funziona. Il deploy da remoto su una macchina Linux non va a buon fine.
Chiamando la servlet dal browser ricevo una pagina bianca perchè l'html ricevuto si ferma prima della connessione al db. Questo è il codice :

String connectionURL = "jdbc:postgresql://IP:5432/dbprova";
Connection connection = null;
Statement statement = null;

try {

Class.forName("org.postgresql.Driver");

.......................

Vorrei fare il deploy con "Manager App" di tomcat ma non sono capace (ho inserito dal browser lo user e la pwd di tomcat autorizzati a utilizzare questa funzione ma non mi ritorna nulla)

Sulla macchina Linux ho posizionato il jar che contiene la cartella "org" in : webapps\contextroot\WEB-INF\lib è giusto ?
Spero che queste linee di codice siano sufficienti ad intuire qual potrebbe essere l'errore

Grazie

16 Risposte

  • Re: Connessione a postgres

    rufis ha scritto:


    Il deploy da remoto su una macchina Linux non va a buon fine.
    Chiamando la servlet dal browser ricevo una pagina bianca perchè l'html ricevuto si ferma prima della connessione al db.
    Che vuol dire di preciso? C'è una eccezione? Quale? C'è del logging visibile da qualche parte?

    rufis ha scritto:


    Questo è il codice :

    String connectionURL = "jdbc:postgresql://IP:5432/dbprova";
    Connection connection = null;
    Statement statement = null;

    try {

    Class.forName("org.postgresql.Driver");
    Da questo non si può dedurre granché ... l'url è corretto (a patto che al posto di quel "IP" hai messo un indirizzo o hostname valido).
    Come passi username/password? Ottieni la Connection dal DriverManager, giusto? (non penso da un DataSource, visto il codice) Se dal DriverManager, si può usare tipicamente il getConnection(String url, String user, String password)

    rufis ha scritto:


    Sulla macchina Linux ho posizionato il jar che contiene la cartella "org" in : webapps\contextroot\WEB-INF\lib è giusto ?
    Nelle webapp JavaEE i jar delle librerie vanno appunto nella WEB-INF/lib

    rufis ha scritto:


    Spero che queste linee di codice siano sufficienti ad intuire qual potrebbe essere l'errore
    Purtroppo no. Dovresti abituarti a gestire bene eccezioni e logging in modo che siano utili ed esplicativi.
  • Re: Connessione a postgres

    Grazie per i consigli.
    La connessione in locale funziona. Queste sono alcune linee di codice

    Connection c;
    c = DriverManager.getConnection("jdbc:postgresql://IP:5432/dbprova", "user", "pwd");

    Vado a documentarmi su google sulla possibilità di leggere i log di tomacat. Tu a riguardo puoi farmi qualche consiglio ?

    Posso fare il deploy da remoto ? Perchè dopo aver inserito lo user e la pwd, che chrome mi chiede, non succede nulla ?
  • Re: Connessione a postgres

    Ciao a tutti,
    Premessa : In locale funziona tutto. A netbeans gli ho indicato la posizione della libreria jdbc che sta sul Desktop

    Domanda: cosi' facendo sto indicando a tomcat dove cercare la libreria ? Potrebbe essere questo il mio errore ? Se cosi' fosse allora non basta posizionare la libreria in webapps\contextroot\WEB-INF\lib ? Potrebbe essere questo l'errore ?

    Grazie
  • Re: Connessione a postgres

    rufis ha scritto:


    A netbeans gli ho indicato la posizione della libreria jdbc che sta sul Desktop
    Potrebbe essere questo l'errore ?
    Non "potrebbe" .... È questo l'errore. L'ho detto in precedenza:

    andbin ha scritto:


    Nelle webapp JavaEE i jar delle librerie vanno appunto nella WEB-INF/lib
  • Re: Connessione a postgres

    Ma la cartella org sta in un jar ...scusa non capisco
  • Re: Connessione a postgres

    rufis ha scritto:


    ma la cartella org sta in un jar ...scusa non capisco
    Il file .jar del driver JDBC di PostgreSQL lo prendi e lo metti nella WEB-INF/lib del tuo progetto. Stop.
  • Re: Connessione a postgres

    Il fatto è che ce l'ho messo e ho compilato così : javac -classpath /usr/share/tomcat/webapps/contextroot/WEB-INF/lib nome.java
  • Re: Connessione a postgres

    rufis ha scritto:


    Il fatto è che ce l'ho messo e ho compilato così : javac -classpath /usr/share/tomcat/webapps/contextroot/WEB-INF/lib nome.java
    Ma .... compili "a mano"??? Per le webapp è più rognoso e complesso compilare "a mano" con javac. Dovresti anche mettere in classpath il jar di specifica delle API Servlet e questo NON dovrebbe essere nella WEB-INF/lib perché non serve a runtime in quanto le API delle Servlet sono già fornite dal servlet container (es. Tomcat).
    E quando si sviluppano webapp JavaEE è assolutamente bene che le tue classi siano in un package specifico.

    Usa un IDE.
  • Re: Connessione a postgres

    Quindi in WEB-INF/lib lascio solo jdbc e definisco CLASSPATH con tomcat/lib giusto ?

    il problema è che mi connetto alla macchina di tomcat da remoto a riga di comando con connessione ssh, come potrei utilizzare un IDE ....

    cioe' in locale ho netbeans e mi funziona tutto il problema è che devo esportare tutto su questa macchina remota in ssh
  • Re: Connessione a postgres

    rufis ha scritto:


    quindi in WEB-INF/lib lascio solo jdbc e definisco CLASSPATH con tomcat/lib giusto ?
    A livello di compilazione dei sorgenti Java, il driver JDBC in effetti NON serve (in generale un driver JDBC è una dipendenza a runtime, non in compilazione).
    Servono invece (come minimo) in classpath le API delle Servlet e quelle sono in un jar fornito insieme a Tomcat, ad esempio (ma si possono trovare anche altrove).

    rufis ha scritto:


    il problema è che mi connetto alla macchina di tomcat da remoto a riga di comando con connessione ssh, come potrei utilizzare un IDE ....
    Non da un IDE ... a meno che abbia qualche plugin/tool apposito. Ma in generale no.

    rufis ha scritto:


    cioe' in locale ho netbeans e mi funziona tutto il problema è che devo esportare tutto su questa macchina remota in ssh
    Generalmente si fa il deploy o del file .war completo ovvero del pacchetto singolo della web application ... oppure si può trasferire in una cartella del servlet container il war "spacchettato".
  • Re: Connessione a postgres

    Ho visto che in tomcat/lib c'e' tomcat-jdbc.jar
    se metto postgresql.jar in WEB-INF/lib la jvm quale libreria prende in considerazione ?
  • Re: Connessione a postgres

    rufis ha scritto:


    Ho visto che in tomcat/lib c'e' tomcat-jdbc.jar
    se metto postgresql.jar in WEB-INF/lib la jvm quale libreria prende in considerazione ?
    Il tomcat-jdbc.jar contiene la implementazione del "connection pool" di Tomcat. Che non è un driver JDBC (quindi non c'entra direttamente e non influenza il tuo driver JDBC).
    E che quasi sicuramente non hai sfruttato. Si può far in modo che la Connection al DB venga gestita da Tomcat all'interno di un suo "connection pool" e poi fornita alla applicazione tramite DataSource. Ma questo vorrebbe dire una configurazione specifica in Tomcat e vorrebbe dire che il driver JDBC del DB sia già noto a Tomcat. Ripeto: sicuramente NON hai sfruttato questa strada e la tua webapp prende la Connection dal DriverManager.

    Quindi:
    a) dimentica tomcat-jdbc.jar
    b) metti nella WEB-INF/lib il jar del driver JDBC per PostgreSQL
    c) fai il build del tuo progetto
    d) arriva a creare un WAR (.war) completo della tua webapp
    e) fai il deploy della applicazione mettendo il .war sotto la "webapps" di un Tomcat (in qualunque modo ci arrivi: con FTP, SSH ecc...)
  • Re: Connessione a postgres

    Grazie per la pazienza ma ho fatto tutto e continua a darmi una pagina bianca....mi aspetterei un errore logico ma non capisco come ci possa essere se in locale mi funziona tutto ....
    tomcat in locale è 8.0.27.0
    tomcat in remoto è 7.0.59 che punta ad una jre-1.8.0-openjdk
    utilizzo il jar postgresql-9-3-1103.jdbc.jar

    potrebbero esserci dipendenze errate ?
  • Re: Connessione a postgres

    rufis ha scritto:


    grazie per la pazienza ma ho fatto tutto e continua a darmi una pagina bianca....mi aspetterei un errore logico ma non capisco come ci possa essere se in locale mi funziona tutto ....
    tomcat in locale è 8.0.27.0
    tomcat in remoto è 7.0.59 che punta ad una jre-1.8.0-openjdk
    utilizzo il jar postgresql-9-3-1103.jdbc.jar

    potrebbero esserci dipendenze errate ?
    Guarda i log di Tomcat, c'è una directory "logs" sotto la "home" di Tomcat
Devi accedere o registrarti per scrivere nel forum
16 risposte