我是 EJB 的新手,正在尝试“Hello World”类型的 EJB Java 程序。这是我的 EJB:
package dukesbookstore.ejb;
@Stateless(name="BookRequestBean", mappedName="ejb/BookRequestBean")
@Named
public class BookRequestBean {
//Other codes here
}
这是我的客户:
Properties prop = new Properties();
prop.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
prop.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
prop.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
try {
InitialContext ctx = new InitialContext(prop);
ctx.lookup("ejb/BookRequestBean");
System.out.println("EJB Look-up successfull!!");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但是每当我尝试运行时,我都会遇到以下异常:
javax.naming.NamingException: Lookup failed for 'ejb/BookRequestBean' in SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=localhost, java
我已经添加了 appserv-rt.jar
, gf-client.jar
, javaee.jar
,但仍然没有成功。谁能帮助我,我在这里缺少什么?我使用的是 Glassfish 3.1
最佳答案
这可能有几个原因:
1) 您的 EJB
未映射到 JNDI 名称。您需要检查您的 EJB
是否已成功部署并且是否映射到 JNDI 名称。您可以检查 Server GUI
、Server Log on startup
或使用 Universal Test Client
查看 EJB
是否正确映射.请注意,UTC
将仅显示远程公开 EJB。
2) 您的EJB
仅向本地 应用程序公开。在这种情况下,对 EJB
的远程调用 或跨应用程序调用(不同的 EAR、WAR...)将失败。在这种情况下,创建远程接口(interface) 并将其公开。 本地接口(interface) 仅将 EJB 公开给本地调用。 远程接口(interface) 将 EJB 公开给远程 或跨应用程序调用。
3) 您的 RMI/IIOP
port 可能不正确。您可以检查 Glassfish GUI
或 Server startup log
以查看 port RMI/IIOP
分配给了什么。
注意:要诊断确切的问题,请发布完整的堆栈跟踪。
关于java - EJB - 查找 'ejb/BookRequestBean' 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16481198/