2

我有一个使用一些外部库的 ebj(在这种情况下,这些库是我自己编写的)。我已将它们包含在我的 EJB 中。

问题是 glassfish 似乎只加载了一次所需的 jars(在第一次部署时),并认为他已经有了用于进一步部署的 jars。这只是一个假设,但如果我对 EJB 使用的一个库进行任何更改,重新部署 EJB,所做的更改将不会应用...... Glassfish 仍然使用他可能保留在缓存中的旧 jar 或类似的东西(我可以在 glassfish 存储库中找到罐子的任何标记)。

到目前为止我发现的唯一解决方案是重新启动服务器......不太适合开发/测试会话,您必须等待 glassfish 重新启动您所做的每一个小改动。

我的问题是:有没有办法避免这种行为并强制 glassfish 在每次部署时重新加载所需的罐子?

谢谢你读我。

注意:我正在使用 netbeans 进行本地部署,但直接从 glassfish 管理控制台进行部署会导致相同的结果。

4

2 回答 2

0

好的,所以我终于得到了一些具体的结果。我不知道是否有很多人按照我的方式工作,但我会公开我找到的适合我需要的解决方案。

首先,如果您使用 netbeans 平台(因此使用 netbeans 插件)在独立的 Java 客户端上部署 EJB,您可能会感到担心。

问题是 glassfish(3.1.2,我不知道其他版本是否会发生同样的问题)在重新部署 EJB 时不会重新加载所需的 jar。因此,如果您的 EJB 有一些依赖项并且在其中进行了一些更改,则 glassfish 将看不到它们,并且即使在 EJB(重新)部署之后仍将继续使用旧 jar。它被 oracle 标记为错误,所以我认为它会很快(或不会)解决,但在 oracle 完成他的工作之前,这是一个解决方案。

注意:此错误仅在您的 EJB 具有 netbeans 插件依赖项时发生。如果不是您的情况,您只需将 EJB 添加到企业应用程序中并部署它,您的 jar 将自动重新加载。

假设你是我的情况。如果您编译包含依赖于 netbeans 插件的 EJB 的 EE 应用程序。您可能会收到此错误:

Target "dist-ear" does not exist in the project "the path your netbeans plugin"

为了解决这个问题,我将目标添加到插件的build-impl.xml文件中。

<target name="dist-ear" />

然后添加 netbeans 插件作为企业应用程序的依赖项。

重新部署应用程序后,您的 EJB 的依赖项可能已加载,您无需重新启动 glassfish 服务器。

于 2012-08-01T11:17:28.077 回答
0

我在 Windows 平台上使用 Glassfish 3.1.2 时遇到了同样的问题。当从我的 IDE 中删除或重新部署应用程序时,这些文件会打开,并且(显然)Windows 不会让部署操作删除它们。

我的解决方案是在每次发布时使用“Real Jar Archives for Deployment”将部署更改为“完全部署”,而不是更动态和更快的“目录部署”。

我不知道如何/如何对 Netbeans 进行此更改,因为我不再使用 Netbeans。

对于 Eclipse:在视图/选项卡上双击您的服务器Servers以打开服务器的Overview设置。页面最底部的设置是User (sic) Real Jar Archives for Deployment .... 检查它(默认不检查),然后重试。

于 2012-07-31T15:58:09.267 回答