Comment puis-je connecter avec succès à une base de données DB2 Dockerized / serveur à partir d'une application en cours d'exécution sur un serveur Tomee dockerized - les deux conteneurs en utilisant jdk10?

sairn:

Comment puis-je connecter avec succès à un serveur DB2 Dockerized DB à partir d'une application en cours d'exécution sur un serveur Tomee dockerized - les deux conteneurs en utilisant jdk10?

Ce que j'avais essayé de le faire jusqu'à présent ....

Dans db2jcc4.jar tombé "/ usr / local / tomee / lib" dossier ...

...obtenu à partir de:

    https://www-01.ibm.com/support/docview.wss?uid=swg21385217

FWIW, le démarrage initial du serveur tomcat se plaint qu'il n'a pas pu trouver pdq.jar ...:

    05-Sep-2018 16:48:04.901 INFO [localhost-startStop-1] org.apache.openejb.assembler.classic.Assembler.createApplication Deployed Application(path=C:\tools\apache-tomee-plume-7.0.5\webapps\docs)
    05-Sep-2018 16:48:04.956 WARNING [localhost-startStop-1] org.apache.tomcat.util.scan.StandardJarScanner.processURLs Failed to scan [file:/C:/tools/apache-tomee-plume-7.0.5/lib/pdq.jar] from classloader hierarchy
    java.io.IOException: java.lang.reflect.InvocationTargetException
            at org.apache.tomcat.util.compat.Jre9Compat.jarFileNewInstance(Jre9Compat.java:212)
            at org.apache.tomcat.util.scan.JarFileUrlJar.<init>(JarFileUrlJar.java:65)
            at org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:49)
            at org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:374)
            at org.apache.tomcat.util.scan.StandardJarScanner.processURLs(StandardJarScanner.java:309)
            at org.apache.tomcat.util.scan.StandardJarScanner.doScanClassPath(StandardJarScanner.java:266)
            at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:229)
            at org.apache.tomee.loader.TomEEJarScanner.scan(TomEEJarScanner.java:69)
            at org.apache.catalina.startup.ContextConfig.processJarsForWebFragments(ContextConfig.java:1888)
            at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1116)
            at org.apache.catalina.startup.OpenEJBContextConfig.webConfig(OpenEJBContextConfig.java:411)
            at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:765)
            at org.apache.catalina.startup.OpenEJBContextConfig.configureStart(OpenEJBContextConfig.java:124)
            at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)
            at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
            at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5154)
            at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
           at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754)
            at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)
            at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
            at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1140)
            at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1875)
            at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:514)
            at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
            at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
            at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
            at java.base/java.lang.Thread.run(Thread.java:844)
    Caused by: java.lang.reflect.InvocationTargetException
            at java.base/jdk.internal.reflect.GeneratedConstructorAccessor10.newInstance(Unknown Source)
            at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
            at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488)
            at org.apache.tomcat.util.compat.Jre9Compat.jarFileNewInstance(Jre9Compat.java:209)
            ... 26 more
    Caused by: java.nio.file.NoSuchFileException: C:\tools\apache-tomee-plume-7.0.5\lib\pdq.jar
            at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85)
            at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
            at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
            at java.base/sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes(WindowsFileAttributeViews.java:53)
            at java.base/sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes(WindowsFileAttributeViews.java:38)
            at java.base/sun.nio.fs.WindowsFileSystemProvider.readAttributes(WindowsFileSystemProvider.java:194)
            at java.base/java.nio.file.Files.readAttributes(Files.java:1755)
            at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1220)
            at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:727)
            at java.base/java.util.zip.ZipFile$CleanableResource.get(ZipFile.java:845)
            at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:245)
            at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:175)
            at java.base/java.util.jar.JarFile.<init>(JarFile.java:341)
            ... 30 more

... alors j'ai enlevé pdq.jar du classpath manifeste du pot et le tomee / tomcat serveur démarrais propre par la suite.

Je déployé une application simple REST - contenant une méthode GET - qui utilise un simple appel à jdbc d'extraire des données de la base de données IBM « SAMPLE » (qui est livré avec db2express-c)

