2011-07-19 22 views
0

我得到一個Swing應用程序,開始詢問用戶連接參數,因爲每個用戶都可以犯錯誤我想知道處理錯誤連接嘗試時的最佳方式,即錯誤的url處理休眠在Swing應用上的不正確連接

我得到的是一個按鈕,發送DBTYPE,用戶,通過和url到地圖,然後我獲得持續整個應用程序像這樣的EntityManagerFactory的:

emf = Persistence.createEntityManagerFactory("persistenceUnit", connectionProperties);

但正在接近1分鐘告訴我

java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection

  • 我可以操縱休眠更快回答超時?
  • 我應該改變我使用entityManagerFactory的方式嗎?

編輯:我有一個連接器類,它所做的只是允許GUI發送參數給它,然後允許我的DAO檢索該類的實例以獲取EntityManagerFactory。這些都是我的連接屬性,在GUI改變基於DB它選擇:

connectionProperties.put("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect"); connectionProperties.put("hibernate.connection.driver_class", "oracle.jdbc.driver.OracleDriver"); connectionProperties.put("hibernate.connection.url", userSettings.get("url", "")); connectionProperties.put("hibernate.connection.username", userSettings.get("username", "")); connectionProperties.put("hibernate.connection.password", userSettings.get("password", ""));

的方言,這是提供一個EntityManager到任何需要的方法之一:

protected EntityManager getEntityManager() { if (em == null) {
em = Connector.getInstance().getEmf().createEntityManager();
return em; } else { return em; } }

+0

我們需要知道你的db連接是如何配置的,以提供任何有用的建議。 –

回答

0

我不得不說,我很驚訝,似乎設置JDBC連接超時的唯一方法是使用靜態的DriverManager.setLoginTimeout()。我期望在流行的連接池中找到一些超時支持,但似乎並不存在,除了在C3P0的non-pooling DataSource implementation中,您不希望將其用於生產應用程序。

+0

還有另一個問題,提出你剛纔所說的,它似乎是唯一的方法......並且與OracleDriver,thx有點不同 – javaNoober