Tomcat 6/7 JNDI mit mehreren Datenquellen
Wenn es mehr als eine <Resource>
Elemente in context.xml und mehr als eine <resource-ref>
Elemente in web.xml meine Anwendung beginnt zu werfen
TNS:no appropriate service handler found
und
ORA-01017: invalid username/password; logon denied
Jedoch, wenn es nur eine Datenquelle im JNDI, was bedeutet, die anderen verwenden regelmäßige JDBC-Datenquelle, die die Anwendung läuft wie ein Charme
Beide Datenquellen kommen aus der gleichen db-URL, aber verwenden Sie ein anderes schema.
Meine Vermutung ist, dass es verursacht werden kann, die von den gleichen Datenbank-URL der einzelnen Ressourcen mit verschiedenen Benutzername - /Passwort(schema). Aber tomcat sollte in der Lage sein, im Umgang mit der situation, so meine Argumentation ist, dass es vielleicht einige Konfiguration, die ich verpasst?
Anderes Interessantes finden ist:
Wenn ich jdbc-url jdbc:oracle:thin:@myhost:1521:orcl
mit SQL-Entwickler zum einrichten einer Verbindung, manchmal verbindet er, ohne Frage, aber manchmal wird es abgelehnt mit dem gleichen Problem: appropriate service handler found
während diese web-Anwendung ist aktiv an der gleichen Zeit. Aber die gleichen JDBC-URL funktioniert gut mit anderen Spring-Anwendung mit regelmäßigen JDBC-Verbindung(nicht im JNDI). Also, was ist der trick?
Hier sind die details der aktuellen config:
In Context.xml
<Resource name="jdbc/app_A" auth="Container" type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@myhost:1521:orcl"
username="usernameA" password="passwordA" maxActive="20" maxIdle="10" maxWait="-1" />
<Resource name="jdbc/app_B" auth="Container" type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@myhost:1521:orcl"
username="usernameB" password="usernameB" maxActive="20" maxIdle="10" maxWait="-1" />
In Web.xml der Anwendung:
<resource-ref>
<description>Oracle Datasource for app_A</description>
<res-ref-name>jdbc/app_A</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<description>Oracle Datasource for app_B</description>
<res-ref-name>jdbc/app_B</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
In ApplicationContext.xml
<jee:jndi-lookup id="dataSource1" jndi-name="java:comp/env/jdbc/app_A" resource-ref="true" />
<jee:jndi-lookup id="dataSource2" jndi-name="java:comp/env/jdbc/app_B" resource-ref="true" />
Und endlich komme ich Ausnahme aufgetürmt wie diese:
Jan 31, 2013 3:36:55 PM org.apache.catalina.core.NamingContextListener addResource
WARNING: Failed to register in JMX: javax.naming.NamingException: ORA-01017: invalid username/password; logon denied
Jan 31, 2013 3:36:56 PM org.apache.naming.NamingContext lookup
WARNING: Unexpected exception resolving reference
java.sql.SQLException: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:412)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:278)
at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182)
at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:699)
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:631)
at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:485)
at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:143)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:116)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:103)
at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:539)
at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:237)
at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:143)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1061)
at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:671)
at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:270)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5173)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1100)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1618)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:385)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
... 38 more
Jan 31, 2013 3:36:56 PM org.apache.catalina.core.NamingContextListener addResource
WARNING: Failed to register in JMX: javax.naming.NamingException: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
Jan 31, 2013 3:36:56 PM org.apache.naming.NamingContext lookup
WARNING: Unexpected exception resolving reference
java.sql.SQLException: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
Wirklich nicht sicher, warum die no appropriate service handler found
Fehlermeldung erscheint, es scheint die Verbindung nicht akzeptiert/verstanden wird orcl Zuhörer.
Hier ist, was ich in einfügen persisntence.xml
<persistence-unit name="persistenceUnit1">
....
<jta-data-source>jdbc/app_A</jta-data-source>
....
</persistence-unit>
<persistence-unit name="persistenceUnit2">
....
<jta-data-source>jdbc/app_B</jta-data-source>
....
</persistence-unit>
- Für mich funktioniert. Ich habe über neun. Ist es immer die gleiche Ressource, die fehlschlägt? Und ist, dass man vielleicht die, die Sie entfernen, wenn Sie es testen mit nur einer Ressource? Also vielleicht gibt es etwas falsch mit Ihrer Ressource-definition?
- Danke. Stellt sich heraus, einer der jndi-Datenquelle Holen Sie sich das Kennwort ist falsch. Aber nach der Festsetzung, die "keine geeigneten service-handler gefunden, der' ist immer noch, obwohl die Anwendung scheint zu funktionieren danach. Könnten Sie bitte geben einen Hinweis auf, die? Nochmals vielen Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
ORA-12519, TNS:no appropriate service handler found
Fehler möglicherweise das Ergebnis der Verwendung eines old-style-JDBC-Verbindungszeichenfolge. Gemäß Kapitel 8 Daten Quellen und URLs von Oracle 11.1 JDBC Developer ' s Guide und Reference, Verbindung string-format ist folgende:Es gibt auch eine Notiz "Start Oracle Datenbank 10g, Oracle Service-IDs werden nicht unterstützt". Also die syntax, die Sie verwenden müssen, geeignet gewesen für Oracle 9i. Es könnte funktionieren auf neueren Versionen, aber das ist nicht garantiert.
So ändern Sie das format Ihrer JDBC-Verbindung Saiten zu Folgen, das format vorgeschlagen, in der Anleitung.
Auch, für Oracle 9i ab, die Sie verwenden sollten
oracle.jdbc.OracleDriver
eher alsoracle.jdbc.driver.OracleDriver
wie Oracle haben bekannt gegeben, dassoracle.jdbc.driver.OracleDriver
ist veraltet und der support für diese Treiber-Klasse eingestellt wird.