Netbeans远程项目(EJB)

时间:2013-08-07 17:47:27

标签: java java-ee netbeans ejb

这很令人困惑,当我在 Netbeans 中创建一个新的Session Bean时,它可以选择local interfaceremote。但是,如果我选择remote,则会出现一个列表,其中包含现有的Java SE ME 项目。如果我选择其中任何一个(顺便说一句,我打算以后用作bean的GUI客户端)。它在我的企业应用程序中生成会话bean,但它在 Java SE 项目中添加了远程类。我不明白这是什么意思?

 My Netbeans Project Tree

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:2)

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

在您的情况下,我建议使用远程界面,因为您的一个客户端将是远程的:命令行独立应用程序通常不会在应用程序服务器主机(与通常驻留在同一JVM中的servlet相反)。

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

本地远程接口之间存在一些语义和技术差异:使用第一个意味着该接口只能用于localhost(这么多电话不会影响性能)。本地bean只存在于一个JVM中。它会影响有关按值/引用调用的行为(请参阅Why do we need separate Remote and Local interfaces for EJB 3.0 session beans)。


关于NetBeans屏幕截图:

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

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

如果我的行为不正确,我也会欣赏正确的方向。