Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
Il nuovo gimbal mobile DJI evolve il concetto di tracciamento automatico con tre modalità diverse, un modulo multifunzionale con illuminazione integrata e controlli gestuali avanzati. Nel gimbal è anche presente un'asta telescopica da 215 mm con treppiede integrato, per un prodotto completo per content creator di ogni livello
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce
Abbiamo provato il nuovo HUAWEI Pura 80 Pro. Parliamo di uno smartphone che è un vero capolavoro di fotografia mobile, grazie ad un comparto completo in tutto e per tutto, In questa colorazione ci è piaciuto molto, ma i limiti hardware e software, seppur in netto miglioramento, ci sono ancora. Ma HUAWEI ha fatto davvero passi da gigante per questa nuova serie Pura 80. Buona anche l'autonomia e soprattutto la ricarica rapida sia cablata che wireless, velocissima.
Opera Neon: il browser AI agentico di nuova generazione
Opera Neon: il browser AI agentico di nuova generazione
Abbiamo provato il nuovo web browser con intelligenza artificiale della serie Opera accessibile tramite abbonamento. Ecco le nostre prime impressioni sulle funzionalità di Opera Neon basate su AI e come funzionano
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-06-2014, 16:20   #1
chicco19811
Member
 
Iscritto dal: Oct 2009
Messaggi: 72
[JAVA] java.sql.SQLRecoverableException: Closed Connection

ho una web application che gira su weblogic e si collega a oracle; non l' ho fatta io (almeno nessuno mi sgrida :-)) ma ho guardato la parte di connessione e fa qualcosa del genere

Codice:
public class DBUtility {
	private static Connection connection = null;

	public static Connection getConnection() {
		if (connection != null)
			return connection;
		
		else {
			 
			try {
				 
				String driver ="oracle.jdbc.driver.OracleDriver"; 
                String url ="jdbc:oracle:thin:@DBSCA04:1889:SCA04"; 
                String user ="user"; 
                String password  ="password"; 
                 
				Class.forName(driver);

				connection = DriverManager.getConnection(url, user, password);
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			} catch (SQLException e) {
				e.printStackTrace();

			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return connection;
			//	}
		}
	}
}



public class DBCrudCountry
{
    private Connection connection;
    
  ....
    
    public DBCrudCountry()
    {
    	 connection = DBUtility.getConnection();
    }
    
	 public void updateItem(Country item, int delete)
    {
        delete(item);
        insert(item, delete);
    }
    
	 private void insert(Country item, int delete)
    {
      ...
    }
    
	
    private void delete(Country item)
    {
        PreparedStatement preparedStatement;
        try
        {
            preparedStatement = connection.prepareStatement("update " + tableName + " set DELETED=?" + " where ID=?");
            preparedStatement.setInt(1, 1);
            preparedStatement.setInt(2, item.getId());
            preparedStatement.executeUpdate();
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

}




public class DBControllerCountry extends HttpServlet
{
   
    private DBCrudCountry crud;
    
    
    public DBControllerCountry()
    {
        crud = new DBCrudCountry();
    }
    
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        if (request.getParameter("action") != null)
        {
           
            if (action.equals("list"))
            {
               ...
            }
            else if  ( action.equals("delete"))
            {
               ...
                try
                {
                    if (action.equals("create"))
                    {
                       ..
                    }
                    else if (action.equals("update"))
                    {
                       ...
                    }
                    else if (action.equals("delete"))
                    {
                        if (request.getParameter("id") != null)
                        {
                            item = crud.getItem(Integer.parseInt(request.getParameter("id")));
                            crud.updateItem(item, 1);
                             
                        }
                    }
                }
                catch (Exception ex)
                {
                    String error = "{\"Result\":\"ERROR\",\"Message\":" + ex.getStackTrace().toString() + "}";
                    response.getWriter().print(error);
                }
            }
        }
    }
    
    
}

funziona perfettamente ma ogni giorno devo riavviare nel senso che se oggi tutto funziona, domani mattina arrivo qua e la connessione fallisce; nei log mi da questi errori

java.sql.SQLRecoverableException: IO Error: Broken pipe
...
Caused by: java.net.SocketException: Broken pipe
...
java.sql.SQLRecoverableException: Closed Connection


dal supporto capisco che

i database vengono backuppati a freddo tutte le notti. Pertanto le connessioni lasciate attive senza un sistema di auto-reconnect non risultano più attive.

posso rimediare al codice che ho postato senza stravolgere tutto?
a me non pare correttissimo ma ho bisogno di fare nella maniera più veloce possibile, almeno per ora

grazie
chicco19811 è offline   Rispondi citando il messaggio o parte di esso
Old 05-06-2014, 16:31   #2
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
La persona che ha scritto quel codice evidentemente non ha cognizione del fatto che un application server può servire più richieste contemporaneamente, ergo dovrebbe istanziare una nuova connessione al db per ogni richiesta.

Prova a fare queste modifiche:
1) rimuovi la variabile statica "connection" dalla classe DBUtility e fai creare al metodo getConnection una nuova connessione ogni volta che viene richiamato;
2) modifica tutte le classi che estendono HttpServlet, rimuovi la proprietà crud, ed elimina la sua creazione dal costruttore, quindi inserisci dichiarazione ed inizializzazione di crud direttamente nei metodi doPost/doGet.
Non è il massimo in termini di performance, ma di sicuro ne guadagnerai in coerenza delle operazioni.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2014, 14:22   #3
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Io modificherei in

