繁体   English   中英

Netbeans远程项目(EJB)

[英]Netbeans Remote In Project (EJB)

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

我的Netbeans项目树

在此输入图像描述

在此输入图像描述

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

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

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

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


关于NetBeans截图:

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

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

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

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

这就是问题,我一直在努力解决这个问题:从实体类创建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,这可能需要重新启动应用服务器来重新加载库,因为它似乎不会自动发生。

如果我也做错了事,我会欣赏正确方向的推动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM