0

我从 GWT 和 smartgwt 开始,我意识到当你的代码在 jetty 上工作时,不一定能在 Jboss 上工作。

当客户端发生故障时,有没有办法可以调试异常或任何类型的错误,jboss 控制台什么也没说。我想知道在 jboss 上运行时是否可以将码头窗口附加到应用程序。

我正在使用 Netbeans,jboss 5.1

更新:

感谢您的帮助,我一直在使用com.google.gwt.logging.Logging它,它工作得很好,但我正在寻找一种调试客户端代码的方法,例如使用 netbeans。我知道如何从 jboss 开始调试服务器端代码,set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y %JAVA_OPTS%然后我将 netbeans 调试器附加到 8787 端口。有没有办法从 Jboss 做类似的事情来调试客户端?

我也知道如何使用 gwt:debug 调试客户端代码,但在这种情况下,我的应用程序没有在 jboss 上运行,而是在码头上运行。

4

3 回答 3

1

我假设您已经正确设置了启动配置(将启动环境指向 JBoss 而不是嵌入式 Jetty)。如果您处于开发模式,您应该已经能够调试 javacode。如果您想在生产环境中调试客户端代码,请使用浏览器的开发工具。

关于错误处理 有两种方法可以处理 GWT 客户端异常。

  1. 将它们记录在客户端
  2. 将它们发送到服务器并将它们记录在服务器端

我认为您是在服务器端日志记录之后(实际上这就是我们在生产模式中所需要的) GWT 为客户端和服务器端都有一个定义良好的错误处理机制。这些答案/帖子将帮助您在 GWT 应用程序中正确设置错误处理程序。

GWT 中异常处理的 7 个技巧

在 GWT 中设置 remoteLoggingServlet

于 2013-05-15T09:17:28.377 回答
0

随着 JBoss EAP7 和 GWT 2.7 放弃了 DevMode 以支持 SuperDevMode,事情变得更加复杂了。相关文章(GWT 中的 Super Dev 模式)提供了很好的线索,但没有一个直接适用于我的服务器和版本组合:JBoss EAP 7.0、GWT 2.7、Eclipse 的 GWT 2.7 插件、Eclipse 4.5+ 和 Maven Builds。关键的变化是如何将带有 GWT 代码的 WAR 部署到 JBoss EAP 7。

