Tomcat "duplicado"

Galera, boa tarde. Preciso de uma ideia de vocês. Não entendo quase nada de tomcat mas estou passando por um problema na aplicação da minha empresa. Iniciando algumas implementações de Job utilizando a biblioteca Quartz, descobri que o tomcat parece estar iniciando a aplicação duas vezes.
Todos os Jobs que faço, executam duas vezes ao mesmo tempo (ou um deles retorna erro se for caso de concorrência). O Quartz já tem um meio para não adicionar um serviço duas vezes, eu adiciono como identificação do Job o nome da classe, o que impediria a mesma de ser adicionada duas vezes pela mesma aplicação. A única hipótese que eu consegui imaginar que isso aconteceria foi o tomcat inicializando duas vezes.

Alguém sabe me dizer algo a respeito? Se precisarem de mais alguma informação para analisar o caso pode me falar.

É dificil o tomcat iniciar duas vezes por conta da porta utilizada. Uma vez a porta ocupada, seria lançada uma exceção caso uma outra instância do tomcat fosse iniciada na mesma porta.

Mais provável que seja um problema no seu job, ou alguma outra configuração no seu projeto.

26-Aug-2019 10:06:39.513 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.16
26-Aug-2019 10:06:39.518 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Feb 4 2019 16:30:29 UTC
26-Aug-2019 10:06:39.518 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.16.0
26-Aug-2019 10:06:39.519 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
26-Aug-2019 10:06:39.519 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            5.0.7-1.el7.elrepo.x86_64
26-Aug-2019 10:06:39.519 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
26-Aug-2019 10:06:39.519 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /usr/java/jdk-11.0.3
26-Aug-2019 10:06:39.519 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11.0.3+12-LTS
26-Aug-2019 10:06:39.519 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
26-Aug-2019 10:06:39.519 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /opt/tomcat/tomcatC2_9_0_16
26-Aug-2019 10:06:39.519 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /opt/tomcat/tomcatC2_9_0_16
26-Aug-2019 10:06:39.520 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
26-Aug-2019 10:06:39.520 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
26-Aug-2019 10:06:39.520 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
26-Aug-2019 10:06:39.520 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/opt/tomcat/tomcatC2_9_0_16/conf/logging.properties
26-Aug-2019 10:06:39.520 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
26-Aug-2019 10:06:39.520 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
26-Aug-2019 10:06:39.520 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
26-Aug-2019 10:06:39.520 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
26-Aug-2019 10:06:39.521 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx2G
26-Aug-2019 10:06:39.521 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+UseParallelGC
26-Aug-2019 10:06:39.521 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.library.path=/opt/tomcat/tomcatC_9_0_16/native/lib
26-Aug-2019 10:06:39.521 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
26-Aug-2019 10:06:39.521 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/opt/tomcat/tomcatC2_9_0_16
26-Aug-2019 10:06:39.521 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/opt/tomcat/tomcatC2_9_0_16
26-Aug-2019 10:06:39.521 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/opt/tomcat/tomcatC2_9_0_16/temp
26-Aug-2019 10:06:39.521 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library [1.2.21] using APR version [1.4.8].
26-Aug-2019 10:06:39.521 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
26-Aug-2019 10:06:39.522 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
26-Aug-2019 10:06:39.525 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.0.2k-fips  26 Jan 2017]
26-Aug-2019 10:06:39.600 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8082"]
26-Aug-2019 10:06:39.645 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["https-openssl-nio-8446"]
26-Aug-2019 10:06:40.030 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8011"]
26-Aug-2019 10:06:40.042 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [1.483] milliseconds
26-Aug-2019 10:06:40.283 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
26-Aug-2019 10:06:40.283 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.16]
26-Aug-2019 10:06:46.016 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
26-Aug-2019 10:06:50.261 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Diretório de instalação da aplicação web [/opt/tomcat/tomcat_9_0_16/webapps/credipnet/credipnet]
26-Aug-2019 10:06:53.305 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
26-Aug-2019 10:06:57.047 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/opt/tomcat/tomcat_9_0_16/webapps/credipnet/credipnet] has finished in [6.786] ms
26-Aug-2019 10:06:57.051 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8082"]
26-Aug-2019 10:06:57.099 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["https-openssl-nio-8446"]
26-Aug-2019 10:06:57.111 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8011"]
26-Aug-2019 10:06:57.119 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [17.077] milliseconds

Em conversa com um colega observando o log, estranhamos esses dois trechos do log

26-Aug-2019 10:06:39.600 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8082"]
26-Aug-2019 10:06:39.645 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["https-openssl-nio-8446"]
26-Aug-2019 10:06:40.030 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8011"]
26-Aug-2019 10:06:40.042 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [1.483] milliseconds
26-Aug-2019 10:06:57.051 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8082"]
26-Aug-2019 10:06:57.099 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["https-openssl-nio-8446"]
26-Aug-2019 10:06:57.111 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8011"]
26-Aug-2019 10:06:57.119 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [17.077] milliseconds

O “ouvinte” da biblioteca Quartz está sendo instanciado dentro da classe que implementa o ServletContextListener, e os Jobs estão sendo agendados com a mesma identificação (nome e grupo). Só tem como isso acontecer se houvesse duas instâncias dessa classe. Não encontrei uma forma de “debugar” porque isso não acontece no Tomcat do Eclipse.

Esse tomcat roda em cluster?

Nao precisa depender e se complicar com tomcat (ou qualquer outro web server) pra fazer um job em java.

VM - CentOs se não me engano

Entendo, tem vários outros meios realmente. É que estamos num contexto, no meio de uma aplicação maior, o Job foi apenas onde eu encontrei um indício da possibilidade de um problema no tomcat.

Uma forma que vejo que, por acaso, está ocorrendo mais de uma instância no tomcat, fazendo com que esse listener seja executado mais de uma vez e criando o job duplicado, seja um cluster. Assim, mais de uma instância do tomcat seria criada:

opa, agora entendi a pergunta do cluster cara, perdão pela ignorância rsrs

Sim, ele roda em cluster. Porém as duas máquinas têm o arquivo properties e uma delas já sobe com a propriedade “job=false”, e essa propriedade é verificada antes de instanciar o Job.

Entendi, mas já resolveria esse problema do job e aproveitaria pra arrumar a casa, separando a aplicação pra ser executada direto pelo java. Já pra aplicacao web ter mais de um servidor tomcat rodando não é problema, é até melhor.