1+ 'use strict' ;
2+
3+ // Tests concurrent async jdbc connections.
4+ // TODO: a proper jdbc wrapper should be created to avoid ugly async code.
5+
6+ var memwatch = require ( 'memwatch' ) ;
7+ var async = require ( 'async' ) ;
8+
9+ // 1 - 23,305ms
10+ // 10 - 8,846ms
11+ var concurrency = 10 ;
12+
13+ //var dbServerName = '192.168.13.190';
14+ //var dbPort = 1433;
15+ //var dbName = 'test';
16+ //var dbUserId = 'test';
17+ //var dbPassword = 'test';
18+ //var dbConnectString = 'jdbc:sqlserver://' + dbServerName + ':' + dbPort + ';databaseName=' + dbName + ';selectMethod=direct;responseBuffering=adaptive;packetSize=0;programName=nodeJavaTest;hostProcess=nodeJavaTest;sendStringParametersAsUnicode=false;';
19+ //var dbConnectionClass = 'com.microsoft.sqlserver.jdbc.SQLServerDriver';
20+
21+ var dbUserId = 'test' ;
22+ var dbPassword = 'test' ;
23+ var dbConnectString = "jdbc:mysql://localhost/test" ;
24+ var dbConnectionClass = 'com.mysql.jdbc.Driver' ;
25+
26+ var util = require ( 'util' ) ;
27+ var path = require ( 'path' ) ;
28+ var java = require ( '../../' ) ;
29+ java . classpath . push ( path . join ( __dirname , 'sqljdbc4.jar' ) ) ;
30+ java . classpath . push ( path . join ( __dirname , 'mysql-connector-java-5.1.22-bin.jar' ) ) ;
31+ var DriverManager = java . import ( 'java.sql.DriverManager' ) ;
32+
33+ setTimeout ( function ( ) {
34+ console . log ( 'start heap diff' ) ;
35+ var hd = new memwatch . HeapDiff ( ) ;
36+ var loopStart = new Date ( ) ;
37+
38+ java . findClassSync ( dbConnectionClass ) ;
39+
40+ var loopIterations = [ ] ;
41+ for ( var i = 0 ; i < 5000 ; i ++ ) {
42+ loopIterations . push ( i ) ;
43+ }
44+
45+ async . forEachLimit (
46+ loopIterations ,
47+ concurrency ,
48+ function ( loopCount , callback ) {
49+ console . log ( 'loopCount:' , loopCount ) ;
50+ return doLoop ( callback ) ;
51+ } ,
52+ function ( err ) {
53+ if ( err ) {
54+ console . log ( "fail" , err ) ;
55+ }
56+ var loopEnd = new Date ( ) ;
57+ console . log ( 'end loop' , loopEnd - loopStart ) ;
58+ memwatch . gc ( ) ;
59+ var diff = hd . end ( ) ;
60+ console . log ( util . inspect ( diff . change , false , 10 , true ) ) ;
61+
62+ console . log ( "done... waiting 30seconds" ) ;
63+ setTimeout ( function ( ) {
64+ console . log ( "really done" ) ;
65+ } , 30 * 1000 ) ;
66+ }
67+ ) ;
68+ } , 1 ) ;
69+
70+ function doLoop ( callback ) {
71+ var conn ;
72+ var columnCount ;
73+ var rs ;
74+
75+ return DriverManager . getConnection ( dbConnectString , dbUserId , dbPassword , getConnectionComplete ) ;
76+
77+ function getConnectionComplete ( err , _conn ) {
78+ if ( err ) {
79+ return callback ( err ) ;
80+ }
81+ conn = _conn ;
82+
83+ //console.log("connected");
84+ var statement = conn . createStatementSync ( ) ;
85+ var queryString = "select * from Person" ;
86+ return statement . executeQuery ( queryString , executeQueryComplete ) ;
87+ }
88+
89+ function executeQueryComplete ( err , _rs ) {
90+ if ( err ) {
91+ return callback ( err ) ;
92+ }
93+ rs = _rs ;
94+
95+ columnCount = rs . getMetaDataSync ( ) . getColumnCountSync ( ) ;
96+
97+ var rsComplete = false ;
98+ async . until (
99+ function ( ) { return rsComplete ; } ,
100+ function ( callback ) {
101+ return rs . next ( function ( err , rsNextResult ) {
102+ if ( err ) {
103+ return callback ( err ) ;
104+ }
105+ if ( ! rsNextResult ) {
106+ rsComplete = true ;
107+ return callback ( ) ;
108+ }
109+ return printRow ( callback ) ;
110+ } ) ;
111+ } ,
112+ function ( err ) {
113+ if ( err ) {
114+ return callback ( err ) ;
115+ }
116+ return conn . close ( callback ) ;
117+ }
118+ ) ;
119+ }
120+
121+ function printRow ( callback ) {
122+ for ( var i = 1 ; i <= columnCount ; i ++ ) {
123+ var obj = rs . getObjectSync ( i ) ;
124+ if ( obj ) {
125+ if ( obj . hasOwnProperty ( 'getClassSync' ) ) {
126+ if ( obj . getClassSync ( ) . toString ( ) == 'class java.math.BigDecimal' ) {
127+ //console.log(obj.doubleValueSync());
128+ continue ;
129+ }
130+ if ( obj . getClassSync ( ) . toString ( ) == 'class java.sql.Timestamp' ) {
131+ //console.log(obj.getTimeSync());
132+ continue ;
133+ }
134+ //console.log("class:", obj.getClassSync().toString());
135+ }
136+ //console.log(obj);
137+ }
138+ }
139+ return callback ( ) ;
140+ }
141+ }
0 commit comments