我想学习如何使用EJB,所以我开始阅读“Enterprise JavaBeans 3.1第6版”。在创建第一个示例(FirstEJB示例章节)后,我遇到了NameNotFoundException
的问题。据我所知,这意味着EJB在容器上不可见/不存在。该项目似乎很简单,但我不知道如何解决问题。有帮助吗?可在此处找到项目https://github.com/pepuch/EJB-ch04-firstejb。这就是我使用这个项目的方式。
ejb
命令构建了gradle clean build
项目,并使用glassfish管理站点将已创建的ejb-1.0.jar
部署到服务器。gradle clean test
启动了客户端单元测试。此测试显示NameNotFoundException
例外。简而言之,项目包含两个子项目:
[UPDATE]
我在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服务器上启动应用程序。
答案 0 :(得分:0)
首先,检查EJB是否已创建。为此,请检查应用程序服务器日志。它应该写出正在发布的EJB的名称。创建?检查名称。
第2步: 检查interface-stub的包是否与已发布的EJB的远程/本地接口相同。这可能是原因。
更新:
calc = (SimpleCalculatorBean) namingContext.lookup(JNDI_NAME_CALC);
你应该直接获得EJB的接口,而不是bean。 此外,EJB上的@Local接口可能不起作用 - 可能你需要将其设为@Remote。