Codice:
public static Connection getConnection() {
		if (connection != null && connection.isValid(1000))
			return connection;
dovrebbe essere sufficiente. Se per caso ti vene la paura che le prestazioni possano risentirne, quando catturi l'eccezione che hai descritto, chiudi la connessione (e' inutile ma sicuro) - facendo attenzione a non lasciar trapelare alcuna eccezione - e poi, metti connection a null. Al ciclo successivo ritentera' la connessione.

ATTENZIONE - questo significa che registrera' nuovamente il driver. Potresti evitare di farlo ad ogni riconnessione e farlo solo all'inizio dell'applicazione.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2014, 22:14   #4
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Io modificherei in

Codice:
public static Connection getConnection() {
		if (connection != null && connection.isValid(1000))
			return connection;
dovrebbe essere sufficiente. Se per caso ti vene la paura che le prestazioni possano risentirne, quando catturi l'eccezione che hai descritto, chiudi la connessione (e' inutile ma sicuro) - facendo attenzione a non lasciar trapelare alcuna eccezione - e poi, metti connection a null. Al ciclo successivo ritentera' la connessione.

ATTENZIONE - questo significa che registrera' nuovamente il driver. Potresti evitare di farlo ad ogni riconnessione e farlo solo all'inizio dell'applicazione.
Non credo sia sufficiente perché DBCrudCountry chiama getConnection solo nel costruttore, per cui impostando connection a null, essa rimane null. Bisognerebbe invece scrivere "connection = DBUtility.getConnection()" all'interno di ogni catch di quel tipo.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2014, 06:04   #5
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Non credo sia sufficiente perché DBCrudCountry chiama getConnection solo nel costruttore, per cui impostando connection a null, essa rimane null. Bisognerebbe invece scrivere "connection = DBUtility.getConnection()" all'interno di ogni catch di quel tipo.
Beh si, hai ragione. Non avevo letto tutto il codice, dando per scontato che fosse gia' cosi'. Chiedo perdono!!!
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2014, 19:01   #6
Maui78
Senior Member
 
L'Avatar di Maui78
 
Iscritto dal: Jan 2005
Messaggi: 395
Ciao, non conosco weblogic, ma lavoro da anni su altri application server. Verifica se sul datasource, lato weblogic, esista qualcosa che "pre-testa" la connessione. Se è ok, bene, la uso, altrimenti ne apro un'altra.
Il pretest normalmente è un qualcosa che gira a cadenza di 120 secondi o giù di lì, si esegue una query sul db, stupida, tipo un select sysdate from dual, tanto per vedere se la connessione è viva.
Per quanto l'approccio via codice potrebbe essere stato errato, magari te la cavi velocemente con un flag.

Ciao
Maui78 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce Recensione Pura 80 Pro: HUAWEI torna a stupire c...
Opera Neon: il browser AI agentico di nuova generazione Opera Neon: il browser AI agentico di nuova gene...
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
1.200 CV e drift a 213 km/h: la supercar...
Shenzhou-21: esperimenti sui topi in orb...
Cloudera punta su cloud privato e intell...
Il mistero del Ryzen 7 9700X3D: prezzo p...
Posticipato il rientro dell'equipaggio c...
Propaganda russa e hactivism fra le prin...
Superluna del Castoro: stasera il satell...
NVIDIA regala una GeForce RTX 5090 Found...
Snowflake punta su Intelligence, l'IA pe...
Volkswagen realizzerà i propri chip per ...
Formula E GEN4 svelata: 600 kW di potenz...
PC Desktop HP Victus con RTX 4060 e Ryze...
Fastnet, il 'mega-cavo' di AWS che pu&og...
Offerte Amazon da non perdere: GeForce R...
Clima, l'UE trova l'accordo sul taglio d...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:50.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v