2012-07-31 73 views
2

我有一个ebj使用一些外部库(在这种情况下,这些库是由我自己编写的)。我已经将它们包含在我的EJB中。Glassfish 3.1.2在应用程序部署后重新加载需要的jar文件

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

我迄今发现的唯一解决方案是重新启动服务器......并非真正适用于开发/测试会话,您必须等待glassfish重新启动您所做的每一项小改动。

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

感谢您阅读我。

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

回答

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 ...。检查它(默认情况下未选中),然后重试。

+0

我会尝试看看如何使用netbeans获得此行为。它显然被oracle标记为bug,我读到的一个解决方案是将ejb添加到企业应用程序中。它的工作原理,除非你添加netbeans插件依赖到你的EJB,这就是我所做的。谢谢。 – nathan 2012-08-01 07:38:55

+0

我不知道其他人是否也这样做,但我必须将netbeans插件添加到我的EJB依赖关系中。它完美的作品,但当我试图做我曾经提到过的与我的企业应用程序的评论的技巧。它会导致这样的错误:在EE应用程序编译的项目中不存在“Target”dist-ear“。我正在尝试查看原因。 – nathan 2012-08-01 08:49:06

0

行,所以我终于得到了一些具体成果。我不知道是否有很多人以我的方式工作,但我会公开我找到的适合我需求的解决方案。首先,如果您在使用netbeans平台的独立java客户端上部署EJB(所以使用netbeans插件),您可能会感到担忧。

问题是glassfish(3.1.2,我不知道其他版本是否出现同样的问题)在重新部署EJB时不重新加载所需的jar。所以,如果你的EJB有一定的依赖性,如果一些变化在他们提出,GlassFish中不会看到他们,并会继续使用旧罐子甚至EJB(重新)部署后。所以,我认为这将是相当快解决(或没有),但直到甲骨文做他的工作,这里是一个解决它标记为甲骨文的错误。

注意:只有当您的EJB具有netbeans插件依赖关系时才会发生此错误。如果不是您的情况,您可以将EJB添加到企业应用程序中并进行部署,并且您的jar将自动重新加载。

假设你在我的情况。如果你编译你的EE应用程序,其中包含依赖于netbeans插件的EJB。您可能会得到这个错误:

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

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

<target name="dist-ear" /> 

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

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

相关问题