L'application ressemble à ceci ...

    package aaa.bbb.ccc.war;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayDeque;
    import java.util.ArrayList;
    import java.util.Deque;
    import java.util.List;

    import javax.annotation.Resource;
    import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.TypedQuery;
    import javax.persistence.criteria.CriteriaBuilder;
    import javax.persistence.criteria.CriteriaQuery;
    import javax.persistence.criteria.Predicate;
    import javax.persistence.criteria.Root;
    import javax.sql.DataSource;
    import javax.ws.rs.Consumes;
    import javax.ws.rs.GET;
    import javax.ws.rs.POST;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.Context;
    import javax.ws.rs.core.MediaType;
    import javax.ws.rs.core.Response;
    import javax.ws.rs.core.UriInfo;

    import aaa.bbb.ccc.generated.EmployeeList;
    import aaa.bbb.ccc.generated.EmployeeType;
    import aaa.bbb.ccc.generated.ObjectFactory;

    @Stateless
    @Path("/employeeList")
    public class MyRestSvc {

        @Context
        UriInfo uriInfo;

        public MyRestSvc() {
        }

        @Resource(name = "jdbc/sample", type = javax.sql.DataSource.class)  
        private DataSource sampleDb;

        @GET
        @Path("{empno}")
        @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
        public EmployeeList get(@Context javax.servlet.http.HttpServletRequest request, @PathParam("empno") String empno) {
            String empNo = null;
            Connection con = null;
            Statement stmt = null;
            ResultSet rs = null;

            try {
                con = sampleDb.getConnection();
                con.setAutoCommit(false);

                // Create the Statement
                stmt = con.createStatement();
                System.out.println("**** Created JDBC Statement object");

                // Execute a query and generate a ResultSet instance
                rs = stmt.executeQuery("SELECT EMPNO FROM EMPLOYEE");
                System.out.println("**** Created JDBC ResultSet object");

                // Print all of the employee numbers to standard output device
                while (rs.next()) {
                    empNo = rs.getString(1);
                    System.out.println("Employee number = " + empNo);
                }

                System.out.println("**** Fetched all rows from JDBC ResultSet");
                // Close the ResultSet
                rs.close();
                System.out.println("**** Closed JDBC ResultSet");

                // Close the Statement
                stmt.close();
                System.out.println("**** Closed JDBC Statement");

                // Connection must be on a unit-of-work boundary to allow close
                con.commit();
                System.out.println("**** Transaction committed");

                // Close the connection
                con.close();


            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                if (con != null) {
                    System.out.println("Connected successfully.");
                    try {
                        con.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }

            return new EmployeeList();
        }
    }

J'ai couru une commande de boucle de test pour effectuer une opération GET ... à savoir,

    curl -k -v -L -H "Content-Type: application/xml"   -X GET http://localhost:8888/MyRestSvc/employeeList/000190

et a reçu cette exception ...

"Exception java.net.ConnectException: Prise d'ouverture d'erreur au serveur localhost / 127.0.0.1 sur le port 50 000 avec un message: Connexion refusée (Connexion refusée) ERRORCODE = -4499, SQLSTATE = 08001".

c'est à dire,

    -
    -
    -
    10-Sep-2018 21:04:15.767 INFO [main] org.apache.openejb.assembler.classic.Assembler.createRecipe Creating Resource(id=jdbc/sample)
    10-Sep-2018 21:04:16.173 SEVERE [main] org.apache.tomcat.jdbc.pool.ConnectionPool.init Unable to create initial connections of pool.
     com.ibm.db2.jcc.am.DisconnectNonTransientConnectionException: [jcc][t4][2043][11550][4.21.29] Exception java.net.ConnectException: Error opening socket to server localhost/127.0.0.1 on port 50,000 with message: Connection refused (Connection refused). ERRORCODE=-4499, SQLSTATE=08001
            at com.ibm.db2.jcc.am.kd.a(kd.java:338)
            at com.ibm.db2.jcc.am.kd.a(kd.java:435)
            at com.ibm.db2.jcc.t4.ac.a(ac.java:440)
            at com.ibm.db2.jcc.t4.ac.<init>(ac.java:96)
            at com.ibm.db2.jcc.t4.a.b(a.java:366)
            at com.ibm.db2.jcc.t4.b.newAgent_(b.java:2076)
            at com.ibm.db2.jcc.am.Connection.initConnection(Connection.java:812)
            at com.ibm.db2.jcc.am.Connection.<init>(Connection.java:754)
            at com.ibm.db2.jcc.t4.b.<init>(b.java:339)
            at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:233)
            at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:199)
            at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:482)
            at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:116)
            at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:319)
            at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:212)
            at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:736)
            at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:668)
            at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:483)
            at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:154)
            at org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEConnectionPool.<init>(TomEEDataSourceCreator.java:221)
            at org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEDataSource.createPool(TomEEDataSourceCreator.java:154)
            at org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEDataSource.<init>(TomEEDataSourceCreator.java:131)
            at org.apache.tomee.jdbc.TomEEDataSourceCreator.pool(TomEEDataSourceCreator.java:68)
            at org.apache.openejb.resource.jdbc.pool.PoolDataSourceCreator.poolManaged(PoolDataSourceCreator.java:80)
            at org.apache.openejb.resource.jdbc.DataSourceFactory.create(DataSourceFactory.java:213)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.base/java.lang.reflect.Method.invoke(Method.java:564)
            at org.apache.xbean.recipe.ReflectionUtil$StaticFactory.create(ReflectionUtil.java:999)
            at org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:276)
            at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:96)
            at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:61)
            at org.apache.openejb.assembler.classic.Assembler.doCreateResource(Assembler.java:3131)
            at org.apache.openejb.assembler.classic.Assembler.createResource(Assembler.java:2964)
            at org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(Assembler.java:586)
            at org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:487)
            at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:150)
            at org.apache.openejb.OpenEJB.init(OpenEJB.java:307)
            at org.apache.tomee.catalina.TomcatLoader.initialize(TomcatLoader.java:247)
            at org.apache.tomee.catalina.ServerListener.lifecycleEvent(ServerListener.java:168)
            at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
            at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:395)
            at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:108)
            at org.apache.catalina.startup.Catalina.load(Catalina.java:632)
            at org.apache.catalina.startup.Catalina.load(Catalina.java:655)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.base/java.lang.reflect.Method.invoke(Method.java:564)
            at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:309)
            at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492)
    Caused by: java.net.ConnectException: Connection refused (Connection refused)
            at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
            at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:400)
            at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:243)
            at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:225)
            at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:402)
            at java.base/java.net.Socket.connect(Socket.java:591)
            at com.ibm.db2.jcc.t4.w.run(w.java:49)
            at java.base/java.security.AccessController.doPrivileged(Native Method)
            at com.ibm.db2.jcc.t4.ac.a(ac.java:426)
            ... 49 more

    10-Sep-2018 21:04:16.192 SEVERE [main] org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEDataSource.<init> Can't create DataSource
     com.ibm.db2.jcc.am.DisconnectNonTransientConnectionException: [jcc][t4][2043][11550][4.21.29] Exception java.net.ConnectException: Error opening socket to server localhost/127.0.0.1 on port 50,000 with message: Connection refused (Connection refused). ERRORCODE=-4499, SQLSTATE=08001
            at com.ibm.db2.jcc.am.kd.a(kd.java:338)
            at com.ibm.db2.jcc.am.kd.a(kd.java:435)
            at com.ibm.db2.jcc.t4.ac.a(ac.java:440)
            at com.ibm.db2.jcc.t4.ac.<init>(ac.java:96)
            at com.ibm.db2.jcc.t4.a.b(a.java:366)
            at com.ibm.db2.jcc.t4.b.newAgent_(b.java:2076)
            at com.ibm.db2.jcc.am.Connection.initConnection(Connection.java:812)
            at com.ibm.db2.jcc.am.Connection.<init>(Connection.java:754)
            at com.ibm.db2.jcc.t4.b.<init>(b.java:339)
            at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:233)
            at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:199)
            at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:482)
            at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:116)
            at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:319)
            at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:212)
            at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:736)
            at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:668)
            at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:483)
            at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:154)
            at org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEConnectionPool.<init>(TomEEDataSourceCreator.java:221)
            at org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEDataSource.createPool(TomEEDataSourceCreator.java:154)
            at org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEDataSource.<init>(TomEEDataSourceCreator.java:131)
            at org.apache.tomee.jdbc.TomEEDataSourceCreator.pool(TomEEDataSourceCreator.java:68)
            at org.apache.openejb.resource.jdbc.pool.PoolDataSourceCreator.poolManaged(PoolDataSourceCreator.java:80)
            at org.apache.openejb.resource.jdbc.DataSourceFactory.create(DataSourceFactory.java:213)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.base/java.lang.reflect.Method.invoke(Method.java:564)
            at org.apache.xbean.recipe.ReflectionUtil$StaticFactory.create(ReflectionUtil.java:999)
            at org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:276)
            at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:96)
            at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:61)
            at org.apache.openejb.assembler.classic.Assembler.doCreateResource(Assembler.java:3131)
            at org.apache.openejb.assembler.classic.Assembler.createResource(Assembler.java:2964)
            at org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(Assembler.java:586)
            at org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:487)
            at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:150)
            at org.apache.openejb.OpenEJB.init(OpenEJB.java:307)
            at org.apache.tomee.catalina.TomcatLoader.initialize(TomcatLoader.java:247)
            at org.apache.tomee.catalina.ServerListener.lifecycleEvent(ServerListener.java:168)
            at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
            at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:395)
            at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:108)
            at org.apache.catalina.startup.Catalina.load(Catalina.java:632)
            at org.apache.catalina.startup.Catalina.load(Catalina.java:655)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.base/java.lang.reflect.Method.invoke(Method.java:564)
            at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:309)
            at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492)
    Caused by: java.net.ConnectException: Connection refused (Connection refused)
            at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
            at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:400)
            at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:243)
            at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:225)
            at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:402)
            at java.base/java.net.Socket.connect(Socket.java:591)
            at com.ibm.db2.jcc.t4.w.run(w.java:49)
            at java.base/java.security.AccessController.doPrivileged(Native Method)
            at com.ibm.db2.jcc.t4.ac.a(ac.java:426)
            ... 49 more
    -
    -
    -

