1. 程式人生 > >jdbc14 及 jdbc16 共存所帶來的問題【未完待續】

jdbc14 及 jdbc16 共存所帶來的問題【未完待續】

在JAVA中JDK版本與JDBC版本的一致性十分重要,開發都們常常會忽略了這一點導致很多不必要的錯誤。昨天給客戶排查了一個關於EDB在JBoss中使用時關於這方面的問題,希望給大家一點啟發。

系統環境:

Red Hat Enterpirse Linux 6

JBoss Enterprise Application Server 6

EnterpriseDB Postgres Plus Advanced Server 9

Oracle JDK 1.6

問題症狀:

在JBoss日誌中間歇性地出現以下錯誤

java.sql.SQLException: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:/jdbc/DSZY101----Caused by: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:/jdbc/DSZY101--       at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:390)--         at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:368)--         at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:464)--         at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:159)--         at jp.co.toyota.perz060.servlet.CCERZ060.getConnection(CCERZ060.java:489)--   at jp.co.toyota.perz060.servlet.CCERZ060.doPost(CCERZ060.java:118)--         at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)--      at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)--  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--        at jp.co.toyota.pzy1352.util.CIZY1392.doFilter(CIZY1392.java:362)--        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)--  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--        at jp.co.toyota.pzy1900.util.CIZY1947.doFilter(CIZY1947.java:99)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)--  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)--     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)--        at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)--     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)-- at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)--     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)--   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)--     at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:505)--        at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:452)--       at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931)--      at java.lang.Thread.run(Thread.java:662)----Caused by: javax.resource.ResourceException: IJ000658: Unexpected throwable while trying to create a connection: null--          at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.getConnection(SemaphoreArrayListManagedConnectionPool.java:371)--         at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getSimpleConnection(AbstractPool.java:397)--    at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:365)--   at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:329)--         at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:368)--         at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:464)--         at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:159)--         at jp.co.toyota.perz060.servlet.CCERZ060.getConnection(CCERZ060.java:489)--   at jp.co.toyota.perz060.servlet.CCERZ060.doPost(CCERZ060.java:118)--         at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)--      at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)--  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--        at jp.co.toyota.pzy1352.util.CIZY1392.doFilter(CIZY1392.java:362)--        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)--  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--        at jp.co.toyota.pzy1900.util.CIZY1947.doFilter(CIZY1947.java:99)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)--  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)--     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)--        at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)--     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)-- at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)--     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)--   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)--     at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:505)--        at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:452)--       at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931)--      at java.lang.Thread.run(Thread.java:662)----Caused by: javax.resource.ResourceException: Could not create connection-- at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:277)--         at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:235)--         at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.createConnectionEventListener(SemaphoreArrayListManagedConnectionPool.java:761)--         at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.getConnection(SemaphoreArrayListManagedConnectionPool.java:343)--         at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getSimpleConnection(AbstractPool.java:397)--    at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:365)--   at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:329)--         at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:368)--         at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:464)--         at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:159)--         at jp.co.toyota.perz060.servlet.CCERZ060.getConnection(CCERZ060.java:489)--   at jp.co.toyota.perz060.servlet.CCERZ060.doPost(CCERZ060.java:118)--         at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)--      at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)--  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--        at jp.co.toyota.pzy1352.util.CIZY1392.doFilter(CIZY1392.java:362)--        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)--  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--        at jp.co.toyota.pzy1900.util.CIZY1947.doFilter(CIZY1947.java:99)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)--  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)--     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)--        at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)--     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)-- at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)--     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)--   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)--     at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:505)--        at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:452)--       at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931)--      at java.lang.Thread.run(Thread.java:662)----Caused by: com.edb.util.PSQLException: The connection attempt failed.--        at com.edb.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:189)--   at com.edb.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)--        at com.edb.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:161)--        at com.edb.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)-- at com.edb.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:23)--   at com.edb.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:31)-- at com.edb.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:25)--     at com.edb.Driver.makeConnection(Driver.java:391)-- at com.edb.Driver.connect(Driver.java:266)--    at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:249)--         at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:235)--         at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.createConnectionEventListener(SemaphoreArrayListManagedConnectionPool.java:761)--         at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.getConnection(SemaphoreArrayListManagedConnectionPool.java:343)--         at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getSimpleConnection(AbstractPool.java:397)--    at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:365)--   at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:329)--         at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:368)--         at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:464)--         at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:159)--         at jp.co.toyota.perz060.servlet.CCERZ060.getConnection(CCERZ060.java:489)--   at jp.co.toyota.perz060.servlet.CCERZ060.doPost(CCERZ060.java:118)--         at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)--      at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)--  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--        at jp.co.toyota.pzy1352.util.CIZY1392.doFilter(CIZY1392.java:362)--        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)--  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--        at jp.co.toyota.pzy1900.util.CIZY1947.doFilter(CIZY1947.java:99)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)--  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)--     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)--        at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)--     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)-- at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)--     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)--   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)--     at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:505)--        at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:452)--       at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931)--      at java.lang.Thread.run(Thread.java:662)----Caused by: java.net.SocketException: Too many open files--      at java.net.Socket.createImpl(Socket.java:397)--  at java.net.Socket.<init>(Socket.java:371)--        at java.net.Socket.<init>(Socket.java:189)--   at com.edb.core.PGStream.<init>(PGStream.java:70)--     at com.edb.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:115)--   at com.edb.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)--        at com.edb.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:161)--        at com.edb.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)-- at com.edb.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:23)--   at com.edb.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:31)-- at com.edb.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:25)--     at com.edb.Driver.makeConnection(Driver.java:391)-- at com.edb.Driver.connect(Driver.java:266)--    at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:249)--         at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:235)--         at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.createConnectionEventListener(SemaphoreArrayListManagedConnectionPool.java:761)--         at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.getConnection(SemaphoreArrayListManagedConnectionPool.java:343)--         at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getSimpleConnection(AbstractPool.java:397)--    at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:365)--   at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:329)--         at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:368)--         at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:464)--         at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:159)--         at jp.co.toyota.perz060.servlet.CCERZ060.getConnection(CCERZ060.java:489)--   at jp.co.toyota.perz060.servlet.CCERZ060.doPost(CCERZ060.java:118)--         at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)--      at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)--  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--        at jp.co.toyota.pzy1352.util.CIZY1392.doFilter(CIZY1392.java:362)--        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)--  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--        at jp.co.toyota.pzy1900.util.CIZY1947.doFilter(CIZY1947.java:99)-- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)--  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)--        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)--     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)--        at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)--     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)-- at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)--     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)--   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)--     at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:505)--        at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:452)--       at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931)--      at java.lang.Thread.run(Thread.java:662)--
             E 2014-06-15 20:27:44.272 XML - 0 - -

