1

这太令人困惑了,当我在Netbeans中创建一个新的 Session Bean 时,它有一个用于制作的选项 local interface,以及一个remote. 但是,如果我选择了remote,则会出现一个包含现有 Java SEME项目的列表。如果我选择其中任何一个(顺便说一下,我打算稍后将其中一个用作 bean 的 GUI 客户端)。它在我的Enterprise Application中创建会话 bean ,但它在Java SE项目中添加了远程类。没看懂这是什么情况?

我的 Netbeans 项目树

在此处输入图像描述

在此处输入图像描述

4

3 回答 3

2

如果创建无状态 EJB 会话 bean,它可以实现本地和/或远程接口。

在您的情况下,我建议使用远程接口,因为您的客户端之一将是远程的:命令行独立应用程序通常不在应用程序服务器主机上运行(与通常驻留在同一 JVM 中的 servlet 相比) .

尝试以一种用户交互导致对 EJB 层的一次调用的方式设计远程接口。如果您的独立应用程序运行得足够快,那么 servlet 也可能足够快。如果反过来,您可能会发现适用于 servlet 的界面设计不适用于远程访问。

本地接口和远程接口之间存在一些语义和技术差异: 使用第一个意味着接口被设计为只能从 localhost 使用(如此多的调用并不会真正影响性能)。本地 bean 仅存在于一个 JVM 中。它会影响有关按值/引用调用的行为(请参阅为什么我们需要为 EJB 3.0 会话 bean 提供单独的远程和本地接口)。


关于 NetBeans 屏幕截图:

  • (远程)客户端在其范围内具有远程接口。没关系,因为它不需要查看其他任何内容。

  • 服务器/EJB 端,还有其他一切:EJB 和本地接口。唯一似乎缺少的是远程接口,因为 EJB 也实现了它。它背后可能有一些 NetBeans IDE 的魔力,但服务器端也需要远程接口。

于 2013-08-08T09:40:53.680 回答
1

EJB 旨在成为“执行业务逻辑”的组件。它们可以在本地(由应用服务器本身中的其他组件调用)或由客户端(例如小程序、桌面应用程序)远程使用。

在后一种情况下,您通过远程接口访问 EJB(这很有意义,它应该包含在客户端中,不是吗?)加上一些配置,告诉客户端如何连接到实际执行这些 bean 的服务器.

于 2013-08-07T19:40:51.903 回答
0

这就是问题所在,我一直在努力解决这个问题:从实体类创建 EJB 时,NetBeans 使您能够创建远程接口。这是我正在做的事情,因为我将有许多独立客户端访问这些 ejb。当您告诉 NetBeans 您要创建远程接口时,它会强制您将它们放在另一个项目中。这一切都很好,直到你定义你的实现,它看起来像这样:

public class DataFacade extends AbstractFacade<MyEntityClass> implements DataFacadeRemote {
...
}

现在,当您尝试将 ejb jar 部署到 Glassfish 时,它声称您的 jar 中没有 ejb,这是正确的,因为它对 DataFacadeRemote 接口一无所知。我为解决这个循环问题所做的是创建一个库 jar,我手动将其复制到 glassfish 服务器。然后当我部署 ejb jar 时,它会愉快地找到库 jar 并理解外观类(ejbs)。这也是一个巨大的痛苦,因为每当您对接口或实体类进行更改时,都必须复制库 jar,并且这可能需要重新启动应用服务器以重新加载库,因为它似乎不会自动发生。

如果我也做错了事情,我会很感激朝着正确的方向轻推。

于 2015-09-16T18:43:56.410 回答