La recherche, a trouvé ce lien ...:

    http://www-01.ibm.com/support/docview.wss?uid=swg21287078

... cependant, la « solution » semble supposer que le serveur de tomee et le serveur db2 étaient sur la même machine (?) ...

En outre, FWIW ...

Voici le tomee / tomcat server.xml ...

    <?xml version="1.0" encoding="UTF-8"?>
    <Server port="8005" shutdown="SHUTDOWN">
        <!-- TomEE plugin for Tomcat -->
        <Listener className="org.apache.tomee.catalina.ServerListener" />
        <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
        <!--APR library loader. Documentation at /docs/apr.html -->
        <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
        <!-- Prevent memory leaks due to use of particular java/javax APIs-->
        <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
        <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
        <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

        <GlobalNamingResources>
            <Resource name="UserDatabase" auth="Container"
                      type="org.apache.catalina.UserDatabase"
                      description="User database that can be updated and saved"
                      factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
                      pathname="conf/tomcat-users.xml" />
        </GlobalNamingResources>

        <Service name="Catalina">

            <Connector port="8084" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" xpoweredBy="false" server="Apache TomEE" />
            <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

            <Engine name="Catalina" defaultHost="localhost">
                <Realm className="org.apache.catalina.realm.LockOutRealm">
                    <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
                </Realm>
                <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
                    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
                </Host>
            </Engine>
        </Service>
    </Server>

