【问题标题】:Tomcat start not recognised by IDEIDE 无法识别 Tomcat 启动
【发布时间】:2020-04-05 04:50:42
【问题描述】:

我正在使用 Netbeans 11 部署 WAR 文件。使用 RUN 时,IDE 启动 Tomcat,显示启动信息:

INFO - Starting ProtocolHandler [http-nio-8080]
INFO - Starting ProtocolHandler [ajp-nio-8009]
INFO - Server startup in 815 ms

但是,IDE“运行”选项卡显示启动失败,超时后:

Deploying on TomEE
    profile mode: false
    debug mode: false
    force redeploy: true
Starting Tomcat process...
Waiting for Tomcat...
Starting of Tomcat failed.

不知何故,IDE 无法正确检测到 Tomcat,因为 Tomcat 确实在运行并侦听端口 8080。我尝试了these suggestions,尤其是带有 IDE 代理和连接器的那个,但没有一个工作。


根据 cmets:

1) 我正在运行 TomEE,尽管我认为就我的问题而言,从 Netbeans 的角度(甚至从 TomEE 本身)来看并没有什么不同。老实说,我认为这是 Netbeans - Tomcat 通信问题,TomEE 只是添加了一些库和其他会影响以后的东西。

2) 我使用的是自定义server.xml,但现在我使用的是原始的:

<?xml version='1.0' encoding='utf-8'?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- Note:  A "Server" is not itself a "Container", so you may not
     define subcomponents such as "Valves" at this level.
     Documentation at /docs/config/server.html
 -->
<Server port="8005" shutdown="SHUTDOWN">
  <!-- TomEE plugin for Tomcat -->
  <Listener className="org.apache.tomee.catalina.ServerListener" />
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!--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" />

  <!-- Global JNDI resources
       Documentation at /docs/jndi-resources-howto.html
  -->
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <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>

  <!-- A "Service" is a collection of one or more "Connectors" that share
       a single "Container" Note:  A "Service" is not itself a "Container",
       so you may not define subcomponents such as "Valves" at this level.
       Documentation at /docs/config/service.html
   -->
  <Service name="Catalina">

    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
    <!--
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    -->


    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
    -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" xpoweredBy="false" server="Apache TomEE" />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->
    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
         This connector uses the NIO implementation with the JSSE engine. When
         using the JSSE engine, the JSSE configuration attributes must be used.
    -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" xpoweredBy="false" server="Apache TomEE" />
        </SSLHostConfig>
    </Connector>
    -->
    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2
         This connector uses the APR/native implementation. When using the
         APR/native implementation or the OpenSSL engine with NIO or NIO2 then
         the OpenSSL configuration attributes must be used.
    -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" xpoweredBy="false" server="Apache TomEE" />
        <SSLHostConfig>
            <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
                         certificateFile="conf/localhost-rsa-cert.pem"
                         certificateChainFile="conf/localhost-rsa-chain.pem"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
    -->

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />


    <!-- An Engine represents the entry point (within Catalina) that processes
         every request.  The Engine implementation for Tomcat stand alone
         analyzes the HTTP headers included with the request, and passes them
         on to the appropriate Host (virtual host).
         Documentation at /docs/config/engine.html -->

    <!-- You should set jvmRoute to support load-balancing via AJP ie :
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
    -->
    <Engine name="Catalina" defaultHost="localhost">

      <!--For clustering, please take a look at documentation at:
          /docs/cluster-howto.html  (simple how to)
          /docs/config/cluster.html (reference documentation) -->
      <!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->

      <!-- Use the LockOutRealm to prevent attempts to guess user passwords
           via a brute-force attack -->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <!-- This Realm uses the UserDatabase configured in the global JNDI
             resources under the key "UserDatabase".  Any edits
             that are performed against this UserDatabase are immediately
             available for use by the Realm.  -->
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <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>

3) Tomcat 正确启动,我看到我的计算机中打开了端口 8080。实际上,我必须手动终止该进程才能再次尝试从 Netbeans 重新运行,否则它会抱怨端口已经打开。同时,Netbeans 只是等待和等待......在“等待 Tomcat”之后的某个时刻,它只是说它失败了,就像它无法识别 Tomcat 是 ON 一样。 Tomcat 保持运行,就像没有人与之通信一样。所以任何地方都没有其他奇怪的日志。

4) 从 Netbans 我只能“启动”,永远不会停止,因为它没有检测到 Tomcat 正在运行。因此,正如您所说,“停止”命令被禁用。 Tomcat 正在运行,但 IDE 从未检测到它正在运行。

5) 这种情况经常发生,我无法从 IDE 运行任何项目。


Netbeans 日志说:

