Ragazzi per un progetto devo fare una pagina JSP che accede ed esegue query su un database.
Ho deciso per motivo di convenienza/costrizione da parte del docente, di inserire la connessione nel metodo init() della JSP, in modo da condividere solo una connessione e non una per ogni istanza della JSP.
Ho dichiarato il metodo jspInit() e le variabili globali per la connessione in questo modo:
Non fate caso al fatto che manchi la gestione delle eccezioni, non ho ancora deciso come implementarla per adesso. Tutto questo codice funziona e la connessione va, insomma si connette correttamente.codice:<%! Connection Conn = null; String URL = "jdbc:oracle:thin:@143.225.178.4:1521/xe"; String USER = "lbd2gr10"; String PASS = "22011984"; String driver = "oracle.jdbc.driver.OracleDriver"; public void jspInit() { try { Class.forName(driver); } catch (ClassNotFoundException err) { } try { Conn = DriverManager.getConnection(URL,USER,PASS); } catch (SQLException err) { } } %>
Il problema viene adesso, il valore di Conn viene settato al momento della creazione della classe, insomma quando la JSP viene generata per la priva volta giusto, se la connessione al momento era ok la variabile Conn viene settata correttamente. Ma se per esempio dopo 2 min la connessione con il DB cade, la variabile Conn conserva comunque il suo stato e quindi per lei io sono connesso ma quando faccio la query mi da errore.
Come posso risolvere, mi serve un controllo, dove devo metterlo? sullo Statement, sulla connessione? Non so davvero da dove cominciare, ho fatto qualche tentativo ma niente purtroppo! Non funziona... il problema rimane!
Avevo pensato di fare il controllo quando assegno lo statement nel metodo _jspService in questo modo:
Ma non è sufficiente, cioè non funziona se la connessione manca quindi ok, ma se poi la connessione torna disponibile non se ne rende conto e rimane in messaggio di errore...codice:try { stmt = Conn.createStatement(); } catch (SQLException e) { < Ritenta la connessione al db > }
Spero di essere stato sufficientemente chiaro e soprattutto che qualcuno sappia/possa indirizzarmi sulla strada giusta e suggerirmi il controllo adatto.

Rispondi quotando