【发布时间】: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 "%r" %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 并没有工作)