問題分析:

  1. 從上面的錯誤程式碼中可見“javax.resource.ResourceException: IJ000658: Unexpected throwable while trying to create a connection: null”,從經驗上判斷這可能是由於JDK版本與JDBC不匹配所造成的。當前各資料庫都有類似的操作方式,通常針對JDK 1.6以下版本,及1.6以上版本會發布不同的JDBC驅動包,以EDB為例會有:
    edb-jdbc14.jar 對應 JDK1.6以下版本;
    edb-jdbc16.jar 對應 JDK1.6及以上版本。

  2. 由以上懷疑點要求客戶調出系統中存放JDBC驅動的目錄,發現在此目錄下同時存在以上兩個版本的jar檔案,同時此目錄中有一個module.xml檔案,當中記憶體如下:
    <
    modulexmlns="urn:jboss:module:1.0"name="com.edb"> <resources> <resource-rootpath="edb-jdbc16.jar"/> </resources> <dependencies><modulename="javax.api"/></dependencies> </module> 從此檔案中可以看到JBoss中已經明確指定使用edb-jdbc16.jar,因此即使目錄中同時也有edb-jdbc14.jar,JBoss應該是不會對它進行呼叫的。

  3. 進一步分析,客戶告知在他們的程式碼中有可能出現以下操作:
    Class.forName("com.edb.Driver");
    String url      = "jdbc:edb://xxx.xxx.xxx.xxx:5444/edb";
    String user     = "enterprisedb";
    String password = "xxxxxxx";
    Connection con  = DriverManager.getConnection(url, user, password);
    Statement stmt  = con.createStatement();
    ResultSet rs    = stmt.executeQuery("SELECT * FROM emp");
    ......
    由此推斷如果客戶程式碼中存在以上操作,在執行此操作時將不授JBoss中的配置影響而直接通過JDK呼叫可以找到的JDBC。由於目錄中存在edb-jdbc14.jar,而從目錄的搜尋角度14排在16之前,因此程式在執行以上操作時很可能會使用了edb-jdbc14.jar。在JAVA進行資料序列化操作時,因版本不對應就有可能產生以上問題。這就解析了為何只有少量操作報連線無法找到而不是全部資料庫連線均報錯。

  4. 進一步檢查在另一套客戶的測試環境中沒有出現以上錯誤,而此測試環境下只有edb-jdbc16.jar驅動

  5. 從EDB資料庫方面分析,在資料庫日誌中並沒有在此上述時段收到連線,也沒有相應錯誤。判斷:JAVA端在獲得連線Socket埠後由於版本不對應,無法序列化,因此可能根本上就沒有傳送使用者名稱、密碼等登陸資訊,因此資料庫沒有任何日誌。

  6. 綜上所述基本定位問題所在

