Aufruf von DataSource.getConnection nicht wieder die erwartete Verbindung
Ich habe den folgenden code:
Hashtable env1 = new Hashtable();
env1.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
log.info("Executed step 1");
env1.put(javax.naming.Context.PROVIDER_URL, "iiop://myhost.com:9301");
log.info("Executed step 2");
Context ctx = new InitialContext(env1);
DataSource ds = (DataSource)ctx.lookup("jdbc/mydatasource");
log.info("Excecuted lookup ="+ds);
conn = ds.getConnection();
Habe ich den vorherigen code in eine standalone-Anwendung, die den Anschluss an WAR 6.1.0.3, um eine Verbindung von der Datenquelle. Der code ist sehr unkompliziert, und ich habe den gleichen code in einer anderen Umgebung, aber in diesem Fall, wenn ich Anrufe getConnection ich eine Ausnahme. Die datasource ist WAR die richtige authentication alias gesetzt und die Verbindung wird getestet und es funktioniert OK, von der Seite WAR, aber der Vorherige code wird nicht funktionieren.
Wenn ich ändern Sie diese Zeile: conn = ds.getConnection();
: conn = ds.getConnection("username","Passwort");
Dann funktioniert der code! Aber das ist nicht das, was ich will, da die verbindungen in die datasource bereits die Anmeldeinformationen festzulegen. Ich war zunächst denken, das war eine Sybase-problem, aber es ist auch passiert mit Oracle, so würde eher sagen, ich habe ein problem mit WAR.
Wenn Sie neugierig sind, die Ausnahmen für Sybase ich bekommen:
java.sql.SQLException: JZ004: User name property missing in DriverManager.getConnection(..., Properties).DSRA0010E: SQL State = JZ004, Error Code = 0
at com.sybase.jdbc2.jdbc.ErrorMessage.raiseError(ErrorMessage.java:569)
at com.sybase.jdbc2.tds.LoginToken.<init>(LoginToken.java:128)
at com.sybase.jdbc2.tds.Tds.doLogin(Tds.java:506)
at com.sybase.jdbc2.tds.Tds.login(Tds.java:449)
at com.sybase.jdbc2.jdbc.SybConnection.tryLogin(SybConnection.java:254)
at com.sybase.jdbc2.jdbc.SybConnection.regularConnect(SybConnection.java:230)
at com.sybase.jdbc2.jdbc.SybConnection.<init>(SybConnection.java:200)
at com.sybase.jdbc2.jdbc.SybPooledConnection.<init>(SybPooledConnection.java:72)
at com.sybase.jdbc2.jdbc.SybConnectionPoolDataSource.createConnection(SybConnectionPoolDataSource.java:138)
at com.sybase.jdbc2.jdbc.SybDriver.connect(SybDriver.java:485)
at com.sybase.jdbc2.jdbc.SybDriver.connect(SybDriver.java:517)
at com.sybase.jdbc2.jdbc.SybDataSource.getConnection(SybDataSource.java:227)
at com.sybase.jdbc2.jdbc.SybConnectionPoolDataSource.getPooledConnection(SybConnectionPoolDataSource.java:74)
at com.ibm.ws.rsadapter.spi.InternalGenericDataStoreHelper$1.run(InternalGenericDataStoreHelper.java:897)
at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118)
at com.ibm.ws.rsadapter.spi.InternalGenericDataStoreHelper.getPooledConnection(InternalGenericDataStoreHelper.java:892)
at com.ibm.ws.rsadapter.spi.WSRdbDataSource.getPooledConnection(WSRdbDataSource.java:1181)
at com.ibm.ws.rsadapter.spi.WSManagedConnectionFactoryImpl.createManagedConnection(WSManagedConnectionFactoryImpl.java:1047)
at com.ibm.ws.rsadapter.spi.WSDefaultConnectionManagerImpl.allocateConnection(WSDefaultConnectionManagerImpl.java:81)
at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:431)
at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:400)
Und für Oracle, bekomme ich dieses:
java.sql.SQLException: invalid arguments in callDSRA0010E: SQL State = null, Error Code = 17,433
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:236)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:420)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:297)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:221)
at oracle.jdbc.pool.OracleConnectionPoolDataSource.getPhysicalConnection(OracleConnectionPoolDataSource.java:157)
at oracle.jdbc.pool.OracleConnectionPoolDataSource.getPooledConnection(OracleConnectionPoolDataSource.java:94)
at oracle.jdbc.pool.OracleConnectionPoolDataSource.getPooledConnection(OracleConnectionPoolDataSource.java:75)
at com.ibm.ws.rsadapter.spi.InternalGenericDataStoreHelper$1.run(InternalGenericDataStoreHelper.java:897)
at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118)
at com.ibm.ws.rsadapter.spi.InternalGenericDataStoreHelper.getPooledConnection(InternalGenericDataStoreHelper.java:892)
at com.ibm.ws.rsadapter.spi.WSRdbDataSource.getPooledConnection(WSRdbDataSource.java:1181)
at com.ibm.ws.rsadapter.spi.WSManagedConnectionFactoryImpl.createManagedConnection(WSManagedConnectionFactoryImpl.java:1047)
at com.ibm.ws.rsadapter.spi.WSDefaultConnectionManagerImpl.allocateConnection(WSDefaultConnectionManagerImpl.java:81)
at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:431)
at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:400)
In beiden Fällen werde ich nicht die Ausnahme, wenn ich übergeben Sie die Anmeldeinformationen für die getConnection-Methode
Vielen Dank für Ihre Beratung.
InformationsquelleAutor Abel Morelos | 2010-04-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Antwort: zu den externen Kunden nicht erhalten Sie das authentication alias-Daten
Mehr Beantworten:
Aus der WAR J2C-Verbindungsfactory Dokumentation:
InformationsquelleAutor Dan B
Es ist schon eine lange Zeit, da habe ich etwas gemacht, das mit WebSFEAR^H^H^H^Hphere, aber es scheint mir, Sie haben ein problem mit der Konfiguration. Gab es einen speziellen Bildschirm, wo Sie, das würde Anmeldeinformationen (user/pass) und später würden Sie diese Anmeldeinformationen auf die erstellte Datenquelle. Es sieht aus wie, dass Ihre konfigurierten Datenquelle noch nicht bekommen Anmeldeinformationen angewendet.
InformationsquelleAutor mindas
Sogar nach der Definition der Benutzer - /Kennwort-Werte als benutzerdefinierte Eigenschaften, die ich gefunden, dass die verbindungen für Oracle nicht funktioniert. Nach vielen Tagen, ich habe gerade festgestellt, dass der Entwicklungs-server läuft eine alte WAR version 6.1, das problem das ich habe, wurde behoben, WAR 6.1.0.5: PK32838: J2CA0046E BEI DER NUTZUNG VON BENUTZERDEFINIERTEN PROP PASSWORT AUF DATASOURECE
Ich habe versucht meinen code in ein anderes WAR-server mit einer aktualisierten WAR fix pack-Ebene und... es funktionierte, ohne dass eine einzige änderung im code oder in der Konfiguration. Also die Lösung ist zum aktualisieren der WAR-server.
Dank.
InformationsquelleAutor Abel Morelos