我有一个使用一些外部库的ebj(在这种情况下,这些库是我自己编写的)。我把它们包含在我的EJB中。
问题是,玻璃鱼似乎只加载了一次所需的罐子(在第一次部署时),并认为他已经有了罐子用于进一步部署。这只是一个假设,但是如果我在EJB使用的某个库中进行任何更改,重新部署EJB,则不会应用所做的更改...... Glassfish仍然使用他可能保留在缓存中的旧jar或类似的东西(我可以在玻璃鱼库中找到任何罐子的标记。)
到目前为止我找到的唯一解决方案是重新启动服务器...不适合开发/测试会话,你必须等待glassfish重新启动你所做的每一个小改动。
我的问题是:有没有办法避免这种行为并强制glassfish在每次部署时重新加载所需的jar?
感谢您阅读。
注意:我正在使用netbeans进行本地部署,但直接从glassfish管理控制台执行此操作会导致相同的结果。
答案 0 :(得分: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 ...
。检查它(默认情况下未选中),然后重试。
答案 1 :(得分:0)
好的,所以我终于得到了一些具体的结果。我不知道是否有很多人按照我的方式工作,但我会公开我找到的解决方案以满足我的需求。
首先,如果您使用netbeans平台在独立的Java客户端上部署EJB(使用netbeans插件),您可能会感到担忧。
问题是glassfish(3.1.2,我不知道其他版本是否会发生同样的问题)在重新部署EJB时不会重新加载所需的jar。因此,如果您的EJB有一些依赖关系,并且如果它们中有一些更改,则glassfish将不会看到它们,并且即使在EJB(重新)部署之后也将继续使用旧的jar。它被oracle标记为bug,所以我认为它很快就会解决(或者不会),但是在oracle完成他的工作之前,这是一个解决方案。
注意:只有当您的EJB具有netbeans插件依赖项时才会发生此错误。如果不是这种情况,您可以将EJB添加到企业应用程序中并进行部署,然后自动重新加载jar。
假设你在我的情况下。如果您编译包含EJB的EE应用程序,该应用程序依赖于netbeans插件。您可能会收到此错误:
Target "dist-ear" does not exist in the project "the path your netbeans plugin"
要解决此问题,我已将目标添加到插件的 build-impl.xml 文件中。
<target name="dist-ear" />
然后添加netbeans插件作为企业应用程序的依赖项。
重新部署应用程序后,您的EJB依赖项可能已加载,您无需重新启动Glassfish服务器。