PDA

View Full Version : Tomcat 8.5.3 und jt400 (Version 9.1)



KM
19-01-17, 10:19
Hallo,

ich habe seit vielen Jahren einen Tomcat-Server (Version 7.0) mit Standard ConnectionPooling (DBCP) laufen. Das ConnectionPooling hat mit dem neuesten jt400-Treiber (jtopen Version 9.1) auch problemlos funktioniert.
Jetzt wollte ich auf einen Tomcat Version 8.5.3 umstellen. Ansonsten ist die Konfiguration gleich geblieben. Dabei habe ich festgestellt, dass hier nun DBCP2 verwendet wird, was angeblich nur mit einem JDBC Version 4 Treiber funktioniert. Laut utilities.AboutToolbox des jt400 handelt es sich beim neuesten JDBC-Treiber aber um einen Version 3 Treiber.

Auf jeden Fall erhalte ich beim Starten des Tomcat folgenden Fehler:


org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/DataQueue_Server]]
at org.apache.catalina.util.LifecycleBase.start(Lifec ycleBase.java:158)
at org.apache.catalina.core.ContainerBase.addChildInt ernal(ContainerBase.java:726)
at org.apache.catalina.core.ContainerBase.addChild(Co ntainerBase.java:702)
at org.apache.catalina.core.StandardHost.addChild(Sta ndardHost.java:734)
at org.apache.catalina.startup.HostConfig.deployDirec tory(HostConfig.java:1107)
at org.apache.catalina.startup.HostConfig$DeployDirec tory.run(HostConfig.java:1841)
at java.util.concurrent.Executors$RunnableAdapter.cal l(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker( Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.AbstractMethodError: com.ibm.as400.access.AS400JDBCConnection.isValid(I )Z
at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection. isValid(DelegatingConnection.java:925)
at org.apache.tomcat.dbcp.dbcp2.PoolableConnection.va lidate(PoolableConnection.java:282)
at org.apache.tomcat.dbcp.dbcp2.PoolableConnectionFac tory.validateConnection(PoolableConnectionFactory. java:359)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.valid ateConnectionFactory(BasicDataSource.java:2316)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.creat ePoolableConnectionFactory(BasicDataSource.java:22 99)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.creat eDataSource(BasicDataSource.java:2043)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getLo gWriter(BasicDataSource.java:1598)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactor y.createDataSource(BasicDataSourceFactory.java:596 )
at org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactor y.getObjectInstance(BasicDataSourceFactory.java:27 5)
at org.apache.naming.factory.FactoryBase.getObjectIns tance(FactoryBase.java:94)
at javax.naming.spi.NamingManager.getObjectInstance(U nknown Source)
at org.apache.naming.NamingContext.lookup(NamingConte xt.java:840)
at org.apache.naming.NamingContext.lookup(NamingConte xt.java:160)
at org.apache.naming.NamingContext.lookup(NamingConte xt.java:828)
at org.apache.naming.NamingContext.lookup(NamingConte xt.java:174)
at org.apache.catalina.core.NamingContextListener.add Resource(NamingContextListener.java:1089)
at org.apache.catalina.core.NamingContextListener.cre ateNamingContext(NamingContextListener.java:659)
at org.apache.catalina.core.NamingContextListener.lif ecycleEvent(NamingContextListener.java:252)
at org.apache.tomee.catalina.TomcatWebAppBuilder.conf igureStart(TomcatWebAppBuilder.java:1110)
at org.apache.tomee.catalina.GlobalListenerSupport.li fecycleEvent(GlobalListenerSupport.java:133)
at org.apache.catalina.util.LifecycleBase.fireLifecyc leEvent(LifecycleBase.java:94)
at org.apache.catalina.core.StandardContext.startInte rnal(StandardContext.java:5076)
at org.apache.catalina.util.LifecycleBase.start(Lifec ycleBase.java:152)
... 10 more

Ich vermute jetzt mal ganz stark, dass die Kombination DBCP2 mit jt400 nicht funktioniert.

Hat jemand von Euch auch solche Erfahrungen gemacht? Liege ich mit meiner Vermutung richtig? Wie kann ich mein Problem nun beheben?

Vielen Dank schon mal,
KM

Fuerchau
19-01-17, 10:45
Wenn man die Dokumentation liest, dann hast du vollkommen Recht!
Selbst der aktuellste JDBC-Treiber (V7R3) ist ein Typ3-Treiber.
Somit kannst du DBCP2 halt nicht verwenden.
Nun musst du halt klären, ob du im Tomcat auf DBCP zurückgehen kannst.
Wenn nicht musst du DBCP komplett abschalten, was ja nicht unbedingt von Nachteil sein muss, da die ODBC-Jobs der AS/400 sowieso wiederverwendbar sind.

KM
20-01-17, 08:40
Ich hab jetzt herausgefunden wie ich DBCP2 vermeiden kann. Es gibt nämlich im Tomcat eine Alternative zu DBCP:


The JDBC Connection Pool org.apache.tomcat.jdbc.pool is a replacement or an alternative to the Apache Commons DBCP connection pool.

Dazu muss man in der context.xml bei der Resource nur folgendes Attribut hinzufügen:


factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"

Seltsamerweise erhalte ich dann zwar beim Starten des Tomcat den Fehler "WARNING - unusedProperty factory". Aber trotzdem funktioniert's.

Gruß,
KM