我对EJB很陌生,并且尝试过"Hello“类型的EJB程序。以下是我的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();
}但是,每当我尝试跑步时,我都会被排除在外:
SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700,java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory,org.omg.CORBA.ORBInitialHost=localhost,java中的'ejb/BookRequestBean‘查找失败
我增加了appserv-rt.jar,gf-client.jar,javaee.jar,但还是没有运气。有人能帮我吗,我在这里缺少的是什么?我是水晶鱼3.1
发布于 2013-05-13 07:29:42
除了尼斯@RaviTrivedi的回答外,以下是一些想法:
@Named注释name和mappedName,对于玻璃鱼来说,只使用mappedName就足够了发布于 2013-05-12 09:30:59
这可能有几个原因:
1)您的EJB没有映射到JNDI名称。您需要检查您的EJB是否已成功部署并映射到JNDI名称。您可以检查Server GUI、Server Log on startup或使用Universal Test Client查看EJB是否被正确映射。注意,UTC将只显示远程公开的EJB。
2)您的EJB只向本地应用程序公开。在这种情况下,远程调用或交叉应用程序调用(不同的EAR、WAR.)你的EJB会失败的。在这个场景中,创建远程接口并公开它。本地接口只向本地调用公开EJB。远程接口向远程或跨应用程序调用公开EJB。
3)您的RMI/IIOP端口可能不正确。您可以检查Glassfish GUI或Server startup log,以查看分配给哪个端口RMI/IIOP。
注意:要诊断准确的问题,请贴出完整的堆栈跟踪。
发布于 2014-03-14 01:29:59
添加到@ registered和@Miljen,如果您正在使用Glassfish,您应该检查EJB是如何在JNDI中注册的。例如,在Glassfish中键入以下命令:
asadmin list-jndi-entrieshttps://stackoverflow.com/questions/16481198
复制相似问题