PDA

View Full Version : Java JDBC Sperre



Seiten : [1] 2

Xanas
10-11-10, 11:30
Hallo,

ich greife über JDBC auf Tabellen der i5 zu, klappt auch alles Super.
Nur bleiben auf der i5 Sperren hängen, aber erst wenn ich das zweite mal auf die Datei zugreife, diese Sperre bleibt dann solange bestehen, bis das Programm endet.

(wrkobjlck meineDatei *file)

Aus-
wahl Job Benutzer Sperre Status Bereich Thread
QZDASOINIT QUSER *SHRRD HELD *JOB


Connection con = connector.getConnection();
try {
PreparedStatement ps = con.prepareStatement("SELECT * FROM DATEN01.PBEWERB");
if ( ps.execute()) {
ResultSet rs = ps.getResultSet();
rs.next();
rs.close(); // Hier ist die Sperre wieder weg
ps.close();
}
PreparedStatement ps1 = con.prepareStatement("SELECT * FROM DATEN01.PBEWERB");
if ( ps1.execute()) {
ResultSet rs = ps1.getResultSet();
rs.next();
rs.close(); // Hier bleibt die Sperre aber bestehen
ps.close();
}
PreparedStatement ps2 = con.prepareStatement("SELECT * FROM DATEN01.PBEWERB");
if ( ps2.execute()) {
ResultSet rs = ps2.getResultSet();
rs.next();
rs.close();
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}


Ist das normal?

BenderD
10-11-10, 11:50
... SQL hat eine lazy close Strategie und ein ODP hält eine Sperre auf die Datei(en). Ein close auf die Connection schließt noch das ein oder andere, aber auch danach wäre ich mir nicht sicher, ob es noch Sperren gibt. ALCOBJ hat zwischendrin einen Parameter CONFLICT hinzubekommen und mit *RQSRLS kann man die dann vertreiben, falls man das braucht.

D*B


Hallo,

ich greife über JDBC auf Tabellen der i5 zu, klappt auch alles Super.
Nur bleiben auf der i5 Sperren hängen, aber erst wenn ich das zweite mal auf die Datei zugreife, diese Sperre bleibt dann solange bestehen, bis das Programm endet.

(wrkobjlck meineDatei *file)

Aus-
wahl Job Benutzer Sperre Status Bereich Thread
QZDASOINIT QUSER *SHRRD HELD *JOB


Connection con = connector.getConnection();
try {
PreparedStatement ps = con.prepareStatement("SELECT * FROM DATEN01.PBEWERB");
if ( ps.execute()) {
ResultSet rs = ps.getResultSet();
rs.next();
rs.close(); // Hier ist die Sperre wieder weg
ps.close();
}
PreparedStatement ps1 = con.prepareStatement("SELECT * FROM DATEN01.PBEWERB");
if ( ps1.execute()) {
ResultSet rs = ps1.getResultSet();
rs.next();
rs.close(); // Hier bleibt die Sperre aber bestehen
ps.close();
}
PreparedStatement ps2 = con.prepareStatement("SELECT * FROM DATEN01.PBEWERB");
if ( ps2.execute()) {
ResultSet rs = ps2.getResultSet();
rs.next();
rs.close();
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}


Ist das normal?

Xanas
10-11-10, 11:59
connection.close(); hat bisher immer die Sperren wieder freigegeben.

Komisch ist nur, das bei ersten close(); die Sperren "immer" verschwinden und bei darauffolgenden hängen bleiben.

BenderD
10-11-10, 12:01
... typische caching Strategie: beim ersten Mal geht man davon aus, dass das eine Eintagsfliege war, beim zweiten Mal denkt man sich, das kommt noch öfter...

D*B


connection.close(); hat bisher immer die Sperren wieder freigegeben.

Komisch ist nur, das bei ersten close(); die Sperren "immer" verschwinden und bei darauffolgenden hängen bleiben.

Xanas
10-11-10, 12:02
Ich hab mir den LogWriter auf die Console ausgeben lassen.
DriverManager.setLogWriter(new PrintWriter(System.out));
funktioniert auch, aber warum hab ich da so ein Echo?
Da kommt fast alles doppelt an.

JdbcOdbcDriver class loaded
registerDriver: driver[className=sun.jdbc.odbc.JdbcOdbcDriver,sun.jdbc.od bc.JdbcOdbcDriver@2d95b3]
DriverManager.initialize: jdbc.drivers = null
JDBC DriverManager initialized
registerDriver: driver[className=com.ibm.as400.access.AS400JDBCDriver,AS/400 Toolbox for Java JDBC Driver]
DriverManager.getConnection("jdbc:as400://QZSOES01;user=ID#DB;password=pw;")
trying driver[className=sun.jdbc.odbc.JdbcOdbcDriver,sun.jdbc.od bc.JdbcOdbcDriver@2d95b3]
*Driver.connect (jdbc:as400://QZSOES01;user=ID#DB;password=pw;)
trying driver[className=com.ibm.as400.access.AS400JDBCDriver,AS/400 Toolbox for Java JDBC Driver]
as400: Properties (12366398) : access = "all".
as400: Properties (12366398) : access = "all".
as400: Properties (12366398) : block size = "32".
as400: Properties (12366398) : block size = "32".
as400: Properties (12366398) : block criteria = "2".
as400: Properties (12366398) : block criteria = "2".
as400: Properties (12366398) : date format = "".
as400: Properties (12366398) : date format = "".
as400: Properties (12366398) : date separator = "".
as400: Properties (12366398) : date separator = "".
as400: Properties (12366398) : decimal separator = "".
as400: Properties (12366398) : decimal separator = "".
as400: Properties (12366398) : errors = "basic".
as400: Properties (12366398) : errors = "basic".
as400: Properties (12366398) : extended dynamic = "false".
as400: Properties (12366398) : extended dynamic = "false".
as400: Properties (12366398) : libraries = "".
as400: Properties (12366398) : libraries = "".
as400: Properties (12366398) : naming = "sql".
as400: Properties (12366398) : naming = "sql".
as400: Properties (12366398) : package = "".
as400: Properties (12366398) : package = "".
as400: Properties (12366398) : package add = "true".
as400: Properties (12366398) : package add = "true".
as400: Properties (12366398) : package cache = "false".
as400: Properties (12366398) : package cache = "false".
as400: Properties (12366398) : package clear = "false".
as400: Properties (12366398) : package clear = "false".
as400: Properties (12366398) : package error = "warning".
as400: Properties (12366398) : package error = "warning".
as400: Properties (12366398) : package library = "".
as400: Properties (12366398) : package library = "".
as400: Properties (12366398) : password = "".
as400: Properties (12366398) : password = "".
as400: Properties (12366398) : prefetch = "true".
as400: Properties (12366398) : prefetch = "true".
as400: Properties (12366398) : prompt = "".
as400: Properties (12366398) : prompt = "".
as400: Properties (12366398) : remarks = "system".
as400: Properties (12366398) : remarks = "system".
as400: Properties (12366398) : sort = "hex".
as400: Properties (12366398) : sort = "hex".
as400: Properties (12366398) : sort language = "ENU".
as400: Properties (12366398) : sort language = "ENU".
as400: Properties (12366398) : sort table = "".
as400: Properties (12366398) : sort table = "".
as400: Properties (12366398) : sort weight = "shared".
as400: Properties (12366398) : sort weight = "shared".
as400: Properties (12366398) : time format = "".
as400: Properties (12366398) : time format = "".
as400: Properties (12366398) : time separator = "".
as400: Properties (12366398) : time separator = "".
as400: Properties (12366398) : trace = "false".
as400: Properties (12366398) : trace = "false".
as400: Properties (12366398) : transaction isolation = "read uncommitted".
as400: Properties (12366398) : transaction isolation = "read uncommitted".
as400: Properties (12366398) : translate binary = "false".
as400: Properties (12366398) : translate binary = "false".
as400: Properties (12366398) : user = "ID#DB".
as400: Properties (12366398) : user = "ID#DB".
as400: Properties (12366398) : package criteria = "default".
as400: Properties (12366398) : package criteria = "default".
as400: Properties (12366398) : lob threshold = "32768".
as400: Properties (12366398) : lob threshold = "32768".
as400: Properties (12366398) : secure = "false".
as400: Properties (12366398) : secure = "false".
as400: Properties (12366398) : data truncation = "true".
as400: Properties (12366398) : data truncation = "true".
as400: Properties (12366398) : proxy server = "".
as400: Properties (12366398) : proxy server = "".
as400: Properties (12366398) : secondary URL = "".
as400: Properties (12366398) : secondary URL = "".
as400: Properties (12366398) : data compression = "true".
as400: Properties (12366398) : data compression = "true".
as400: Properties (12366398) : big decimal = "true".
as400: Properties (12366398) : big decimal = "true".
as400: Properties (12366398) : thread used = "true".
as400: Properties (12366398) : thread used = "true".
as400: Properties (12366398) : cursor hold = "true".
as400: Properties (12366398) : cursor hold = "true".
as400: Properties (12366398) : lazy close = "false".
as400: Properties (12366398) : lazy close = "false".
as400: Properties (12366398) : driver = "toolbox".
as400: Properties (12366398) : driver = "toolbox".
as400: Properties (12366398) : bidi string type = "5".
as400: Properties (12366398) : bidi string type = "5".
as400: Properties (12366398) : key ring name = "".
as400: Properties (12366398) : key ring name = "".
as400: Properties (12366398) : key ring password = "".
as400: Properties (12366398) : key ring password = "".
as400: Properties (12366398) : full open = "false".
as400: Properties (12366398) : full open = "false".
as400: Properties (12366398) : server trace = "0".
as400: Properties (12366398) : server trace = "0".
as400: Properties (12366398) : database name = "".
as400: Properties (12366398) : database name = "".
as400: Properties (12366398) : extended metadata = "false".
as400: Properties (12366398) : extended metadata = "false".
as400: Properties (12366398) : cursor sensitivity = "asensitive".
as400: Properties (12366398) : cursor sensitivity = "asensitive".
as400: Properties (12366398) : behavior override = "0".
as400: Properties (12366398) : behavior override = "0".
as400: Properties (12366398) : package ccsid = "13488".
as400: Properties (12366398) : package ccsid = "13488".
as400: Properties (12366398) : minimum divide scale = "0".
as400: Properties (12366398) : minimum divide scale = "0".
as400: Properties (12366398) : maximum precision = "31".
as400: Properties (12366398) : maximum precision = "31".
as400: Properties (12366398) : maximum scale = "31".
as400: Properties (12366398) : maximum scale = "31".
as400: Properties (12366398) : translate hex = "character".
as400: Properties (12366398) : translate hex = "character".
as400: Properties (12366398) : toolbox trace = "".
as400: Properties (12366398) : toolbox trace = "".
as400: Properties (12366398) : qaqqinilib = "".
as400: Properties (12366398) : qaqqinilib = "".
as400: Properties (12366398) : login timeout = "".
as400: Properties (12366398) : login timeout = "".
as400: Properties (12366398) : true autocommit = "false".
as400: Properties (12366398) : true autocommit = "false".
as400: Properties (12366398) : bidi implicit reordering = "true".
as400: Properties (12366398) : bidi implicit reordering = "true".
as400: Properties (12366398) : bidi numeric ordering = "false".
as400: Properties (12366398) : bidi numeric ordering = "false".
as400: Properties (12366398) : hold input locators = "true".
as400: Properties (12366398) : hold input locators = "true".
as400: Properties (12366398) : hold statements = "false".
as400: Properties (12366398) : hold statements = "false".
as400: Properties (12366398) : rollback cursor hold = "false".
as400: Properties (12366398) : rollback cursor hold = "false".
as400: Properties (12366398) : variable field compression = "true".
as400: Properties (12366398) : variable field compression = "true".
as400: Properties (12366398) : query optimize goal = "0".
as400: Properties (12366398) : query optimize goal = "0".
as400: Properties (12366398) : keep alive = "".
as400: Properties (12366398) : keep alive = "".
as400: Properties (12366398) : receive buffer size = "".
as400: Properties (12366398) : receive buffer size = "".
as400: Properties (12366398) : send buffer size = "".
as400: Properties (12366398) : send buffer size = "".
as400: Properties (12366398) : XA loosely coupled support = "0".
as400: Properties (12366398) : XA loosely coupled support = "0".
as400: Properties (12366398) : translate boolean = "true".
as400: Properties (12366398) : translate boolean = "true".
as400: Properties (12366398) : metadata source = "-1".
as400: Properties (12366398) : metadata source = "-1".
as400: Properties (12366398) : query storage limit = "-1".
as400: Properties (12366398) : query storage limit = "-1".
as400: Properties (12366398) : decfloat rounding mode = "half even".
as400: Properties (12366398) : decfloat rounding mode = "half even".
as400: Properties (12366398) : autocommit exception = "false".
as400: Properties (12366398) : autocommit exception = "false".
as400: Properties (12366398) : auto commit = "true".
as400: Properties (12366398) : auto commit = "true".
as400: Properties (12366398) : ignore warnings = "".
as400: Properties (12366398) : ignore warnings = "".
as400: Properties (12366398) : secure current user = "true".
as400: Properties (12366398) : secure current user = "true".
as400: Properties (12366398) : concurrent access resolution = "0".
as400: Properties (12366398) : concurrent access resolution = "0".
as400: Properties (12366398) : jvm16 synchronize = "true".
as400: Properties (12366398) : jvm16 synchronize = "true".
as400: Properties (12366398) : socket timeout = "".
as400: Properties (12366398) : socket timeout = "".
as400: Properties (12366398) : use block update = "false".
as400: Properties (12366398) : use block update = "false".
as400: Properties (12366398) : maximum blocked input rows = "32000".
as400: Properties (12366398) : maximum blocked input rows = "32000".
as400: Driver AS/400 Toolbox for Java JDBC Driver (22897006) : Using IBM Toolbox for Java JDBC driver implementation.
as400: Driver AS/400 Toolbox for Java JDBC Driver (22897006) : Using IBM Toolbox for Java JDBC driver implementation.
as400: Properties (12366398) : metadata source = "0".
as400: Properties (12366398) : metadata source = "0".
as400: Toolbox for Java - Open Source Software, JTOpen 7.1, codebase 5770-SS1 V7R1M0.02
as400: Toolbox for Java - Open Source Software, JTOpen 7.1, codebase 5770-SS1 V7R1M0.02
as400: JDBC Level: 40
as400: JDBC Level: 40
as400: Properties (12366398) : package ccsid = "13488".
as400: Properties (12366398) : package ccsid = "13488".
as400: Connection QZSOES01 (6371135) : Client CCSID = 13488.
as400: Connection QZSOES01 (6371135) : Client CCSID = 13488.
as400: Connection QZSOES01 (6371135) : Setting server NLV = 2929.
as400: Connection QZSOES01 (6371135) : Setting server NLV = 2929.
as400: Connection QZSOES01 (6371135) : Client functional level = V7R1M01 .
as400: Connection QZSOES01 (6371135) : Client functional level = V7R1M01 .
as400: Connection QZSOES01 (6371135) : Data compression = RLE.
as400: Connection QZSOES01 (6371135) : Data compression = RLE.
as400: Connection QZSOES01 (6371135) : ROWID supported = true.
as400: Connection QZSOES01 (6371135) : ROWID supported = true.
as400: Connection QZSOES01 (6371135) : True auto-commit supported = true.
as400: Connection QZSOES01 (6371135) : True auto-commit supported = true.
as400: Connection QZSOES01 (6371135) : 128 byte column names supported = true.
as400: Connection QZSOES01 (6371135) : 128 byte column names supported = true.
as400: Connection QZSOES01 (6371135) : Maximum decimal precision = 31.
as400: Connection QZSOES01 (6371135) : Maximum decimal precision = 31.
as400: Connection QZSOES01 (6371135) : Maximum decimal scale = 31.
as400: Connection QZSOES01 (6371135) : Maximum decimal scale = 31.
as400: Connection QZSOES01 (6371135) : Minimum divide scale = 0.
as400: Connection QZSOES01 (6371135) : Minimum divide scale = 0.
as400: Connection QZSOES01 (6371135) : Translate hex = character.
as400: Connection QZSOES01 (6371135) : Translate hex = character.
as400: Connection QZSOES01 (6371135) : query optimize goal = 0.
as400: Connection QZSOES01 (6371135) : query optimize goal = 0.
as400: Connection QZSOES01 (6371135) : query storage limit = -1.
as400: Connection QZSOES01 (6371135) : query storage limit = -1.
as400: Connection QZSOES01 (6371135) : Using extended datastreams.
as400: Connection QZSOES01 (6371135) : Using extended datastreams.
as400: Connection QZSOES01 (6371135) : JDBC driver major version = 9.
as400: Connection QZSOES01 (6371135) : JDBC driver major version = 9.
as400: Connection QZSOES01 (6371135) : IBM i VRM = V6R1M0.
as400: Connection QZSOES01 (6371135) : IBM i VRM = V6R1M0.
as400: Connection QZSOES01 (6371135) : Server CCSID = 273.
as400: Connection QZSOES01 (6371135) : Server CCSID = 273.
as400: Connection QZSOES01 (6371135) : Server functional level = V6R1M00014 (14).
as400: Connection QZSOES01 (6371135) : Server functional level = V6R1M00014 (14).
as400: Connection QZSOES01 (6371135) : Server job identifier = 296619/QUSER/QZDASOINIT.
as400: Connection QZSOES01 (6371135) : Server job identifier = 296619/QUSER/QZDASOINIT.
as400: Properties (12366398) : decimal separator = ".".
as400: Properties (12366398) : decimal separator = ".".
as400: Properties (12366398) : date format = "dmy".
as400: Properties (12366398) : date format = "dmy".
as400: Properties (12366398) : date separator = ".".
as400: Properties (12366398) : date separator = ".".
as400: Properties (12366398) : time format = "hms".
as400: Properties (12366398) : time format = "hms".
as400: Properties (12366398) : time separator = ":".
as400: Properties (12366398) : time separator = ":".
as400: Connection B60714DD (6371135) open.
as400: Connection B60714DD (6371135) open.
as400: Connection B60714DD (6371135) : Auto commit = "true".
as400: Connection B60714DD (6371135) : Auto commit = "true".
as400: Connection B60714DD (6371135) : Read only = "false".
as400: Connection B60714DD (6371135) : Read only = "false".
as400: Connection B60714DD (6371135) : Transaction isolation = "1".
as400: Connection B60714DD (6371135) : Transaction isolation = "1".
getConnection returning driver[className=com.ibm.as400.access.AS400JDBCDriver,AS/400 Toolbox for Java JDBC Driver]
as400: Statement STMT0001 (25849454) open. Parent: Connection B60714DD (6371135) .
as400: Statement STMT0001 (25849454) open. Parent: Connection B60714DD (6371135) .
as400: Statement STMT0001 (25849454) : Escape processing = "true".
as400: Statement STMT0001 (25849454) : Escape processing = "true".
as400: Statement STMT0001 (25849454) : Fetch direction = "1000".
as400: Statement STMT0001 (25849454) : Fetch direction = "1000".
as400: Statement STMT0001 (25849454) : Fetch size = "0".
as400: Statement STMT0001 (25849454) : Fetch size = "0".
as400: Statement STMT0001 (25849454) : Max field size = "0".
as400: Statement STMT0001 (25849454) : Max field size = "0".
as400: Statement STMT0001 (25849454) : Max rows = "0".
as400: Statement STMT0001 (25849454) : Max rows = "0".
as400: Statement STMT0001 (25849454) : Query timeout = "0".
as400: Statement STMT0001 (25849454) : Query timeout = "0".
as400: Statement STMT0001 (25849454) : Result set concurrency = "1007".
as400: Statement STMT0001 (25849454) : Result set concurrency = "1007".
as400: Statement STMT0001 (25849454) : Result set holdability = "1".
as400: Statement STMT0001 (25849454) : Result set holdability = "1".
as400: Statement STMT0001 (25849454) : Result set type = "1003".
as400: Statement STMT0001 (25849454) : Result set type = "1003".
as400: Statement STMT0001 (25849454) : Behavior Override = "0".
as400: Statement STMT0001 (25849454) : Behavior Override = "0".
as400: Statement STMT0001 (25849454) : Data to correlate statement with cursor Cursor CRSR0001 (22552192) .
as400: Statement STMT0001 (25849454) : Data to correlate statement with cursor Cursor CRSR0001 (22552192) .
as400: Statement STMT0001 (25849454) : Executing query, SQL Statement -->[SELECT LOCATION FROM QSYS2.SYSCATALOGS WHERE RDBTYPE = 'LOCAL' AND RDBASPSTAT='AVAILABLE'].
as400: Statement STMT0001 (25849454) : Executing query, SQL Statement -->[SELECT LOCATION FROM QSYS2.SYSCATALOGS WHERE RDBTYPE = 'LOCAL' AND RDBASPSTAT='AVAILABLE'].
as400: Statement STMT0001 (25849454) : Prepared STMT0001*, SQL Statement -->[SELECT LOCATION FROM QSYS2.SYSCATALOGS WHERE RDBTYPE = 'LOCAL' AND RDBASPSTAT='AVAILABLE'].
as400: Statement STMT0001 (25849454) : Prepared STMT0001*, SQL Statement -->[SELECT LOCATION FROM QSYS2.SYSCATALOGS WHERE RDBTYPE = 'LOCAL' AND RDBASPSTAT='AVAILABLE'].
as400: Cursor CRSR0001 (22552192) open.
as400: Cursor CRSR0001 (22552192) open.
as400: Cursor CRSR0001 (22552192) closed.
as400: Cursor CRSR0001 (22552192) closed.

BenderD
10-11-10, 12:17
... sieht für mich nach einem Treiber Bug aus. Im richtigen Leben sollte man ohnehin log4j in der Applikation nutzen.

D*B

KM
10-11-10, 12:53
Hallo,

hier ist die Erklärung für die beschriebene Problematik, die eigentlich keine ist. Suche darin mal nach "Pseudo Close". Da ist alles beschrieben. Mir ist das auch schon mal aufgefallen, bis ich auf diese Erklärung gestoßen bin. Ist also alles ganz normal.

SQL - MidrangeWiki (http://wiki.midrange.com/index.php/SQL#Pseudo_Close)

Gruß,
KM

Xanas
11-11-10, 07:02
Treiber Bug weis ich nicht, aber ich habe einfach mal das jt400.jar aus der Client Access Installation verwendet statt aus der aktuellen Version des jtopen_7_1 und schon funktioniert das Log auch korrekt. Kann das sein, das jtopen_7_1 für V7R1 vorbehalten ist? Wir haben nämlich nur V6R1 auf unserem Hobel.


... sieht für mich nach einem Treiber Bug aus. Im richtigen Leben sollte man ohnehin log4j in der Applikation nutzen.

D*B

BenderD
11-11-10, 07:55
... jtopen V7.0+ geht rückwärts bis V5R3, für JDBC je nach JDBC Spezifikation. Das Log hat mit dem Server eh nix zu tun, das ist eine reine Treiber Eigenschaft => definitiv Bug!

D*B


Treiber Bug weis ich nicht, aber ich habe einfach mal das jt400.jar aus der Client Access Installation verwendet statt aus der aktuellen Version des jtopen_7_1 und schon funktioniert das Log auch korrekt. Kann das sein, das jtopen_7_1 für V7R1 vorbehalten ist? Wir haben nämlich nur V6R1 auf unserem Hobel.

fdaiofur
26-11-10, 15:29
muss nicht

ps1.close
bzw.
ps2.close

stehen im PHP-Code ?