分析圖解:


解決方案:

  1. 申請停機時間,進行完整測試及修復;
  2. 建議將目錄中的edb-jdbc14.jar刪除;
  3. 嚴格保證日後所有專案中對應一個數據庫只有一個JDBC;
  4. 在JBoss框架下嚴格使用JNDI或其他公共方式進行連線,避免在JAVA程式中通過直接呼叫getConnection方式進行資料庫連線;

解決結果【未進行】:

當前以上所暴露的問題只是一個推斷,由於客戶當前是一個生產系統,無法現場進行測試及修復。【未完待續】

相關推薦

jdbc14 jdbc16 共存帶來的問題待續

在JAVA中JDK版本與JDBC版本的一致性十分重要,開發都們常常會忽略了這一點導致很多不必要的錯誤。昨天給客戶排查了一個關於EDB在JBoss中使用時關於這方面的問題,希望給大家一點啟發。 系統環境: Red Hat Enterpirse Linux 6 JBoss

Python自動化開發(一)待續

urn sts dha sel def open entos div 初始 1、創建項目    2、創建models from django.db import models # Create your models here. # 主機表 class Host(m

Measuring Similarity between Clusters (Clusters 之間相似度的測量)待續

綜述 測量clusters(聚類)之間距離的方法一般可以分為四類, single linkage, complete linkage, average linkage , average groups linkage Single linkage 用兩個聚類中相鄰最近的點來做

基於Dubbo框架構建分散式服務待續

手機應用是以聊天室為基礎的,我們需要收集使用者的操作行為,然後計算聊天室中線上人數,並實時在手機應用端顯示人數,整個系統的架構如圖所示: 上圖中,主要包括了兩大主要流程:日誌收集並實時處理流程、呼叫讀取實時計算結果流程,我們使用基於Dubbo框架開發的服務來提供實時計算結果讀取聊天人數的功能。上圖中,實

[DIY]自制一個有漂亮外觀的90W 203H高頻焊臺 ---待續

//****************************前言 begin*********************************************// TB廢品價收了幾個CB機玩,多出來一個故障不明的壞機器,外殼很漂亮,一直想著可以把它改造成個儀器裝置

畢業工作大記事待續持續更新。。。。

我感覺我從08年畢業到現在也是很長的一段時間了,老是想寫個回憶錄之類的來記錄自己的這段經歷,所以才有了這篇文章。由於老是想不起來定期更新,所以進度老是很慢,寫一步算一步吧。現在csdn上的人好像也沒以前多了。 言歸正傳。 第一章      

windows7下的docker的安裝使用(持續更新,待續,每天一點點)

