連接到UNIX機器,我知道,在數據庫連接池機制可以讓你保持許多交易數據庫之間的打開,然後只在最後關閉數據庫。 我使用的sshxcute(http://code.google.com/p/sshxcute/)從Java代碼連接到UNIX機器。但是如果我必須執行來自不同java文件的unix命令,則整個過程就會從連接到機器發生。我想保持會議之間打開這臺機器的很多電話。如何實現這一目標。基本上,我想要一些某種機制像連接池,它可以讓我打開(連接)到UNIX機器只有一次,當我從不同的Java類或方法要最後一次爲所有關閉會話/連接到UNIX機器執行儘可能多的指令。 。連接池機制,從Java代碼
回答
我不得不建立這樣池。這並不難。簡而言之,我的一般方法是:
創建一個類來管理池。
在該類中,創建一個Collection來保存可用的連接。 (哦,很好的韻律)。可能是一個LinkedList,但它可能是一個ArrayList等。創建第二個Collection來保存當前正在使用的連接。最初這些集合是空的。
在該類中創建一個可以調用以請求連接的函數。該函數檢查池中是否有連接。如果是這樣,它將選擇一個,將其從可用集合中刪除,將其添加到使用的集合中,然後將其返回給調用者。如果沒有,則創建一個新的,將其添加到使用的集合中,並將其返回給調用者。
創建一個可以調用來釋放連接的函數。該函數將集合作爲參數,將其從已用集合中移除,並將其添加到可用集合中。 (如果它不是用來收藏的,這意味着有人得到了一個沒有通過池去的連接。您可能希望將其添加到現有的集合反正,或者只是關閉它,把它扔掉。)
基本上就是這樣。當然,有一些細節需要考慮。像:
如果有上的最大連接數有限制嗎?如果是這樣,你必須保持計算你已經發出的連接數量,並且如果新的請求將超過該限制,則拋出異常而不是返回連接。 (或者可能返回null,具體取決於您想如何處理它。)
應該對可用池中保留的連接數有限制嗎?如果是這樣,當一個連接被釋放,而是將其自動添加到可用池,檢查池已經是最大尺寸,如果是,關閉連接,而不是將其返回到池。
get-connection函數在返回之前測試連接是個好主意。例如,當連接坐在游泳池中時,連接可能已超時。也許你可以發送一些低成本的消息,並確保你得到有效的回覆。
擁有已使用集合的主要原因是您可以監視連接泄漏,即有人請求連接,然後永不放棄它。我不是直接將連接放入已使用的集合中,而是通常創建一個包裝對象來保存它,同時也保留了它所發出的時間。然後,我放入一個函數,該函數使用一個計時器調用,該函數循環遍歷所使用的集合,並檢查是否有任何已經存在的可觀的長時間。根據連接的類型,您可能能夠檢查它最後一次實際使用的時間,或者做一些其他測試以查看調用者是否真的仍在使用它,或者如果它是連接泄漏。如果您知道您可以識別連接泄漏,您可以關閉它或將其返回到可用池。否則,您至少可以向日志中寫入消息,並定期檢查日誌以查看是否存在泄漏問題並將其解決。如果你沒有做任何連接泄漏跟蹤,那麼使用的集合可能是多餘的,可以消除。
這裏有幾個想法:
A.使用對象池。例如,您可以使用this之一。
這將讓你擁有幾個Unix連接池。 B.在應用程序級別進行某種類型的會話管理,
並擁有一個會話上下文,該會話上下文將保存從池中獲取的對象的引用。
會話開始後 - 您將嘗試從池中獲取連接。
一旦會話結束,您將返回連接到池。
請記住,您的應用程序會話與池中保存的對象之間可能沒有1:1的比例。
處理這個問題的一個可能的策略是在初始大小X處創建一個池,並且如果需要的話,讓它長到Y的大小。
,你將需要處理的另一個問題,是可能有某種「保活」請檢查您的連接活着
兩個策略我能想到的這裏有:
A.有定期檢查在連接上(比方說 - 使用ping)。
B.如果池中的某個連接斷開,則創建一個新連接。
- 1. 連接池關機android
- 2. 從本地機器上的Java代碼在AWS EMR連接HDFS
- 3. Java,JDBC連接池,JDBC連接回滾
- 4. 此代碼池是否連接SQL連接?
- 5. 檢查Java HTTP連接池
- 6. java中的連接池
- 7. Java中的連接池
- 8. Java連接池實現
- 9. Java中的Oracle連接池
- 10. Java池連接優化
- 11. Java連接池選項
- 12. Java SE中的連接池?
- 13. Java中的Mysql連接池
- 14. PHP vs Java MySQL連接池
- 15. 有沒有辦法從C#代碼檢查池中的連接?
- 16. 從本機代碼調用Java代碼?
- 17. C3P0連接池與MySQL連接池
- 18. Jboss連接池或休眠連接池
- 19. Tomcat連接池概念&c3p0連接池?
- 20. Java:建立套接字連接池
- 21. 動態更改從Java JNI連接池獲取的連接的連接屬性
- 22. 從手機連接到數碼相機?
- 23. 如何用java代碼連接java代碼?
- 24. 連接池 - 無連接
- 25. asyncpg - 連接vs連接池
- 26. PreparedStatement的池連接池
- 27. 對象池vs連接池
- 28. 文件池(如連接池)
- 29. OrientDB連接池
- 30. eclipselink連接池
你真的需要一個池嗎?或者你只需要在你的類之間傳遞SSHExec實例? – MarkOfHall
我不確定它是否可以正常工作,因爲這些調用是從不同的java類中的事件監聽器方法生成的,我如何從監聽器傳遞sshxcute實例。那麼他們怎麼能在第一個地方得到相同的sshxcute實例.. – stallion