Mercurial > hg > ltpda-connection-manager
annotate LTPDAConnectionManager.m @ 4:c706c10a76bd
Add help comments.
author | Daniele Nicolodi <daniele@science.unitn.it> |
---|---|
date | Mon, 24 May 2010 00:14:37 +0200 |
parents | d5fef23867bb |
children | 35f1cfcaa5a9 |
rev | line source |
---|---|
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
1 classdef LTPDAConnectionManager < handle |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
2 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
3 properties(SetAccess=private) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
4 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
5 connections = {}; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
6 credentials = {}; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
7 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
8 end % private properties |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
9 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
10 properties(Dependent=true) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
11 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
12 credentialsExpiry; % seconds |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
13 cachePassword; % 0=no 1=yes 2=ask |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
14 maxConnectionsNumber; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
15 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
16 end % dependent properties |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
17 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
18 methods(Static) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
19 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
20 function reset() |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
21 % RESET Resets the state of the connection manager. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
22 % |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
23 % This static method removes the LTPDAConnectionManager instance data from |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
24 % the appdata storage. Causes the reset of the credentials cache and the |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
25 % removal of all the connections from the connection pool. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
26 |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
27 rmappdata(0, LTPDAConnectionManager.appdataKey); |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
28 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
29 |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
30 |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
31 function key = appdataKey() |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
32 % APPDATAKEY Returns the key used to store instance data in appdata. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
33 % |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
34 % This is defined as static method, and not has an instance constant |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
35 % property, to to be accessible by the reset static method. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
36 |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
37 key = 'LTPDAConnectionManager'; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
38 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
39 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
40 end % static methods |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
41 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
42 methods |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
43 |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
44 function cm = LTPDAConnectionManager() |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
45 % LTPDACONNECTIONMANAGER Manages credentials and database connections. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
46 % |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
47 % This constructor returns an handler to a LTPDAConnectionManager class |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
48 % instance. Database connections can be obtained trough the obtained |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
49 % object with the connect() method. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
50 % |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
51 % The purpose of this class it to keep track of open database connections |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
52 % and to cache database credentials. It must be used in all LTPDA toolbox |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
53 % functions that required to obtain database connections. Its behaviour can |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
54 % be configured via LTPDA toolbox user preferences. The object status is |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
55 % persisted trough the appdata matlab facility. |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
56 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
57 % load state from appdata |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
58 acm = getappdata(0, cm.appdataKey()); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
59 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
60 if isempty(acm) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
61 % take those from user preferences |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
62 cm.credentials{end+1} = credentials('localhost', 'one'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
63 cm.credentials{end+1} = credentials('localhost', 'two', 'daniele'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
64 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
65 % store state in appdata |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
66 setappdata(0, cm.appdataKey(), cm); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
67 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
68 import utils.const.* |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
69 utils.helper.msg(msg.PROC1, 'new connection manager'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
70 else |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
71 cm = acm; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
72 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
73 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
74 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
75 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
76 function val = get.credentialsExpiry(cm) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
77 % obtain from user preferences |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
78 p = getappdata(0, 'LTPDApreferences'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
79 val = p.cm.credentialsExpiry; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
80 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
81 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
82 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
83 function val = get.cachePassword(cm) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
84 % obtain from user preferences |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
85 p = getappdata(0, 'LTPDApreferences'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
86 val = p.cm.cachePassword; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
87 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
88 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
89 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
90 function val = get.maxConnectionsNumber(cm) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
91 % obtain from user preferences |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
92 p = getappdata(0, 'LTPDApreferences'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
93 val = p.cm.maxConnectionsNumber; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
94 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
95 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
96 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
97 function n = count(cm) |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
98 % COUNT Returns the number of open connections in the connections pool. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
99 % |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
100 % This method has the side effect of removing all closed connections from |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
101 % the connections pool, so that the underlying objects can be garbage |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
102 % collected. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
103 |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
104 import utils.const.* |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
105 |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
106 % find closed connections in the pool |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
107 mask = false(numel(cm.connections), 1); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
108 for kk = 1:numel(cm.connections) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
109 if cm.connections{kk}.isClosed() |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
110 utils.helper.msg(msg.PROC1, 'connection id=%d closed', kk); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
111 mask(kk) = true; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
112 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
113 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
114 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
115 % remove them |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
116 cm.connections(mask) = []; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
117 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
118 % count remainig ones |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
119 n = numel(cm.connections); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
120 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
121 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
122 function clear(cm) |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
123 % CLEAR Removes all cached credentials from the connection manager. |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
124 cm.credentials = {}; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
125 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
126 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
127 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
128 function conn = connect(cm, varargin) |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
129 % CONNECT Uses provided credential to establish a database connection. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
130 % |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
131 % CONNECT(hostname, database, username, password) Returns an object |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
132 % implementing the java.sql.Connection interface handing a connection to |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
133 % the specified database. Any of the parameter is optional. The user will |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
134 % be queried for the missing information. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
135 % |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
136 % The returned connection are added to a connections pool. When the number |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
137 % of connections in the pool exceeds a configurable maximum, no more |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
138 % connection are instantiated. Closed connections are automatically |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
139 % removed from the pool. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
140 % |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
141 % CONNECT(pl) Works as the above but the parameters are obtained from the |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
142 % plist object PL. If the 'connection' parameter in the plist contains an |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
143 % object implementing the java.sql.Connection interface, this object is |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
144 % returned instead that opening a new connection. In this case the |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
145 % connection in not added to the connection pool. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
146 |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
147 import utils.const.* |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
148 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
149 % save current credentials cache |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
150 cache = cm.credentials; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
151 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
152 % count open connections in the pool |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
153 count = cm.count(); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
154 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
155 % check parameters |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
156 if numel(varargin) == 1 && isa(varargin{1}, 'plist') |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
157 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
158 % extract parameters from plist |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
159 pl = varargin{1}; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
160 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
161 % check if we have a connection parameter |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
162 conn = find(pl, 'connection'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
163 if ~isempty(conn) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
164 % check that it implements java.sql.Connection interface |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
165 if ~isa(conn, 'java.sql.Connection') |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
166 error('### connection is not valid database connection'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
167 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
168 % return this connection |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
169 return; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
170 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
171 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
172 % otherwise |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
173 hostname = find(pl, 'hostname'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
174 database = find(pl, 'database'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
175 username = find(pl, 'username'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
176 password = find(pl, 'password'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
177 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
178 % if there is no hostname and database ignore other parameters |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
179 if ~ischar(hostname) || ~ischar(database) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
180 varargin = {}; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
181 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
182 % password can not be null but can be an empty string |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
183 if ~ischar(password) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
184 varargin = {hostname, database, username}; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
185 else |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
186 varargin = {hostname, database, username, password}; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
187 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
188 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
189 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
190 % check number of connections |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
191 if count > cm.maxConnectionsNumber |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
192 error('### too many open connections'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
193 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
194 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
195 % connect |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
196 try |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
197 conn = cm.getConnection(varargin{:}); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
198 catch ex |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
199 % restore our copy of the credentials cache |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
200 utils.helper.msg(msg.PROC1, 'undo cache changes'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
201 cm.credentials = cache; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
202 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
203 % hide implementation details |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
204 %ex.throwAsCaller(); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
205 ex.rethrow() |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
206 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
207 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
208 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
209 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
210 function close(cm, ids) |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
211 % CLOSE Forces connections to be closed. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
212 % |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
213 % In the case bugs in other routines working with database connections |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
214 % produce orphan connections, this method can be used to force the close |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
215 % of those connections. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
216 % |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
217 % CLOSE(ids) Closes the connections with the corresponding IDs in the |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
218 % connections pool. If no ID is given all connections in the pool are |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
219 % closed. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
220 |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
221 if nargin < 2 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
222 ids = 1:numel(cm.connections); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
223 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
224 cellfun(@close, cm.connections(ids)); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
225 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
226 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
227 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
228 function add(cm, c) |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
229 % ADD Adds credentials to the credentials cache. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
230 % |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
231 % This method can be used to initialize or add to the cache, credentials |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
232 % that will be used in subsequent connections attempts. This method accepts |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
233 % only credentials in the form of utils.jmysql.credentials objects. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
234 |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
235 % check input arguments |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
236 if nargin < 2 || ~isa(c, 'credentials') |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
237 error('### invalid call'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
238 end |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
239 |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
240 % add to the cache |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
241 cm.cacheCredentials(c); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
242 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
243 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
244 end % methods |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
245 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
246 methods(Access=private) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
247 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
248 function conn = getConnection(cm, varargin) |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
249 % GETCONNECTION Where the implementation of the connect method really is. |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
250 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
251 import utils.const.* |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
252 |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
253 % handle variable number of arguments |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
254 switch numel(varargin) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
255 case 0 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
256 [hostname, database, username] = cm.selectDatabase(); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
257 conn = cm.getConnection(hostname, database, username); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
258 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
259 case 2 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
260 conn = cm.getConnection(varargin{1}, varargin{2}, []); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
261 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
262 case 3 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
263 % find credentials |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
264 cred = cm.findCredentials(varargin{1}, varargin{2}, varargin{3}); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
265 if isempty(cred) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
266 % no credentials found |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
267 cred = credentials(varargin{1}, varargin{2}, varargin{3}); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
268 else |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
269 utils.helper.msg(msg.PROC1, 'use cached credentials'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
270 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
271 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
272 cache = false; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
273 if numel(cred) > 1 || ~cred.complete |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
274 % ask for which username and password to use |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
275 [username, password, cache] = cm.inputCredentials(cred); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
276 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
277 % cache credentials |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
278 cred = credentials(varargin{1}, varargin{2}, username); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
279 cm.cacheCredentials(cred); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
280 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
281 % add password to credentials |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
282 cred.password = password; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
283 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
284 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
285 % try to connect |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
286 conn = cm.getConnection(cred.hostname, cred.database, cred.username, cred.password); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
287 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
288 % cache password |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
289 if cache |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
290 utils.helper.msg(msg.PROC1, 'cache password'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
291 cm.cacheCredentials(cred); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
292 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
293 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
294 case 4 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
295 try |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
296 % connect |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
297 conn = connect(varargin{1}, varargin{2}, varargin{3}, varargin{4}); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
298 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
299 % cache credentials without password |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
300 cred = credentials(varargin{1}, varargin{2}, varargin{3}, []); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
301 cm.cacheCredentials(cred); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
302 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
303 catch ex |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
304 % look for access denied errors |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
305 if strcmp(ex.identifier, 'utils:jmysql:connect:AccessDenied') |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
306 % ask for new new credentials |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
307 utils.helper.msg(msg.PROC1, ex.message); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
308 conn = cm.getConnection(varargin{1}, varargin{2}, varargin{3}); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
309 else |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
310 % error out |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
311 throw(MException('', '### connection error').addCause(ex)); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
312 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
313 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
314 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
315 % add connection to pool |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
316 utils.helper.msg(msg.PROC1, 'add connection to pool'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
317 cm.connections{end+1} = conn; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
318 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
319 otherwise |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
320 error('### invalid call') |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
321 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
322 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
323 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
324 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
325 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
326 function ids = findCredentialsId(cm, varargin) |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
327 % FINDCREDENTIALSID Find credentials in the cache and returns their IDs. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
328 |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
329 import utils.const.* |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
330 ids = []; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
331 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
332 for kk = 1:numel(cm.credentials) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
333 % invalidate expired passwords |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
334 if expired(cm.credentials{kk}) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
335 utils.helper.msg(msg.PROC1, 'cache entry id=%d expired', kk); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
336 cm.credentials{kk}.password = []; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
337 cm.credentials{kk}.expiry = 0; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
338 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
339 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
340 % match input with cache |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
341 if match(cm.credentials{kk}, varargin{:}) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
342 ids = [ ids kk ]; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
343 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
344 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
345 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
346 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
347 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
348 function cred = findCredentials(cm, varargin) |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
349 % FINDCREDENTIALS Find credentials in the cache and returns them in a list. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
350 |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
351 % default |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
352 cred = []; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
353 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
354 % search |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
355 ids = findCredentialsId(cm, varargin{:}); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
356 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
357 % return an array credentials |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
358 if ~isempty(ids) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
359 cred = [ cm.credentials{ids} ]; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
360 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
361 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
362 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
363 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
364 function cacheCredentials(cm, c) |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
365 % CACHECREDENTIALS Adds to or updates the credentials cache. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
366 |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
367 import utils.const.* |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
368 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
369 % find entry to update |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
370 id = findCredentialsId(cm, c.hostname, c.database, c.username); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
371 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
372 % sanity check |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
373 if numel(id) > 1 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
374 error('### more than one cache entry for %s', char(c, 'short')); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
375 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
376 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
377 % set password expiry time |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
378 if ischar(c.password) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
379 c.expiry = double(time()) + cm.credentialsExpiry; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
380 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
381 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
382 if isempty(id) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
383 % add at the end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
384 utils.helper.msg(msg.PROC1, 'add cache entry %s', char(c)); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
385 cm.credentials{end+1} = c; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
386 else |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
387 % update only if the cached informations are less than the one we have |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
388 if ~complete(cm.credentials{id}) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
389 utils.helper.msg(msg.PROC1, 'update cache entry id=%d %s', id, char(c)); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
390 cm.credentials{id} = c; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
391 else |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
392 % always update expiry time |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
393 cm.credentials{id}.expiry = c.expiry; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
394 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
395 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
396 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
397 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
398 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
399 function [username, password, cache] = inputCredentials(cm, cred) |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
400 % INPUTCREDENTIALS Queries the user for database username and password. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
401 |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
402 % this is a stubb that must be replaced by a graphical interface |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
403 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
404 % build a cell array of usernames and passwords |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
405 users = { cred(:).username }; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
406 passw = { cred(:).password }; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
407 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
408 % default to the latest used username |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
409 [e, ids] = sort([ cred(:).expiry ]); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
410 default = users{ids(1)}; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
411 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
412 username = choose('Username', users, default); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
413 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
414 % pick the corresponding password |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
415 ids = find(strcmp(users, username)); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
416 if ~isempty(ids) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
417 default = passw{ids(1)}; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
418 else |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
419 default = []; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
420 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
421 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
422 password = ask('Password', ''); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
423 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
424 if cm.cachePassword == 2 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
425 cache = ask('Store credentials', 'n'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
426 if ~isempty(cache) && cache(1) == 'y' |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
427 cache = true; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
428 else |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
429 cache = false; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
430 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
431 else |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
432 cache = logical(cm.cachePassword); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
433 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
434 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
435 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
436 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
437 function [hostname, database, username] = selectDatabase(cm) |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
438 % SELECTDATABASE Makes the user choose to which database connect to. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
439 |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
440 % this is a stubb that must be replaced by a graphical interface |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
441 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
442 for kk = 1:numel(cm.credentials) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
443 fprintf('% 2d. %s\n', char(cm.credentials{kk})); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
444 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
445 fprintf('%d. NEW (default)\n', numel(cm.credentials)+1); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
446 str = input('Select connection: ', 's'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
447 if isempty(str) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
448 id = numel(cm.credentials)+1; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
449 else |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
450 id = eval(str); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
451 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
452 if id > numel(cm.credentials) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
453 hostname = input('Hostname: ', 's'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
454 database = input('Database: ', 's'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
455 username = []; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
456 else |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
457 hostname = cm.credentials{kk}.hostname; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
458 database = cm.credentials{kk}.database; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
459 username = cm.credentials{kk}.username; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
460 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
461 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
462 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
463 end % private methods |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
464 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
465 end % classdef |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
466 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
467 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
468 function conn = connect(hostname, database, username, password) |
4
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
469 % CONNECT Opens a connection to the given database. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
470 % |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
471 % This function returns a Java object implementing the java.sql.Connection |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
472 % interface connected to the given database using the provided credentials. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
473 % If the connection fails because the given username and password pair is not |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
474 % accepted by the server an utils:jmysql:connect:AccessDenied error is thrown. |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
475 |
c706c10a76bd
Add help comments.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
0
diff
changeset
|
476 % this should become utils.jmysql.connect |
0
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
477 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
478 % informative message |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
479 import utils.const.* |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
480 utils.helper.msg(msg.PROC1, 'connection to mysql://%s/%s username=%s', hostname, database, username); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
481 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
482 % connection credential |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
483 uri = sprintf('jdbc:mysql://%s/%s', hostname, database); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
484 db = javaObject('com.mysql.jdbc.Driver'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
485 pl = javaObject('java.util.Properties'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
486 pl.setProperty(db.USER_PROPERTY_KEY, username); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
487 pl.setProperty(db.PASSWORD_PROPERTY_KEY, password); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
488 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
489 try |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
490 % connect |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
491 conn = db.connect(uri, pl); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
492 catch ex |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
493 % haven't decided yet if this code should be here or higher in the stack |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
494 if strcmp(ex.identifier, 'MATLAB:Java:GenericException') |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
495 % exceptions handling in matlab sucks |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
496 if ~isempty(strfind(ex.message, 'java.sql.SQLException: Access denied')) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
497 throw(MException('utils:jmysql:connect:AccessDenied', '### access denied').addCause(ex)); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
498 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
499 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
500 rethrow(ex); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
501 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
502 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
503 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
504 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
505 function str = ask(msg, default) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
506 str = input(sprintf('%s (default: %s): ', msg, default), 's'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
507 if isempty(str) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
508 str = default; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
509 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
510 if ~ischar(str) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
511 str = char(str); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
512 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
513 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
514 |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
515 function str = choose(msg, choices, default) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
516 options = sprintf('%s, ', choices{:}); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
517 options = options(1:end-2); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
518 str = input(sprintf('%s (options: %s, default: %s): ', msg, options, default), 's'); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
519 if isempty(str) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
520 str = default; |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
521 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
522 if ~ischar(str) |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
523 str = char(str); |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
524 end |
d5fef23867bb
First workig implementation.
Daniele Nicolodi <daniele@science.unitn.it>
parents:
diff
changeset
|
525 end |