1.驗證電腦是否支援docker docker需要支援微軟的硬體虛擬化技術,且windows10只支援專業版(由於不用windows10請自行百度吧),windows10的安裝和windows7不同,windows7,8需要Toolbox,而windows10不用

PTA PAT Judge 模擬題,待續

The ranklist of PAT is generated from the status list, which shows the scores of the submittions. This time you are supposed to gen

unity 鼠標點擊AI尋路

ima 障礙 mesh 技術分享 ges blog com 創建 靜態 先創建一個場景,立方體為障礙物,膠囊為玩家。 然後創建NavMesh,選擇plane和立方體,並在導航窗口的對象選項卡上選擇導航靜態。 然後去轉到烘焙選項卡,點擊烘焙按鈕: 【unity】 鼠標點擊

MNIST手寫數字圖片識別(線性回歸、CNN方法的手工框架實現)(待續

shape 初始化 result rect not found pro res edi ise 0-Background 作為Deep Learning中的Hello World 項目無論如何都要做一遍的。 代碼地址:Github 練習過程中將持續更新blog及代碼。 第一

解決問題指針

不知道 解決問題 註釋 get all test span print world 1 void GetMemory(char* p) 2 { 3 p=(char*)malloc(100); 4 } 5 void Test(void) 6 { 7

tomcatsessionId學習(待續)

cookie 動態 logs ole get edi ioe class iter()   這裏主要研究tomcat中session的管理方式以及sessionId的原理,下文將研究sessionid存到redis中以及基於redis以及redis實現session共享。

快速安裝Nginx配置詳解(待續

導讀: Nginx (engine x) 是一個高效能的HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP伺服器,從2007年被德國人開發出來後可以說在市場的佔有率一路飆升,因為它支援高併發,而且還能阻止dos攻擊,它是當前較具影響力的一個http伺服器軟體,像百度等大廠都使用它,所以這是作為一

設計模式總結對常用設計模式的一些思考(待續。。。)

前言 在【Java設計模式】系列中,LZ寫了十幾篇關於設計模式的文章,大致是關於每種設計模式的作用、寫法、優缺點、應用場景。 隨著LZ自身的成長,再加上在工作中會從事一定的架構以及底層程式碼設計的原因,在近半年的實踐中,對於設計模式的理解又有了新的認識,因此有了此文,目的

理解es6系列-----proxy和refection----待續

什麼是proxy和refection 通過 new Proxy()可 生成一個proxy來代替目標物件(target object)來使用。它等於目標物件的虛擬化,對於使用了該proxy的方法而言,二者看起來是一樣的。通過proxy可以一窺原來只能由js引擎

最近公共父節點(LCA)

1.如果只需要求一對,最簡單的方法是使用遞迴查詢。判斷要查詢的結點u,v是否同在左子樹(向下查詢)、右子樹(向下查詢)或左右子樹都有(根節點即為最近公共父節點)。 class Solution { public: TreeNode * lowestCommonAncestor(Tre

計蒜客2018藍橋杯省賽B組模擬賽(一)題目解析(待續

一、題目列表 A. 結果填空:年齡         分值: 3 B. 結果填空:開關燈     分值: 7 C. 結果填空:U型數字  分值: 9 D. 程式碼填空:LIS         分值: 11 E. 程式碼填空:全排列   分值: 13 F. 結果填空:數獨  

Scala in Spark 基本操作

# 建立textFileRDD val textFile = sc.textFile("README.md") textFile.first() #獲取textFile RDD的第一個元素 res3:String = # Apache

redisson分散式鎖redLock原始碼解析

一、準備階段 1、原理 一個客戶端需要做如下操作來獲取鎖: 1.獲取當前時間(單位是毫秒) 2.輪流用相同的key和隨機值在N個節點上請求鎖,在這一步裡,客戶端在每個master上請求鎖時會有一個和總的鎖釋放時間相比小的多的超時

OrmLite框架 —— OrmLite 框架封裝使用(三)(

OrmLite 三篇文章 介紹 封裝後的工程方便對OrmLite 的使用 整合方法 建立 Helper 類,繼承 OrmDatabaseHelper 類 實現 cre