我建议你阅读GWT Super Dev Mode 的介绍

  1. 假设您有一个现有的 GWT Eclipse 项目,该项目使用 Maven 构建并且您能够部署和执行。除了打包的 WAR 存档版本(如 myProject/target/myWebInterface-1.0.war)之外,构建还将在您的 myProject/target/myWebInterface-1.0/ 中生成一个分解的 WAR 版本。您可能需要检查 GWT maven 插件是否特别在 myWebInterface-1.0/ 下的 GWT 模块子目录中构建了 myModule.devmode.js 和 myModule.nocache.js。

  2. 忘记打包的 .war 并通过 JBoss 控制台将展开的版本部署到您的 JBoss 服务器中:部署 > 添加 > 创建非托管部署 > 下一步。填写如下:

    在此处输入图像描述

    确保终止“.war”中的名称字段,尽管您不是从打包存档而是从目录路径进行部署。这使 JBoss 能够理解要应用的部署配置文件,即 WAR。您确实可以检查部署是否正常并且您的界面是否正在运行。

  3. 在 Eclipse 中,打开项目的项目属性,在左侧树中导航到 Google > Web Application 选项卡并确保选中“此项目具有 WAR 目录”。还可以导航到 Google > Web Toolkit 选项卡并确保选中“使用 GWT”。

  4. 在 Eclipse 中右键单击您的项目并运行为 > GWT 超级开发模式。GWT 代码服务器已经启动,并且由于缺少库依赖关系而可能会失败(或至少在告诉它准备好之前生成错误)。但是,已经创建了一个易于修复的启动配置。因此,请务必从 Eclipse 控制台红色 STOP 按钮中终止当前启动。

  5. 我们需要编辑刚刚创建的默认启动配置,并将所有库依赖项提供给 CodeServer,如下所示:

    • 在 Eclipse 顶部菜单中:Run > Run Configurations... > 选择刚刚创建的 Google Web Application
    • 在“服务器”选项卡下,选中“运行内置服务器”(端口 8888)并单击“应用”
    • 在“参数”选项卡下,您必须看到“-noserver”选项
    • 如果需要,请修复 JRE 选项卡下的 JRE 以匹配 Eclipse IDE 的 JDK
    • 在“类路径”选项卡下的“用户条目”下,您必须添加原始 WAR 构建中的所有库依赖项。最好的方法是使用从 Maven .m2 本地存储库中获取的所有依赖项创建 Eclipse 用户库。就我而言,我添加了所有支持后端 REST 服务器的 Spring Framework 库,这些库与 GWT 前端一起部署在同一个 WAR 存档中。
    • 单击“应用”,然后单击“运行”此更新的配置
    • Eclipse 控制台通常显示“代码服务器已在http://127.0.0.1:9876/准备就绪”。检查此跟踪之前没有错误。
  6. 在新的 Chrome 窗口中打开上述链接;你会看到

    在此处输入图像描述

    并将书签添加到您的 Chrome 收藏夹中,如该页面所示

  7. 在已部署(已展开/未托管)的 Web 项目主页上打开一个新的 Chrome 浏览器选项卡

  8. 单击“开发模式打开”书签。弹出一个框架,建议“编译”您的 GWT 模块。单击它,框架会显示“正在编译 yourModuleName”。您还可以在 Eclipse 控制台中关注 GWT 代码服务器活动,并确保在重新编译 GWT java 代码时提供了所有需要的库依赖项。

    如果您收到“编译 myModule 失败”,刷新浏览器窗口可能会解决问题,而建议的“再试一次”将不起作用......

  9. 从那时起,您可以在 Eclipse 中更改 GWT java 源代码,然后刷新您的浏览器窗口以立即查看所做更改的效果。

调试 GWT 代码

  1. 您可以通过在 Java 源代码中设置断点来进一步调试 GWT 代码,而 Java 代码在您的客户端浏览器中作为 Java 脚本编译和执行!那是魔法!进行如下操作:
    • 在 Chrome 中,激活开发者工具:按 ctrl-shift-i 或点击设置图标 > 更多工具 > 开发者工具
    • 确保您启用了“JavaScripts source maps”:单击工具设置图标 > 设置 > ...
    • 然后,您可以在左侧导航树(树的底部)导航到 GWT java 源代码,或者按 ctrl-p 快速打开您知道的源文件(例如,当前在 Eclipse 中编辑的文件),并在 Chrome 开发人员工具中设置断点中央面板;当您刷新网页时,调试器将在断点处执行并停止,并让您检查映射到原始 java 代码的 JavaScript 变量。请注意,断点只能从 Chrome 开发人员工具中设置,忘记 Eclipse 自己的断点。

它是如何工作的,非常简单:

  • 由于展开/非托管部署,JBoss 直接使用 Eclipse 构建;不会制作任何需要在每次更改时都明确重新部署的副本。
  • GWT Code Server 是 Eclipse 的 GWT 插件的一部分,它检测源代码中的更改并即时为客户端重新编译 Java Script
  • 客户端浏览器始终从代码服务器获取热重新编译的 Javascript,而不是从已部署的(静态)WAR 存档中获取它们
  • 代码服务器默认启动一个码头网络服务器(在端口 8888)来部署服务器端代码,但我们将其关闭并使用 JBoss 服务器代替显式的展开/非托管部署。
于 2016-09-27T12:10:49.427 回答
0

我知道这是一个老问题,但由于之前的答案没有被标记为已接受,这就是我这样做的方式:

  1. 您可以使用SDBG,这是一个很好的 Eclipse 插件,允许您从 Eclipse 中调试客户端代码。观看该页面上的介绍性教程以帮助您入门。我使用 Glassfish,而不是嵌入式 Jetty,而且我知道它也适用于 JBoss。
  2. 如果您使用 Eclipse 和 Maven,我将在此处提供更完整的列表,其中列出了您可以在服务器端和客户端代码中调试 SmartGWT 时可以执行的操作。
于 2016-04-22T21:26:19.440 回答