2016-05-27 2 views
0

У меня есть веб-приложение Java EE. Я соединяю базу данных с JDBC, и я использую пул соединений JDBC. Главная страница моего приложения - страница входа. После того, как я перейду на страницу входа в систему и подожду некоторое время, я последовательно предупреждаю об этом сервере (4.1.0).Glassfish RAR5035: Неожиданное исключение при уничтожении ресурсов из пула

Warning: RAR5035:Unexpected exception while destroying resource from pool OraclePool. Exception message: Error while destroying resource :IO Error: Socket read timed out

Даже если я не предпринимаю никаких действий на странице. Когда я отслеживаю статистику пула соединений, NumConnCreated постоянно увеличивается. Как я могу решить проблему ?. Спасибо.

pool_statistics_image

Это мой класс управляемого боба.

@ManagedBean 
@SessionScoped 
public class Login implements Serializable{ 

    private String userName; 
    private String password; 
    private User user; 
    private @EJB DBRemote db; 

public void test(){ 
     String[] params1 = {"user","1234"}; 
     int[] getParams = {Types.INTEGER,Types.VARCHAR,Types.VARCHAR,Types.VARCHAR}; 
     CallableStatement statement = db.run("TBL.USERLOGIN(?,?,?,?,?,?)", params1 , getParams); 

     try { 
      int isLogin = statement.getInt(3); 
      if (isLogin==1) { 
       String uName = statement.getString(4); 
       String uId = statement.getString(5); 
       user = new User(uId, uName, isLogin); 
       System.out.println("LOGGED IN " + uName + "\t" + uId); 
      }else{ 
       String errMessage = statement.getString(6); 
       user = new User(errMessage,isLogin); 
       System.out.println("LOG IN FAILURE " + errMessage); 
      } 

     } catch (SQLException ex) { 
      Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex); 
     }finally{ 
      db.close(); 
      FacesContext.getCurrentInstance().addMessage("infoback", new FacesMessage(FacesMessage.SEVERITY_INFO, 
       "TEST","Test Works")); 
     } 
    } 

} 

Это мой интерфейс класса

@Remote 
public interface DBRemote { 
    CallableStatement run(String query, String[] setParams, int[] getParams); 
    void close(); 
    String getErrorMessage(); 
    String getSql(); 
} 

Это мой Stateless Bean класс

@Stateless 
public class DB implements DBRemote{ 

    @Resource(mappedName = "pwresource") 
    private DataSource ds; 

    private String sql; 
    private String errorMessage; 
    private CallableStatement statement; 
    private Connection connection; 

    public DB() { 
    } 

    @Override 
    public CallableStatement run(String query, String[] setParams, int[] getParams){ 
     sql = "{call " + query + "}"; 
     int getParamIndex = setParams.length + 1; 
     try { 
      connection = ds.getConnection(); 
      statement = connection.prepareCall(sql); 
      for (int i = 0; i < setParams.length; i++) { 
       statement.setString(i+1, setParams[i]); 
      } 
      for (int getParam : getParams) { 
       statement.registerOutParameter(getParamIndex, getParam); 
       getParamIndex++; 
      } 
      statement.execute(); 

     }catch (SQLException ex) { 
      if (ex.getErrorCode()==17008) { 
       errorMessage = "Timeout"; 
      }else{ 
       errorMessage = "System Error"; 
      } 
      Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex); 
      close(); 
     } 
     return statement; 
    } 

    @Override 
    public void close(){ 
     try { 
      if (statement != null) { 
       statement.close(); 
      } 
      if(connection != null){ 
       connection.close(); 
      } 
     errorMessage = null; 
     } catch (SQLException e) { 
      errorMessage = "Close Connection Error"; 
     } 
    } 

    @Override 
    public String getErrorMessage() { 
     return errorMessage; 
    } 

    @Override 
    public String getSql() { 
     return sql; 
    } 


} 

ответ

0

я решил мою проблему. Моя проблема связана с подключением пула соединений и базы данных. База данных автоматически закрывает соединения из-за того, что сервер и база данных в разных сетях вызвали проблему с таймаутом.

 Смежные вопросы

  • Нет связанных вопросов^_^