Voici le tomee / tomcat tomee.xml ...

    <?xml version="1.0" encoding="UTF-8"?>
    <tomee>
            <Resource id="jdbc/sample" type="javax.sql.DataSource">
                    driverClassName = com.ibm.db2.jcc.DB2Driver
                    jdbcDriverType = 4
                    url = jdbc:db2://localhost:50000/SAMPLE
                    username = DB2INST1
                    password = mydb2-pwd
            </Resource>
    </tomee>

Dockerfile pour générer le conteneur docker apache-tomee-plume-7.0.5 ...

    FROM openjdk:10-jre

    ENV PATH /usr/local/tomee/bin:$PATH
    RUN mkdir -p /usr/local/tomee

    WORKDIR /usr/local/tomee

    # curl -fsSL 'https://www.apache.org/dist/tomee/KEYS' | awk -F ' = ' '$1 ~ /^ +Key fingerprint$/ { gsub(" ", "", $2); print $2 }' | sort -u
    ENV GPG_KEYS \
        223D3A74B068ECA354DC385CE126833F9CF64915 \
        678F2D98F1FD9643811639FB622B8F2D043F71D8 \
        7A2744A8A9AAF063C23EB7868EBE7DBE8D050EEF \
        82D8419BA697F0E7FB85916EE91287822FDB81B1 \
        9056B710F1E332780DE7AF34CBAEBE39A46C4CA1 \
        A57DAF81C1B69921F4BA8723A8DE0A4DB863A7C1 \
        B7574789F5018690043E6DD9C212662E12F3E1DD \
        B8B301E6105DF628076BD92C5483E55897ABD9B9 \
        BDD0BBEB753192957EFC5F896A62FC8EF17D8FEF \
        C23A3F6F595EBD0F960270CC997C8F1A5BE6E4C1 \
        D11DF12CC2CA4894BDE638B967C1227A2678363C \
        DBCCD103B8B24F86FFAAB025C8BB472CD297D428 \
        F067B8140F5DD80E1D3B5D92318242FE9A0B1183 \
        FAA603D58B1BA4EDF65896D0ED340E0E6D545F97

    RUN set -xe \
        && for key in $GPG_KEYS; do \
            gpg --keyserver pgp.mit.edu --keyserver-options http-proxy=proxy.apps.dhs.gov:80 --recv-keys "$key" || \
            gpg --keyserver keyserver.pgp.com --keyserver-options http-proxy=proxy.apps.dhs.gov:80 --recv-keys "$key" || \
            gpg --keyserver ha.pool.sks-keyservers.net --keyserver-options http-proxy=proxy.apps.dhs.gov:80 --recv-keys "$key" ; \  
        done

    RUN set -x \
        && curl -fSL https://repo.maven.apache.org/maven2/org/apache/tomee/apache-tomee/7.0.5/apache-tomee-7.0.5-plume.tar.gz.asc --proxy proxy.apps.dhs.gov:80 -o tomee.tar.gz.asc \
        && curl -fSL https://repo.maven.apache.org/maven2/org/apache/tomee/apache-tomee/7.0.5/apache-tomee-7.0.5-plume.tar.gz --proxy proxy.apps.dhs.gov:80 -o tomee.tar.gz \
        && gpg --batch --verify tomee.tar.gz.asc tomee.tar.gz \
        && tar -zxf tomee.tar.gz \
        && mv apache-tomee-plume-7.0.5/* /usr/local/tomee \
        && rm -Rf apache-tomee-plume-7.0.5 \
        && rm bin/*.bat \
        && rm tomee.tar.gz*

    EXPOSE 8084
    CMD ["catalina.sh", "run"]

Dockerized DB2 à partir de:

    https://hub.docker.com/r/ibmcom/db2express-c/

démarrage tomee:

    root@5f9812df3398:/usr/local/tomee/bin# sh startup.sh
    ./catalina.sh: 165: ./catalina.sh: /docker-java-home=/docker-java-home: not found
    Using CATALINA_BASE:   /usr/local/tomee
    Using CATALINA_HOME:   /usr/local/tomee
    Using CATALINA_TMPDIR: /usr/local/tomee/temp
    Using JRE_HOME:        /docker-java-home
    Using CLASSPATH:       /usr/local/tomee/bin/bootstrap.jar:/usr/local/tomee/bin/tomcat-juli.jar
    Tomcat started.

Environnement:

openjdk 10 (en cours d'exécution dans des récipients tomee / db2 docker)

tomee-plume-7.0.5 (dockerized)

db2 11.x (dockerized)

mains:

Vous essayez de vous connecter à db avec ip que localhostdu contenant tomcat. Mais en fait le db est récipient séparé. Donc , soit vous devez utiliser aliasla machine db ou le connecter à l' hôte soit en réseau de l' hôte en mode ou en mode pont avec la redirection de port et vous devez utiliser IP statique de la machine hôte pour se connecter comme l' une des suit de tomcat.

  1. jdbc:db2://<host-machine-static-ip>:50000/SAMPLE
  2. jdbc:db2://<docker-container-ip>:50000/SAMPLE
  3. jdbc:db2://<docker-container-alias>:50000/SAMPLE

Permettez-moi de vous expliquer en bref.

Mes hypothèses:

  1. Tomcat serveurs de serveur et db sont en cours d'exécution en tant que conteneurs différents.
  2. Les deux sont connectés à différents réseaux de docker.
  3. Vous avez pas le port transmis au serveur db.
  4. Vous n'avez pas défini le fichier docker-Compose pour les conteneurs.
  5. Vous exécutez les conteneurs à l' aide docker run.

Si toutes mes hypothèses sont propres alors il y a un problème dans la configuration du réseau docker . Fondamentalement , il existe différentes façons de se connecter d'un conteneur à un autre récipient.

  1. En ce définissant des alias pour chaque conteneur et se connecter à un même réseau (recommandé) .
  2. Par transfert de port de l'hôte à conteneur de menu fixe et la connexion à ce port avec IP statique de la machine hôte.
  3. En exécutant les conteneurs dans le réseau hôte et la connexion au port requis en utilisant l'ip statique de la machine hôte.
  4. En définissant une adresse IP statique pour conteneur de menu fixe et la connexion des autres récipients en utilisant cette adresse IP.

La méthode recommandée en bref

Vous devez définir l'alias pour le conteneur, Pour cela, vous pouvez utiliser le nom du service ou vous pouvez déclarer alias supplémentaires ainsi. Ensuite, les deux doivent être connectés au même réseau alors que la découverte de services docker fonctionnera. Une fois que tout est fait, vous pouvez connecter d'un conteneur à un autre récipient en utilisant l'alias de l'autre machine.

Les références:

  1. Travailler avec les commandes de réseau
  2. Utilisation des réseaux de pont
  3. Docker-compose alias
  4. Docker référence de l'exécution

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=179825&siteId=1
conseillé
Classement