【发布时间】:2011-02-18 15:02:11
【问题描述】:
我正在将 WebLogic 10.3 与 Java EE 应用程序一起使用。谁能告诉我如何调试这个应用程序?
【问题讨论】:
标签: debugging jakarta-ee weblogic-10.x
我正在将 WebLogic 10.3 与 Java EE 应用程序一起使用。谁能告诉我如何调试这个应用程序?
【问题讨论】:
标签: debugging jakarta-ee weblogic-10.x
我认为其他答案有些错误。对于 Windows,如果您将名为 debugFlag 的环境变量设置为 true 或在 solaris/unix 中执行相同操作
debugFlag=true
export debugFlag
DEBUG_PORT=8453
export DEBUG_PORT
,然后 setDomainEnv.sh 或 setDomainEnv.cmd 将被其他脚本调用以启动 WLS。他们寻找debugFlag 和DEBUG_PORT,只要未设置“生产”标志,它就会从脚本中获取正确的参数进行调试(-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=%DEBUG_PORT%,server=y,suspend=n -Djava.compiler=NONE)。
您不应该破解这些脚本。这将使部署和维护变得困难,setDomainEnv 脚本的全部目的是为了在整个集群和整个环境中使用和维护正确的默认值。我承认他们的记录很差。
注意,如果您使用的是 Oracle weblogic maven 插件,那么目标 wls:deploy 或 wls:start-server 将在启动时获取这些环境设置,因为它们会调用幕后的命令,而这些又会首先调用 @987654331 @。
到目前为止,如果您使用 eclipse 并设置了 Oracle WebLogicServer,当您发出 mvn:deploy 时,maven 插件将不会附加到调试模式,您可以在调试模式下重新启动它(傻),或者创建一个 'Run ==> Debug ==> DebugConfigurations ==> RemoteJavaApplication',其连接类型为 'standard (socket attach)',主机为 'localhost'(或远程服务器)和端口(默认对我来说是'8453')。然后你可以做Run ==> Debug Configurations ==> Local Server Attach。
【讨论】:
对我来说这很有效:
在文件夹 WEBLOGIC_HOME\user_projects\domains\my_domain\bin 中
有一个文件setDomainEnv.cmd
我在里面找到了代码:
if "%debugFlag%"=="true" (
set JAVA_DEBUG=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=%DEBUG_PORT%,server=y,suspend=n -Djava.compiler=NONE
set JAVA_OPTIONS=%JAVA_OPTIONS% %enableHotswapFlag% -ea -da:com.bea... -da:javelin... -da:weblogic... -ea:com.bea.wli... -ea:com.bea.broker... -ea:com.bea.sbconsole...
) else (
set JAVA_OPTIONS=%JAVA_OPTIONS% %enableHotswapFlag% -da
)
我只是将调试行放在 if 子句之外:
set JAVA_DEBUG=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=%DEBUG_PORT%,server=y,suspend=n -Djava.compiler=NONE
set JAVA_OPTIONS=%JAVA_OPTIONS% %enableHotswapFlag% -ea -da:com.bea... -da:javelin... -da:weblogic... -ea:com.bea.wli... -ea:com.bea.broker... -ea:com.bea.sbconsole...
if "%debugFlag%"=="true" (
set JAVA_DEBUG=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=%DEBUG_PORT%,server=y,suspend=n -Djava.compiler=NONE
set JAVA_OPTIONS=%JAVA_OPTIONS% %enableHotswapFlag% -ea -da:com.bea... -da:javelin... -da:weblogic... -ea:com.bea.wli... -ea:com.bea.broker... -ea:com.bea.sbconsole...
) else (
set JAVA_OPTIONS=%JAVA_OPTIONS% %enableHotswapFlag% -da
)
完成这些设置后,您可以在端口 8453 上进行调试
这个文件里也配置了端口,你也可以改一下:
if "%DEBUG_PORT%"=="" (
set DEBUG_PORT=8453
)
停止服务器,运行脚本,启动服务器。
现在您的 weblogic 服务器已设置好进行调试。
【讨论】:
debugFlag 将与端口一起在环境中设置。唯一需要注意的是,在 production 环境中,即使设置了该标志也会被忽略。
在 weblogic server 上启用调试的最佳方法如下:
设置 debugFlag=true
设置 DEBUG_PORT=9001
所以,脚本上会有 3 行,这就是你所需要的...
您还可以使用更多变量....
WLS_REDIRECT_LOG=log_path
JAVA_OPTIONS
EXTRA_JAVA_PROPERTIES
【讨论】:
为了让 Eclipse 调试器与 Weblogic 10 一起工作,我所做的是在文件夹 weblogic.10.3.3.0\user_projects\domains\base_domain\bin\ 中查找 startWeblogic.cmd 文件并修改以下行(大约第 95 行):
set JAVA_OPTIONS=%SAVE_JAVA_OPTIONS%
到
set JAVA_OPTIONS=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8453,server=y,suspend=n %SAVE_JAVA_OPTIONS%
然后我停止了所有在 Eclipse 中运行的 weblogic 服务器,并使用 startWebLogic.cmd 文件启动了 Weblogic。
然后我在 Eclipse 中创建了一个新的调试配置。转到调试配置,选择“远程 Java 应用程序”,它应该会识别您的项目,使用 Standard (Socket attach) 作为连接类型并在连接属性中指定端口 8453。
现在申请并运行。在一段会定期运行的代码中设置一些断点,看看它是否正常工作。
【讨论】:
Jonnathan Q 的回答也帮助我在调试模式下启动了 Weblogic。对于 unix,您可以在 shell 脚本中使用如下语法:
debugFlag=true
export debugFlag
DEBUG_PORT=9001
export DEBUG_PORT
然后根据需要运行 startWeblogic.sh 和 startManagedWeblogic.sh。
更新:为了让我们的 IDE(Eclipse、IDEA)在断点处停止,我们在 AdminServer 上部署了我们的 webapp,因为如果部署到集群环境中的节点,我们的 IDE 根本不会在断点处停止。
【讨论】: