30. september 2014 - 10:19Der er
8 kommentarer og 1 løsning
JDBC og AS400
Jeg sidder med en applikation som skal lave en JDBC forbindelse til en AS400. Når programmet kører på en Windows platform kører det fint og får sin JDBC connection - men når jeg vil køre det på AS400'eren kommer der en nullpointer exception når den skal lave JDBC forbindelsen. Det er den samme AS400 der forbindes til fra Windows maskinen.
Failed to connect to: jdbc:as400://12.34.5.67/QSYS.LIB, USERNAME:******, PASSWORD:******
Caused by: java.lang.NullPointerException at java.lang.Throwable.<init>(Throwable.java:181) at java.lang.Exception.<init>(Exception.java:29) at java.lang.RuntimeException.<init>(RuntimeException.java:32) at java.lang.NullPointerException.<init>(NullPointerException.java:36) at com.ibm.as400.access.SocketContainerUnix.getInputStream(SocketContainerUnix.java:65) at com.ibm.as400.access.AS400ImplRemote.signonConnect(AS400ImplRemote.java:1834) at com.ibm.as400.access.AS400ImplRemote.getConnection(AS400ImplRemote.java:957) at com.ibm.as400.access.AS400ImplRemote.connect(AS400ImplRemote.java:392) at com.ibm.as400.access.AS400.connectService(AS400.java:822) at com.ibm.as400.access.AS400JDBCConnection.setProperties(AS400JDBCConnection.java:2764) at com.ibm.as400.access.AS400JDBCDriver.prepareConnection(AS400JDBCDriver.java:1040) at com.ibm.as400.access.AS400JDBCDriver.initializeConnection(AS400JDBCDriver.java:931) at com.ibm.as400.access.AS400JDBCDriver.connect(AS400JDBCDriver.java:355) at java.sql.DriverManager.getConnection(DriverManager.java:525) at java.sql.DriverManager.getConnection(DriverManager.java:171) at com.df.info2000.as400Worker.AS400SQLConnection.getConnection(AS400SQLConnection.java:51)
Det burde det vel ikke kunne være - jeg kan fint køre programmet og få min JDBC forbindelse når jeg kører remote mod AS400, men når det kører lokalt på AS400'eren går det galt. Jeg har fået slået trace logning til og får denne information fra den:
major string: General failure, unspecified at GSSAPI level minor string: Error: com.ibm.security.krb5.KrbException, status code: 0 message: java.security.PrivilegedActionException: java.io.FileNotFoundException: No such path or directory. /etc/krb5/krb5.conf at java.lang.Throwable.<init>(Throwable.java:181) at java.lang.Exception.<init>(Exception.java:29) at org.ietf.jgss.GSSException.<init>(GSSException.java:181) at com.ibm.security.jgss.i18n.I18NException.throwGSSException(I18NException.java:5) at com.ibm.security.jgss.mech.krb5.bb.b(bb.java:32) at com.ibm.security.jgss.mech.krb5.bb.a(bb.java:154) at com.ibm.security.jgss.mech.krb5.bb.<init>(bb.java:36) at com.ibm.security.jgss.mech.krb5.Krb5MechFactory.getNameElement(Krb5MechFactory.java:44) at com.ibm.security.jgss.GSSManagerImpl.a(GSSManagerImpl.java:19) at com.ibm.security.jgss.GSSNameImpl.a(GSSNameImpl.java:17) at com.ibm.security.jgss.GSSNameImpl.canonicalize(GSSNameImpl.java:0) at com.ibm.security.jgss.GSSNameImpl.<init>(GSSNameImpl.java:173) at com.ibm.security.jgss.GSSManagerImpl.createName(GSSManagerImpl.java:14) at com.ibm.as400.access.TokenManager.getGSSToken(TokenManager.java:35) at com.ibm.as400.access.AS400.signon(AS400.java:3359) at com.ibm.as400.access.AS400.connectService(AS400.java:821) at com.ibm.as400.access.AS400JDBCConnection.setProperties(AS400JDBCConnection.java:2764) at com.ibm.as400.access.AS400JDBCDriver.prepareConnection(AS400JDBCDriver.java:1040) at com.ibm.as400.access.AS400JDBCDriver.initializeConnection(AS400JDBCDriver.java:931) at com.ibm.as400.access.AS400JDBCDriver.connect(AS400JDBCDriver.java:355) at java.sql.DriverManager.getConnection(DriverManager.java:525) at java.sql.DriverManager.getConnection(DriverManager.java:171) at com.df.info2000.as400Worker.AS400SQLConnection.getConnection(AS400SQLConnection.java:67) at com.df.info2000.as400Worker.AS400FileAccess.initConnection(AS400FileAccess.java:62) at com.df.info2000.as400Worker.AS400FileAccess.<init>(AS400FileAccess.java:50) at com.df.info2000.as400Worker.AS400FileIterator.<init>(AS400FileIterator.java:23) at com.df.info2000.wscom.WSCOMTransferFileThradsafe.connectAS400Iterator(WSCOMTransferFileThradsafe.java:674) at com.df.info2000.wscom.WSCOMTransferFileThradsafe.initialize(WSCOMTransferFileThradsafe.java:132) at com.df.info2000.wscom.MainExtract.main(MainExtract.java:62) Thread[Thread-0,5,main] Wed Oct 01 09:17:51 CEST 2014 Signing-on without prompting... Thread[Thread-0,5,main] Wed Oct 01 09:17:51 CEST 2014 Current userID in EBCDIC: D3 C5 C3 D4 D6 C8 40 40 40 40 Thread[Thread-0,5,main] Wed Oct 01 09:17:51 CEST 2014 Current userID: 'LECMOH' Thread[Thread-0,5,main] Wed Oct 01 09:17:51 CEST 2014 Current userID in EBCDIC: D3 C5 C3 D4 D6 C8 40 40 40 40 Thread[Thread-0,5,main] Wed Oct 01 09:17:51 CEST 2014 Current userID: 'LECMOH' Thread[Thread-0,5,main] Wed Oct 01 09:17:51 CEST 2014 Sign-on completed. Thread[Thread-0,5,main] Wed Oct 01 09:17:51 CEST 2014 Service disconnected implementation: as-signon Thread[Thread-0,5,main] Wed Oct 01 09:17:51 CEST 2014 Establishing connection to server: as-database Thread[Thread-0,5,main] Wed Oct 01 09:17:51 CEST 2014 Starting a local socket to as-signon
Så den logger en fejl, men kører tilsyneladende videre med at lave en connection...
Jeg vil forsøge om jeg kan lave noget remote debugging... Men hvis der er nogen der har erfaringer med hvad der kan være problemet vil det være dejligt at få nogle input.
Det ser ud til at være et problem med at programmet forsøger at finde denne fil: /etc/krb5/krb5.conf Som er placeret her: /QIBM/UserData/OS400/NetworkAuthentication/krb5.conf
Problemet med ikke at kunne finde krbd5.conf filen blev løst med ovenstående. Men den kan stadig ikke autorisere brugeren og lave en AS400JDBCConnection. Jeg tror problemet ligger et andet sted - det er slet ikke meningen at den skal anvende Kerberos autorisering - jeg har forsøgt at sætte denne parameter: AuthenticationMethod=client eller AuthenticationMethod=clearText Men i begge tilfælde endte den alligevel med at ville anvende krb5.conf og Kerberos. Jeg forsøger at få decompiled min .jar og få noget remote debugging sat op.
Den version er også afprøvet. Vi fik den fantastiske ide at forsøge om programmet kunne køre i produktionsmiljøet, selvom det ikke kunne køre i test-miljøet. Og det kunne det, så vi har nogle AS400 teknikere til at se på hvad der er forskellen på de to miljøer for at se om vi kan løse problemet. Vi skal jo helst kunne afvikle programmet i test også i forhold til fremtidig vedligeholdelse.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.