Avatar billede margitbork Nybegynder
30. september 2014 - 10:19 Der 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)
Avatar billede arne_v Ekspert
30. september 2014 - 14:56 #1
Kan det vaere et netvaerk/router/firewall problem?
Avatar billede margitbork Nybegynder
01. oktober 2014 - 10:32 #2
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.

Margit
Avatar billede margitbork Nybegynder
01. oktober 2014 - 11:53 #3
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

Hvilket også er standard placering på en iSeries ifølge
http://www-01.ibm.com/support/knowledgecenter/SS7K4U_8.5.5/com.ibm.websphere.base.iseries.doc/ae/rsec_SPNEGO_config_krb5.html?lang=en

Så jeg skal have fundet ud af hvorfor den vil se et forkert sted, og hvad der skal gøres ved det...
Avatar billede margitbork Nybegynder
01. oktober 2014 - 11:54 #4
Avatar billede arne_v Ekspert
02. oktober 2014 - 03:19 #5
Does:

-Djava.security.krb5.conf=/QIBM/UserData/OS400/NetworkAuthentication/krb5.conf

fix the problem?
Avatar billede margitbork Nybegynder
02. oktober 2014 - 09:02 #6
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.
Avatar billede arne_v Ekspert
03. oktober 2014 - 03:01 #7
Properties p = new Properties();
p.put("User", un);
p.put("Password", pw);
p.put("AuthenticationMethod", "clearText");
DriverManager.getConnection(conurl,p);

?
Avatar billede margitbork Nybegynder
03. oktober 2014 - 09:31 #8
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.
Avatar billede margitbork Nybegynder
03. oktober 2014 - 09:32 #9
Jeg lukker.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester