【发布时间】:2020-04-19 16:33:58
【问题描述】:
从 Main 类调用我的 EJB:
MyService myService = (MyService) ctx.lookup(MyService.class.getName());
给出错误:
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at com.ejb.calculator.Main.main(Main.java:26)
如何调用我的 EJB?
尝试了两种不同的 JNDI 调用:
JNDI_NAME = "java:global/ejb/MyService";
MyService myService = (MyService) ctx.lookup(JNDI_NAME);
和
MyService myService = (MyService) ctx.lookup(MyService.class.getName());
代码:
https://bitbucket.org/powder366/ejb/src/master/
Glassfish 命令:
asadmin start-domain --verbose
asadmin stop-domain --verbose
http://localhost:8080/
http://localhost:4848/common/index.jsf
mvn package
asadmin deploy ejb-1.0-SNAPSHOT.jar
截图:
注意:
我的测试用例适用于嵌入式容器,但我无法调用我的外部运行容器。
使用的版本有Java8、EJB3.0、Glassfish5.0.1、Java EE8.0.1
更新1: 在部署 container-deploy-log.txt 期间添加了日志。请参阅 git 远程。
更新 2: 将工作更改推送到 git remote。
更新3: 将 MDB 示例推送到 git remote。
【问题讨论】:
标签: java jakarta-ee glassfish ejb jndi