0

我想学习如何使用 EJB,所以我开始阅读“Enterprise JavaBeans 3.1 第 6 版”。创建第一个示例(FirstEJB 示例章节)后,我遇到了NameNotFoundException. 据我所知,这意味着 EJB 在容器上不可见/不存在。该项目似乎很简单,但我不知道如何解决问题。有什么帮助吗?可以在这里找到项目https://github.com/pepuch/EJB-ch04-firstejb。这就是我处理这个项目的方式。

  1. 我已经ejb使用命令构建了项目,并使用 glassfish 管理站点gradle clean build部署到服务器。ejb-1.0.jar
  2. 我已经开始使用gradle clean test. 此测试显示NameNotFoundException异常。

简而言之,项目包含两个子项目:

  1. ejb - 项目创建 EJB jar
  2. 客户端 - 项目仅包含一个尝试创建和使用 EJB 的单元测试

[更新]

我在 jboss 服务器上启动了应用程序,它可以工作。这是 jboss 的代码:

// 使用 EJB 的类

Context context = new InitialContext();
context = new InitialContext();
final String JNDI_NAME_CALC = "SimpleCalculatorBean/remote";
CalculatorCommonBusiness calc = (CalculatorCommonBusiness)context.lookup(JNDI_NAME_CALC);
calc.add(2,3,4,5);

// jndi.properties

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099

我仍然无法在 glassfish 服务器上启动应用程序。

4

1 回答 1

0

首先,检查是否创建了 EJB。为此,请检查您的应用程序服务器日志。它应该写上要发布的 EJB 的名称。创建?检查名称。

第 2 步:检查您的 interface-stub 的包是否与已发布的 EJB 的远程/本地接口相同。这可能是原因。

更新:

calc = (SimpleCalculatorBean) namingContext.lookup(JNDI_NAME_CALC);

您应该获得 EJB 的接口,而不是直接获得 bean。此外,EJB 上的@Local 接口可能不起作用 - 可能您需要将其设为 @Remote。

于 2013-08-21T18:14:10.773 回答