INFO [org.netbeans.modules.tomcat5.deploy.TomcatManager]: TomEE version TOMEE_15, type TOMEE_PLUS
INFO [null]: Last record repeated again.
INFO [org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment]
org.netbeans.modules.j2ee.deployment.impl.ServerException: Starting of Tomcat failed.
    at org.netbeans.modules.j2ee.deployment.impl.ServerInstance._start(ServerInstance.java:1457)
    at org.netbeans.modules.j2ee.deployment.impl.ServerInstance.startTarget(ServerInstance.java:1400)
    at org.netbeans.modules.j2ee.deployment.impl.ServerInstance.startTarget(ServerInstance.java:1204)
    at org.netbeans.modules.j2ee.deployment.impl.ServerInstance.start(ServerInstance.java:1082)
    at org.netbeans.modules.j2ee.deployment.impl.TargetServer.startTargets(TargetServer.java:547)
[catch] at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:190)
    at org.netbeans.modules.maven.j2ee.execution.DeploymentHelper.perform(DeploymentHelper.java:185)
    at org.netbeans.modules.maven.j2ee.execution.ExecutionChecker.executionResult(ExecutionChecker.java:70)
    at org.netbeans.modules.maven.execute.MavenCommandLineExecutor.run(MavenCommandLineExecutor.java:303)
    at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:128)

【问题讨论】:

  • [1] 如果您要部署到 TomEE 而不是 Tomcat(并且基于“运行”sn-p 它看起来是这样),您能否更新您的问题以明确说明? [2] 是否可以发布 server.xml? [3] “Tomcat failed” 消息时,Tomcat 的日志中有任何相关消息吗? [4] 除了记录的错误消息(“Tomcat 启动失败”)之外,还有其他问题吗?例如,如果您尝试从 NetBeans 停止服务器,即使 Tomcat 正在运行,是否会禁用 Tomcat 的 Stop 菜单项? [5] 这种情况是一直发生还是间歇性发生?
  • 好的。 [1] 是否有任何相关内容写入 NetBeans 日志(View > IDE Log)? [2] 它对您一点帮助都没有,但仅供参考,其他人正在报告 NetBeans 11.2 上的 Wildlfly 存在类似问题:Netbeans does not know that Wildfly already started。 [3] 虽然我无法重现这两个问题,但也许这是 NetBeans 11.x 问题? [4] 由于这是一个可重现的错误,不妨考虑raising a NetBeans bug report
  • 谢谢。日志表明 ExecutionChecker.executionResult 失败(请参阅我的问题中的更新)。因此,我们所知道的并不多。我将像使用 Tomcat 一样重新安装 Netbeans,可能使用不同的版本。
  • 对 - 堆栈跟踪并没有真正添加任何新内容。似乎有一些关于 Wildlfy 和 NetBeans 无法正常通信的旧 NetBeans 错误报告,尽管我没有看到 Wildlfy 15。我不确定重新安装 NetBeans 是否会取得任何效果,但升级到 NetBeans 11.2 和/或 Wildfly 18 可能会。在现有环境中尝试的另一件相当简单的事情(如果可行的话)是使用不同的服务器,such as Payara,它对我来说完美无缺。
  • 好的!经过大量测试后,我想我到了某个地方。看来问题与网络接口有关-我的计算机有两个,一个用于Internet,一个用于内部网络(测试后需要部署WAR)。如果我禁用内部的,那么显然会检测到 Tomcat。有些事情没有正确管理。 (作为记录,我也尝试了 Netbeans 11.2 和 10.0 并没有工作)

标签: tomcat netbeans tomee-7


【解决方案1】:

我用谷歌搜索和stackoverflowed,直到我看到这里的文章才解决: https://www.mail-archive.com/commits@netbeans.apache.org/msg24509.html

我下载了NetBeans11.1的源代码,用命令编译,

ant -Dcluster.config=full

大约需要 17 分钟。之后,我用

ant tryme

然后我在 tools->servers 中设置 tomcat 设置并打开我的项目。然后我尝试运行它。太棒了,它现在工作正常。

显然,这是 NetBeans 的一个错误。而且在NetBeans端解决起来也不难。

【讨论】:

  • 我发现只替换NetBeans11.1 bin包中的一个jar文件就可以解决这个问题。也就是enterprise/modules下的org-netbeans-modules-tomcat5.jar。
【解决方案2】:

我遇到了同样的问题,使用旧版本的 tomcat 解决了。

我在使用 Netbeans 11.1 和 11.3 时遇到了问题。

我在使用 tomcat 8.5.54 和 9.0.34 时收到此错误。 Tomcat 使用 8.5.49 版运行良好

【讨论】:

  • 谢谢谢谢谢谢!就我而言,这就是问题所在!
【解决方案3】:

我认为问题出在具有两个网络接口的计算机上。不知何故,Netbeans(很可能,除非 Tomcat 有事要做)错误地管理了这种情况,它无法检测到 Tomcat 已启动。

我真的不知道如何解决它,但是我断开了第二个界面,它似乎可以工作。这很烦人和不方便,但它是一种有效的解决方法。

我发现这一点是因为sudo 真的很慢,而且我发现存在一个问题,即 sudo 在具有两个或多个网络接口的机器上变得非常慢......无关,但解决方法:hereecho "Set probe_interfaces false" | sudo tee -a /etc/sudo.conf)

  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2011-05-12
    • 2017-12-26
    • 1970-01-01
    • 2015-11-25
    • 2016-09-02
    • 1970-01-01
    相关资源
    最近更新 更多