0

首先是我项目结构的一点输入。

这是一个网店项目,由三个模块组成:

  • EJB
  • 远程桌面客户端
  • 网络客户端

总共涉及六个 NetBeans 项目:

  1. 包含所有模块的主 EE 项目。
  2. EJB 模块项目
  3. Web客户端模块项目
  4. 远程客户端模块项目
  5. EJB 远程接口的类库项目
  6. 包含实体类“简化”形式的类的类库项目,这些实体类最初位于 EJB 模块项目中。我决定使用这些类而不是原始实体类的原因是因为在分发到远程客户端应用程序时我在序列化/反序列化它们时遇到了一些问题。

现在我将描述这些项目是如何相互联系的(通过参考上面的列表):

  • EJB 项目包含对#5 和#6 的引用
  • Web 客户端项目包含对 #2 的引用
  • 远程客户端项目包含对#2、#5 和#6 的引用
  • EJB 远程接口项目包含对#6 的引用

所以基本上,所有项目(除了 web 模块)都包含对包含简化或“封装”形式的实体类的项目的引用。

当我尝试将此 EE 应用程序(主 EE 项目)部署到 GlassFish(v 4.0)时,我不断收到此错误,即项目 #6 中定义的类在项目 #5 中不可见。项目#6 中定义了一个“产品”类,用于项目#5 的远程接口。在编写代码期间,我没有收到有关此问题的任何错误,因为引用放置正确。此外,主 EE 项目的清理和构建成功完成,但是在部署时,我仍然不断收到同样的错误:

package musicshop.entity.encapsulated does not exist
import musicshop.entity.encapsulated.Product;

注意:musicshop.entity.encapsulated是项目#6 中包含该“产品”类的包。此外,这import musicshop.entity.encapsulated.Product;是来自项目#5 的一个远程接口的行。

此外,值得一提的是,在我从 GlassFish 取消部署应用程序并尝试重新部署它之前,整个事情都运行良好。

4

1 回答 1

0

我很高兴地说我已经设法找到了解决这个问题的方法。它不漂亮,但它会达到目的,直到我找到另一种方式。

我发现GlassFish 上只能部署一个类库项目。我曾经只有一个这样的项目,即拥有 EJB 远程接口的项目。但是当我创建另一个类库项目时,将保存那些简化版本的实体类(我这样做是为了将所有这些类保存在一个地方并将它们导入到我需要使用它们的任何地方。这样,如果我愿意做一些编辑,我只需要做一次。)。

所以,我必须做的是消除额外的类库项目,并简单地将这些类复制到我需要使用它们的任何地方。现在,我将它们分散在其他项目中,这将使它们现在很难维护,但它确实解决了在服务器上部署的问题。

这样做之后,我记得我曾经尝试过做一些类似的事情——创建额外的类库项目,该项目将包含可以在需要使用的任何地方导入的内容,并且在 GlassFish 上部署应用程序时遇到了同样的错误。自然,我以与此相同的方式解决了该问题。所以我想知道为什么不能部署多个类库项目?有任何想法吗?

于 2013-10-22T13:54:43.247 回答