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